如何发现已推送的提交已被修改然后再次推送?

时间:2018-05-30 14:39:38

标签: git github

我一直都知道,如果我已经推送了一个提交,我就不应该改变它的哈希值(将其重新命名, - 修改它),然后再将它推回去,因为你最终会得到(可能)两个相同的提交但使用不同的哈希值。

如果我从遥控器拉出来怎么可能知道发生了类似的事情?使用不同的哈希值进行两次相同的提交有什么问题?

3 个答案:

答案 0 :(得分:1)

要重新推送已更改的提交,您必须指定-f选项。这意味着改变历史(你说的是'我已经推过的这个提交 - 我希望它在过去被删除')。

对于那些同时拉扯的人来说,这会破坏事情。他们的下一次拉动或推动会导致冲突并需要合并 - 所以git会告诉他们。

换句话说,git push -f是允许的:

  • 如果您是唯一的开发者
  • 或者如果你在意识到错误后很快就这样做了。

答案 1 :(得分:0)

如果我从那个遥控器拉出来,我怎么可能知道这样的事情发生了? 正如您已经注意到的那样,如果您已经撤消了提交,则哈希值会有所不同。如果提交消息也发生了变化,您可能没有意识到它是相同的提交。

使用不同的哈希值进行两次相同的提交有什么问题? 您很可能会为自己和处理回购的其他人造成冲突。

有关详细信息,请参阅https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History

答案 2 :(得分:0)

你问的是“如果我拉动会发生什么”。没什么,因为你会同步,因为你已经推动了重写的历史。当多个人使用相同的远程存储库时,问题就出现了。

说,你修改,改组或以其他方式重写最新的提交。实质上,这将删除最近的提交并在前一个提交之上写入新的提交。现在你将它推送到远程存储库,它将被拒绝,因为你的最新提交与远程知道的最新提交无关。

所以你必须强行推动,覆盖远程分支。

现在,如果另一个开发人员从该遥控器拉出来,他们最终会遇到麻烦:他们仍然会删除您删除的旧提交,并且他们的本地仓库无法将您的仓库与任何树匹配在他们的回购。

请参阅Git pull after forced update如何解决此问题。

因此,如果您真的想要重写已推送的历史记录,则需要与该远程存储库的其他用户进行仔细协调。

所以要回答你的问题,你将如何发现一个强制推动的力量:你将无法拉动。