我正在做一个git bisect,在到达有问题的提交后,我现在正试图向前/向后迈出一步,以确保我在正确的一个.
我知道HEAD^要在历史上倒退但是还有另一条捷径可以让我前进(朝向未来的特定提交),如下所示:
A - B - C(HEAD) - D - E - F
Run Code Online (Sandbox Code Playgroud)
我知道,我的目标是˚F,我想从移动Ç到d.
注意:这不是Git的重复:如何在提交之间来回移动,我的问题略有不同,在那里没有回答
jak*_*b.g 51
我已经尝试了一下,这似乎是向前导航的技巧:
git checkout $(git rev-list --topo-order HEAD..towards | tail -1)
Run Code Online (Sandbox Code Playgroud)
其中towards是提交的SHA1或标记.
说明:
$()意味着:获取当前HEAD和towards提交之间的所有提交(不包括HEAD),并按优先顺序对它们进行排序(比如git log默认情况下 - 而不是时间顺序,这是奇怪的默认顺序rev-list),然后取最后一个(tail),即我们想去的那个.git checkout给执行结帐.您可以定义一个可在.profile文件中作为参数期望别名访问的函数,以向前导航到特定提交:
# Go forward in Git commit hierarchy, towards particular commit
# Usage:
# gofwd v1.2.7
# Does nothing when the parameter is not specified.
gofwd() {
git checkout $(git rev-list --topo-order HEAD.."$*" | tail -1)
}
# Go back in Git commit hierarchy
# Usage:
# goback
alias goback='git checkout HEAD~'
Run Code Online (Sandbox Code Playgroud)
d3d*_*day 42
所有你需要清除,而不是分离头状态是重置,而不是结帐.
git reset HEAD@{1}
Run Code Online (Sandbox Code Playgroud)
w0u*_*ert 38
我相信你能做到:
git reset HEAD@{1}
Run Code Online (Sandbox Code Playgroud)
及时向前推进.要继续多次提交,请使用HEAD @ {2},HEAD @ {3}等.
M K*_*M K 17
这就是我用来来回导航的东西.
转到下一次提交
function n() {
git log --reverse --pretty=%H master | grep -A 1 $(git rev-parse HEAD) | tail -n1 | xargs git checkout
}
Run Code Online (Sandbox Code Playgroud)
转到上一次提交
function p() {
git checkout HEAD^1
}
Run Code Online (Sandbox Code Playgroud)
向后遍历是微不足道的,因为您正在沿着树向下移动,并且总有一种方法可以走
function git_down
git checkout HEAD^
end
Run Code Online (Sandbox Code Playgroud)
当向前遍历时,您正在向上移动树,因此您需要明确您的目标分支:
function git_up
git log --reverse --pretty=%H $argv | grep -A 1 (git rev-parse HEAD) | tail -n1 | xargs git checkout
end
Run Code Online (Sandbox Code Playgroud)
用法:git down,git up <branch-name>