我对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
处的文件相同。
有可能吗?
答案 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;合并之前编辑该分支中的提交分支。