是否有可能在没有重置的情况下恢复到某些提交--hard?

时间:2016-08-08 09:31:27

标签: git version-control

我对git很新,来自mercurial。我做错了什么并推了推,但是有些队友已经把这些错误的改变了。所以reset --hard; push -f不是一个选择。是否有可能告诉git我想提交更改,以便它成为2次提交之前?我的意思是这样的:

master

commit 4 <<--- Remote/local master's head
   ^
   |
   |
commit 3
   ^
   |
   |
commit 2 <<-- I want git to craft changes so that commit 5 
   ^           is the same as commit 2
   |
   |
   |
commit 1

我想git生成更改,以便commit 5更改文件,使它们与commit 2处的文件相同。

有可能吗?

2 个答案:

答案 0 :(得分:3)

你可以使用git revert提交revert

git revert commit3 commit4

这将创建&#34;反向&#34;提交,这将取消您在其他提交中所做的更改。

在没有-f的情况下,历史仍然是快进的。

答案 1 :(得分:1)

强制推送队友没有问题,他们只需要在拉动(git reset --hard sha1-of-old-good-commit)然后再次拉动更改之前将存储库重置为上次已知的良好提交。此外,如果你推动你的私人&#34;工作分支,他们根本不应该关心那个分支,只有master或你合并所有工作的另一个分支的问题。

所以,为了最大限度地减少历史重写的问题(这是git的一个很好的功能,使用它并且不需要否认它!) - 总是提交私有分支:你可以安全地进行rebase / squash /在与&#34; master&#34;合并之前编辑该分支中的提交分支。