Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何发现已推送的提交被修改,然后再次推送?_Git_Github - Fatal编程技术网

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

Git 如何发现已推送的提交被修改,然后再次推送?,git,github,Git,Github,我一直都知道,如果我已经推送了一个提交,我就不应该改变它的哈希值(重新设置它的基址,--修改它),然后再推送它,因为你会得到(可能)两个相同的提交,但哈希值不同 如果我从那个遥控器拔出,我怎么可能知道发生了这样的事?用不同的哈希值进行两次相同的提交有什么问题吗?如果我从那个遥控器中提取,我怎么可能知道发生了类似的事情? 正如您已经注意到的,如果您已经拉入了所说的提交,那么散列将有所不同。如果提交消息也发生了更改,您可能没有意识到这是同一个提交 使用不同的哈希值进行两次相同的提交有什么问题? 您很

我一直都知道,如果我已经推送了一个提交,我就不应该改变它的哈希值(重新设置它的基址,--修改它),然后再推送它,因为你会得到(可能)两个相同的提交,但哈希值不同


如果我从那个遥控器拔出,我怎么可能知道发生了这样的事?用不同的哈希值进行两次相同的提交有什么问题吗?

如果我从那个遥控器中提取,我怎么可能知道发生了类似的事情? 正如您已经注意到的,如果您已经拉入了所说的提交,那么散列将有所不同。如果提交消息也发生了更改,您可能没有意识到这是同一个提交

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


有关更多信息,请参阅。

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

这对任何在此期间拉过车的人来说都是一种破坏。他们的下一次拉或推将导致冲突和需要合并,所以git会告诉他们

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

  • 如果你是唯一的开发者
  • 或者如果你在意识到错误后很快就这么做了
    • 你在问“如果我拉会发生什么”。什么都没有,因为你会同步,因为你已经强制推了重写的历史。问题是当多人使用同一远程存储库时

      比如,您修改、重新设置基础或以其他方式重写最新提交。本质上,这会删除最近的提交,并在前一个提交的基础上写入新的提交。现在您将其推送到远程存储库,它将被拒绝,因为您的最新提交与远程知道的最新提交没有关系

      因此,您必须强制推送,覆盖远程分支

      现在,如果另一个开发人员从远程调用,他们将陷入麻烦:他们仍然有您删除的旧提交,并且他们的本地repo无法将您的repo与他们repo中的任何树匹配

      看看如何解决这个问题

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


      因此,为了回答您的问题,您将如何发现强制提交:您将无法执行强制提交。

      是的,这是正确的,这是我通常做的,因为我不从事大型项目。但是,是否有什么东西会立即触发我的思维和事情“好吧,这个承诺肯定是两次被错误地推了”@matt.logic我被你的质疑弄糊涂了。如果您正在推送更改的提交,git将拒绝在没有
      -f
      的情况下推送。我认为(但不确定)git会提示您在随后的合并中发送一条提交消息。这是有意义的,我从来没有尝试过推一个修改后的提交,因为我知道这不是一个好主意,我必须使用push--force删除最新的提交。因此,基本上,如果不故意使用
      push--force
      ,就无法推送修改后的提交,而且在修改后的提交或重定基础的提交中,提交日期和作者日期是不同的。