我做了一些实验,这似乎可以实现向前导航的技巧(编辑:仅当您具有没有合并提交的线性历史记录时,它才能很好地工作):
git checkout $(git rev-list --topo-order HEAD..towards | tail -1)
towards提交或标记的SHA1 在哪里。
说明:
- 内部命令的
$()含义是:获取当前HEAD和towards提交之间的所有提交(不包括HEAD),并按优先顺序对它们进行排序(如git log默认设置-而不是按时间顺序排列,这是奇怪的默认设置rev-list),然后取最后一个(tail),即我们要转到的那个。
- 它将在子shell中进行评估,并传递
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~'