这是我的git repo的状态(u1表示我,u2是其他人)
C1(U1)->C2(U2)->C3(U2)->C4(U2)->C5(U2)->C6(U2)->C7(U2)->C8(U2)->C9(U2)->C10(U1)
因此,只有C1是我的提交,而C10实际上是冲突合并提交(当我从分叉回购中提取更改时)。
我目前的HEAD是在C10。我希望它在C9。
当我这样做的时候
git reset --hard HEAD~1
我看到它实际上恢复到C1(我在历史上的最后一次提交),这不是最后一次提交。
如何恢复为C9?
答案 0 :(得分:2)
您应该编写git reset --hard HEAD^2
,这意味着访问合并提交的第二个父项(即U2中的一个)
参见git-revisions
git help revisions
〜,例如掌握〜3
修订参数的后缀〜表示
<n>
代的提交对象 命名提交对象的祖先,仅跟随第一个父项。即<rev>~3
是 相当于<rev>^^^
,相当于<rev>^1^1^1
。请参阅下面的插图 使用此表格。
在合并请求的情况下,第一个父项是合并分支的提交(这里将C9合并到C1中),因此C1是第一个父级,C9是第二个父级。
您可以使用nth
commit^n
父级
所以,如果你这样做
git reset --hard HEAD^2
它应该有用
有关^
表示法的其他信息:
<rev>
^,例如HEAD ^,v1.5.1 ^ 0修订参数的后缀^表示该提交对象的第一个父级。 ^
<n>
表示
第<n>
个父(即<rev>
^等同于<rev>
^ 1)。作为一项特殊规则,<rev>
^ 0表示 提交自身,并在<rev>
是引用提交的标记对象的对象名时使用 对象