Reputation: 12865
What is the quickest way to checkout revision which is next (later in the time) to HEAD (when you are in detached head state)?
This should be something like:
git checkout HEAD~-1
but this command doesn't work. Also git log
, which doesn't show next revision hash.
The only way, which I found is:
git checkout master
git log
[find revision number]
git checkout <revnumber>
but it looks very slow. Is there a one command for this?
Upvotes: 2
Views: 307
Reputation: 3929
You need to find the children of HEAD and check out one of them. Please see Retrieve the list of child commits of an specific commit in Git and How do I find the next commit in git?
Upvotes: 0
Reputation: 79155
In git, there is no real efficient way to get the children of a commit. Any commit will have a pointer to its parents, not to its descendants that do not exist when the commit is created.
There is a possibility that there are children commit for which the branch reference has been deleted (so, these are commits that could be pruned at next garbage collection), or children commit that are part of the history of one or more existing branches.
However git 1.6 introduced --children
in the rev-list
command. It probably has to scan each commit that is “reachable from” (in git terminology, means “an ancestor of”) every single local and remote branch ref.
git rev-list
will list all descendants with no depth limitation, in the format commit_id parent_1_commit_id [parent_2_commit_id [...]]
. Therefore you will have to grep for the head commit ID in the second column to get the commit ids of its descendants.
Thus:
git rev-list --children HEAD | grep " $(git show --format=format:%H HEAD)"
You can make out a bash function to alias this to git children
:
[alias]
children = "!f(){ git rev-list --children \"$1\" | grep \" $(git show --format=format:\"%H\" \"$1\")\" | cut -f 1 -d ' '; }; f"
Then git children HEAD
will give you the commit ids of all descendants of HEAD.
Upvotes: 3
Reputation: 43690
No, there would not be a single git command. The revision that you are at when you are in a detached state could have multiple locations to go. It is possible that at that revision, you created multiple branches each with separate commits. So in that case what would be the next revision that you want?
You would need to let git know the branch that you want to get the next commit on. So that Git knows where to look for the next commit.
Upvotes: 1