If I have N
commits, how do I branch from the N-3
commit?
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>
Answered 2023-09-20 20:28:55
git push origin BRANCH_NAME
- anyone <sha1-of-commit>
run git checkout -b <name-of-branch> <sha1-of-commit>
but if the branch already exists git checkout -B <name-of-branch> <sha1-of-commit>
- anyone switch
command using the create option: git switch -c branchname <sha1-of-commit or HEAD~3>
- anyone To do this on github.com:
Answered 2023-09-20 20:28:55
The magic can be done by git reset.
Create a new branch and switch to it (so all of your latest commits are stored here)
git checkout -b your_new_branch
Switch back to your previous working branch (assume it's master)
git checkout master
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.
Answered 2023-09-20 20:28:55
git reset --hard
is not a good idea if you already have pushed the commit to origin... - anyone git push --force
if you had already pushed the branch before - anyone 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>
Answered 2023-09-20 20:28:55
git checkout -b
and git branch
seem to always checkout the head for me, not the current detached position, unless the hash is specified as an extra argument. see git switch -c newbranchname
- anyone branch
or checkout -b
command, not just the <branch_name>. The first command you show is actually irrelevant if you already knew the hash. - anyone 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
Answered 2023-09-20 20:28:55
git fetch
& git branch
command on your project's folder using the terminal, then check if the feature branch exists, if this is case then yes, of course you wont be able to create a branch from deleted branches, you could also revert a branch deletion in case the branch is gone - anyone git checkout -b <branch-name> <sha1-of-commit>
Answered 2023-09-20 20:28:55
git branch branchname <sha1-of-commit>
" (from the accepted answer)? - anyone git checkout -b
to create a new branch. - anyone 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).
Answered 2023-09-20 20:28:55
Using Sourcetree | The easiest way.
Answered 2023-09-20 20:28:55
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.
Answered 2023-09-20 20:28:55
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.
Answered 2023-09-20 20:28:55
A quick way to do it on your Github repo would be as followed:
Answered 2023-09-20 20:28:55
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
Answered 2023-09-20 20:28:55
git checkout -b
and git branch
seem to always checkout the head for me, not the current detached position. - anyone To do this in Eclipse:
It will create a local branch for you. Then whenever you push your changes, your branch will be pushed to the remote server.
Answered 2023-09-20 20:28:55
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.
Answered 2023-09-20 20:28:55
You can do it in Stash.
Answered 2023-09-20 20:28:55
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.
Answered 2023-09-20 20:28:55
HEAD~1
(where 1 specifies 1 commit back)? - anyone 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 2 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> //re-sets 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.
Answered 2023-09-20 20:28:55
git log --abbrev-commit --pretty=oneline
can be abbreviated to git log --oneline
- anyone With GitHub Desktop, display the history pane and right click on the commit you want, then choose the menu item "Create branch from commit".
Answered 2023-09-20 20:28:55
Branch...
option.Create branch
.Answered 2023-09-20 20:28:55
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.
Answered 2023-09-20 20:28:55
I used Git Gui (which comes with GIT for Windows).
Answered 2023-09-20 20:28:55
if you use source tree that is pretty straight forward.
Answered 2023-09-20 20:28:55