在git中,我可以通过说HEAD^
或HEAD~1
来指定以前的版本。走另一条路怎么样?假设我使用的是修订版X,并且我使用git checkout X^
。我该怎么回去呢?
像git checkout X+
这样的东西
发布于 2010-08-24 22:06:09
你不能真的做到这一点。git中的历史是一个directed acyclic graph -每次提交都包含对其父级的引用,但父级没有对其子级的引用。
当您考虑创建多个分支的提交时,这里的问题应该变得显而易见。你指的是哪个“下一次提交”?对于parents,您可以关闭(正常的合并提交有第一个和第二个父级),但是如何对子进程执行此操作?即使你知道你试图在哪个分支上(例如,你已经签出了master~4
,现在你想看看master~3
),它的定义也不是很好--你可能会遇到这样的情况:
- X (HEAD) - o - o - o - Y (master)
\ /
o - o - o ----------
也就是说,在简单的情况下,您可以这样做:
git checkout $(git rev-list HEAD..master | tail -n 1)
显然,对于线性历史,这将很好地工作。合并..。rev-list
在历史上从现在到过去工作,向后追随它。我认为它首先跟随第一个父代,所以最后打印的东西将是通过跟随所有最后的父代找到的HEAD
之后的提交。
编辑:这确实假设您知道要前进到哪个分支。如果你不这样做..。好吧,你很可能会在所有的引用中寻找以当前头作为父对象的提交--可能是对git rev-parse
的输出
git rev-list --all --children | grep ^$(git rev-parse HEAD)
然后从行中抓取另一个SHA1 (使用awk,随便什么)。但是,如果有多个结果,您将不得不手动检查或做出任意选择。
发布于 2010-08-24 22:08:14
据我所知,没有象征性的方式来引用提交的子对象。
我现在能给你的最好的就是git rev-list
的--children
选项。在这里,我要求将最近的四个承诺打印得很漂亮,以及关于他们孩子的信息。请注意,在每个条目(不是最近的条目)的" commit“行上有一个额外的提交编号,它指定该节点的子节点。您可以手动获取它,也可以通过一些shell脚本获取该子对象。
$ git rev-list --children --pretty HEAD~3...
commit 20dba296ad1d48ec90f9319e2c13b245e849f698
Author: Somebody <____@____.net>
Date: Thu May 6 19:10:38 2010 -0400
Support for complex trig/pow.
commit 9d42b5bac1721a847a39c25672e577c7101c8ff0 20dba296ad1d48ec90f9319e2c13b245e849f698
Author: Somebody <____@____.net>
Date: Wed May 5 21:55:07 2010 -0400
Fix doc formatting warning.
commit 72bed3baa9df71cb224dfa8388b5969d50f5567c 9d42b5bac1721a847a39c25672e577c7101c8ff0
Merge: b8244cb61491c9cdb83d36e57f8eb49773e44f6b 899c3dd3f9f419f200b84ca0abe59d7ac3d5bb53
Author: Somebody <____@____.net>
Date: Wed May 5 21:54:59 2010 -0400
Merge branch 'master'
commit 899c3dd3f9f419f200b84ca0abe59d7ac3d5bb53 72bed3baa9df71cb224dfa8388b5969d50f5567c
Author: Somebody <____@____.net>
Date: Wed May 5 21:19:11 2010 -0400
Fix link
https://stackoverflow.com/questions/3557014
复制相似问题