Question

Branch from a previous commit using Git

If I have an n number of commits, how can I create a branch from the n-3 commit?

 2651  1331201  2651
1 Jan 1970

Solution

 3781

Create the branch using a commit hash:

git branch branch_name <commit-hash>

Or by using a symbolic reference:

git branch branch_name HEAD~3

To checkout the branch while creating it, use:

git checkout -b branch_name <commit-hash or HEAD~3>
2010-05-12
CB Bailey

Solution

 369

To do this on github.com:

  1. Go to your project.
  2. Click on the "Commits".
  3. Click on the <> ("Browse the repository at this point in the history") on the commit you want to branch from.
  4. Click on the "tree: xxxxxx" up in the upper left. Just below the language statistics bar, you'll get the option to "Find or Create Branch" (just type in a new branch name there) Branch from previous commit
2013-08-08
OneSolitaryNoob

Solution

 137

The magic can be done by git reset.

  1. Create a new branch and switch to it (so all of your latest commits are stored here)

    git checkout -b your_new_branch
    
  2. Switch back to your previous working branch (assume it's master)

    git checkout master
    
  3. Remove the latest x commits, keep master clean

    git reset --hard HEAD~x    # in your case, x = 3
    

From this moment on, all the latest x commits are only in the new branch, not in your previous working branch (master) any more.

2015-08-03
Jing Li

Solution

 99

If you are not sure which commit you want to branch from in advance you can check commits out and examine their code (see source, compile, test) by

git checkout <sha1-of-commit>

once you find the commit you want to branch from you can do that from within the commit (i.e. without going back to the master first) just by creating a branch in the usual way:

git checkout -b <branch_name>
2014-02-10
stanm

Solution

 85

Simply run:

git checkout -b branch-name <commit>

For example:

git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8

The checkout command with the parameter -b will create a new branch and it will switch you over to it.

2019-01-10
d1jhoni1b

Solution

 37
git checkout -b <branch-name> <sha1-of-commit>
2017-07-11
Tyler Liu

Solution

 28

This creates the branch with one command:

git push origin <sha1-of-commit>:refs/heads/<branch-name>

I prefer this way better than the ones published above, because it creates the branch immediately (does not require an extra push command afterwards).

2019-09-09
Alexander Samoylov

Solution

 16

A great related question is: How the heck do you figure this out using the --help option of Git? Let's try this:

git branch --help

We see this output:

NAME
       git-branch - List, create, or delete branches

SYNOPSIS
       git branch [--color[=<when>] | --no-color] [-r | -a]
               [--list] [-v [--abbrev=<length> | --no-abbrev]]
               [--column[=<options>] | --no-column]
               [(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>]
               [--points-at <object>] [<pattern>...]
       git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
       git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
       git branch --unset-upstream [<branchname>]
       git branch (-m | -M) [<oldbranch>] <newbranch>
       git branch (-d | -D) [-r] <branchname>...
       git branch --edit-description [<branchname>]

Gobbledegook.

Search through the subsequent text for the word "commit". We find this:

   <start-point>
       The new branch head will point to this commit. It may be given as a branch name, a
       commit-id, or a tag. If this option is omitted, the current HEAD will be used instead.

We're getting somewhere!

Now, focus on this line of the gobbledegook:

git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]

Condense that to this:

git branch <branchname> [<start-point>]

And done.

2016-07-19
Purplejacket

Solution

 16

This is what I did:

C:\Users\[path]\build>git checkout -b responsivenavigation 8a75b001096536b3216022484af3026aa9c7bb5b
Switched to a new branch 'responsivenavigation'

C:\Users\jaimemontoya\[path]\app>git branch
  master
* responsivenavigation

In this case, 8a75b001096536b3216022484af3026aa9c7bb5b was and old commit belonging to the master branch.

2018-06-14
Jaime Montoya

Solution

 16

Using Sourcetree | The easiest way.

  • First, checkout the branch that you want to take the specific commit to make a new branch.
  • Then look at the toolbar, select Repository > Branch ... the shortcut is Command + Shift + B.
  • And select the specific commit you want to take. And give a new branch name then create a branch!

enter image description here

2019-12-11
Pengguna

Solution

 14

No one mentioned git switch yet?

You can do:

git checkout <commit-hash>

Or by using a symbolic reference:

git checkout HEAD~3

And then:

git switch -c my-new-feature-branch

2022-10-12
yshean

Solution

 10

A quick way to do it on your GitHub repository would be as followed:

  • Find the specific commit from your branch

  • Beside the SHA id, click on 'Browse the repository at this point in the history'

  • Here you can create a new branch from this commit

    enter image description here

2017-01-14
Vatsal Parekh

Solution

 4

To do this in Eclipse:

  • Go to "Git Repository Exploring" Perspective.
  • Expand "Tags" and choose the commit from which you want to create branch.
  • Right click on the commit and choose "Create Branch".
  • Provide a branch name.

It will create a local branch for you. Then whenever you push your changes, your branch will be pushed to the remote server.

2013-05-17
Saurabhcdt

Solution

 4

Select Commit

For Git GUI users you can visualize all the history (if necessary) and then right click on the commit you wish to branch from and enter the branch name.

Enter Branch name

Visualize all the history

2018-08-28
Ivan

Solution

 3

I was able to do it like so:

git branch new_branch_name `git log -n 1 --skip 3 --format=%H`

Where you must enter the skip value. 0 is the latest, 1 is the previous, 2 is the commit before that, etc.

2013-01-31
Mike Graf

Solution

 3

You can do it in Stash.

  1. Click the commit
  2. On the right top of the screen click "Tag this commit"
  3. Then you can create the new branch from the tag you just created.
2017-01-18
David Ruan

Solution

 3

Go to a particular commit of a Git repository

Sometimes when working on a Git repository you want to go back to a specific commit (revision) to have a snapshot of your project at a specific time. To do that all you need it the SHA-1 hash of the commit which you can easily find checking the log with the command:

git log --abbrev-commit --pretty=oneline

which will give you a compact list of all the commits and the short version of the SHA-1 hash.

Now that you know the hash of the commit you want to go to you can use one of the following two commands:

git checkout HASH

or

git reset --hard HASH

checkout

git checkout <commit> <paths>

Tells git to replace the current state of paths with their state in the given commit. Paths can be files or directories.

If no branch is given, Git assumes the HEAD commit.

git checkout <path> // Restores <path> from your last commit. It is a 'filesystem-undo'.

If no path is given, Git moves HEAD to the given commit (thereby changing the commit you're sitting and working on).

git checkout branch // Means switching branches.

reset

git reset <commit> // Resets the current pointer to the given commit.

If you are on a branch (you should usually be), HEAD and this branch are moved to commit.

If you are in detached HEAD state, Git reset does only move HEAD. To reset a branch, first check it out.

If you wanted to know more about the difference between git reset and Git checkout I would recommend to read the official Git blog.

2018-07-20
L Y E S - C H I O U K H

Solution

 2

With Sourcetree (version currently used: 3.1.3)

  1. Open the History in Sourcetree

    Find history in Sourcetree

  2. It will list all the commits in the main window

  3. Right-click on the desired commit and click on the Branch... option.

  4. Give a name for the branch in the new window and click Create branch.

  5. The new branch (local to your system) will come on the left side along with the other existing branches, which you can push to the origin to get it to the repository, that way it becomes available to other users.

2022-06-22
Arun Sudhakaran

Solution

 2

I don't know why people enjoy making things more complicated. Here is a simple one-liner to

git checkout <commit_id>        # Gives a snapshot of the repository at this commit
git switch -c <new_branch_name> # Creates a new branch from that commit
2023-09-29
Pawan Kumar

Solution

 1

With GitHub Desktop, display the history pane and right click on the commit you want. Then choose the menu item "Create branch from commit".

2022-03-27
jlaurens

Solution

 0

If you are looking for a command-line based solution, you can ignore my answer. I am gonna suggest you to use GitKraken. It's an extraordinary git UI client. It shows the Git tree on the homepage. You can just look at them and know what is going on with the project. Just select a specific commit, right-click on it and select the option 'Create a branch here'. It will give you a text box to enter the branch name. Enter branch name, select 'OK' and you are set. It's really very easy to use.

2019-09-13
shamiul97

Solution

 -1

I used Git Gui (which comes with Git for Windows).

  1. On the menu bar, open the Branch menu and select Create...
  2. Specify the name for the new branch in the Branch Name section
  3. Select Revision Expression: in the Start Revision section and enter the commit ID (I just used the 8 digit ID from Visual Studio and it worked)

Create New Branch dialog window

2022-02-24
Trisped

Solution

 -2

If you use Sourcetree that is pretty straightforward.

  • Right click the commit from where you need to create a new branch
  • Click on 'branch'
  • Type name of new branch in the dialog appeared and click 'create branch'
2019-07-31
Ibtisam Asif