我怎样才能取消提交git仓库中的最后一个提交?
考虑到有几个git命令在裸存储库中是没有意义的(因为裸存储库不使用索引并且没有工作目录),
git reset --hard HEAD^
不是一个解决scheme来取消在这样的存储库中的最后一个变化。
通过互联网search,我所能find的与这个主题相关的就是这个 ,我在这里给出了三种方法:
1.“手动更新参考(涉及pipe道)”;
2.“ git push -f
从非裸仓库”;
3.“ git branch -f this $that
”。
你认为哪种解决scheme更合适?还有其他方法可以做到这一点? 不幸的是,我发现有关git仓库的文档相当糟糕。
非常感谢你,
拉维尼亚
你可以使用git update-ref
命令。 要删除最后一个提交,你可以使用:
$ git update-ref HEAD HEAD^
或者如果你不在你不能删除最后一个提交的分支中:
$ git update-ref refs/heads/branch-name branch-name^
如果你愿意,你也可以通过sha1:
$ git update-ref refs/heads/branch-name a12d48e2
请参阅git-update-ref命令的文档。
如果您在裸回购中使用以下内容:
git reset --soft <commit>
那么你不会遇到你使用的问题 – --mixed
和 – --mixed
选项裸回购,因为你不是试图改变裸回购没有(即工作树和索引)的东西。 在你的情况下,你会想要使用(从裸回购):
git reset --soft HEAD^
要在远程回购上切换分支,请执行以下操作:
git symbolic-ref HEAD refs/heads/<branch_name>
git push -f
应该可以正常工作:
如果你克隆裸回购,删除最后一次提交( git reset --hard HEAD^
如你所说,但在本地非裸回购),并推回( -f
):
- 您不会更改您删除的之前的其他提交的任何SHA1。
- 你可以肯定的是,你将裸回购的确切内容减去额外的提交(因为你刚刚克隆了它)。
你也可以使用git refspec符号来做这样的事情:
git push -f origin +<commit you want to revert to>:<destination_head | branch_name>
这强制更新目标分支(如ref所示)到源提交,如+<object ref>
部分所示。