为什么 git 连续拒绝两次推送?
Why does git reject two pushes in a row?
有时,当我推送更改然后推送更多更改时,我会看到“已拒绝,不是快进”错误。我是唯一一个使用存储库的人,所以没有其他人推送任何东西。
当我快速推送几个更改时似乎会发生,这让我怀疑它是否与时间有关。有时我推送更改并快速推送修改后的更正,然后我看到了这个问题。它很少发生,所以我无法观察到可重复的模式。
我只是很困惑 git 当我是唯一一个推遥控器的人时,怎么会认为遥控器发生了分歧?任何人都可以澄清这个问题的可能原因吗?
谢谢
根据评论,我们现在确定发生这种情况是因为您正在快速修复(可能是拼写错误或类似错误)并修改之前的提交。一旦你修改了你已经推送的提交,你将不得不强制推送而不是常规推送。
大概 看起来 像它是基于时间的原因,是因为你更有可能在提交和推送你一分钟前刚刚提交的提交后不久修改提交,而从事一项新事物并做出承诺会花费更多时间。
至于为什么修改需要强制推送,Git在确定是否允许常规推送时会查看您的分支和远程分支上的提交ID。如果远程上有您尝试推送的本地分支上没有的提交,除非您强制推送,否则它将出错。每次修改提交时,都会更改提交的某些内容,因此将创建一个新的提交 ID,这意味着您已经推送的上一个提交 ID 不再位于您的分支上。
提示:强制推送时,好习惯使用:
git push --force-with-lease
而不是更明显的git push --force
。原因是如果远程分支上有您尚未获取的提交,--force-with-lease
仍然会出错,这意味着您(可能)不知道它们在那里。如果你是唯一一个在你的分支上工作的人,那么不太可能有你不知道的新提交,但是如果你碰巧在两台不同的机器上工作,它仍然可能发生,例如你下班后将一些提交推送到您的分支,而当您回到家时忘记获取(或拉取)。
有时,当我推送更改然后推送更多更改时,我会看到“已拒绝,不是快进”错误。我是唯一一个使用存储库的人,所以没有其他人推送任何东西。
当我快速推送几个更改时似乎会发生,这让我怀疑它是否与时间有关。有时我推送更改并快速推送修改后的更正,然后我看到了这个问题。它很少发生,所以我无法观察到可重复的模式。
我只是很困惑 git 当我是唯一一个推遥控器的人时,怎么会认为遥控器发生了分歧?任何人都可以澄清这个问题的可能原因吗?
谢谢
根据评论,我们现在确定发生这种情况是因为您正在快速修复(可能是拼写错误或类似错误)并修改之前的提交。一旦你修改了你已经推送的提交,你将不得不强制推送而不是常规推送。
大概 看起来 像它是基于时间的原因,是因为你更有可能在提交和推送你一分钟前刚刚提交的提交后不久修改提交,而从事一项新事物并做出承诺会花费更多时间。
至于为什么修改需要强制推送,Git在确定是否允许常规推送时会查看您的分支和远程分支上的提交ID。如果远程上有您尝试推送的本地分支上没有的提交,除非您强制推送,否则它将出错。每次修改提交时,都会更改提交的某些内容,因此将创建一个新的提交 ID,这意味着您已经推送的上一个提交 ID 不再位于您的分支上。
提示:强制推送时,好习惯使用:
git push --force-with-lease
而不是更明显的git push --force
。原因是如果远程分支上有您尚未获取的提交,--force-with-lease
仍然会出错,这意味着您(可能)不知道它们在那里。如果你是唯一一个在你的分支上工作的人,那么不太可能有你不知道的新提交,但是如果你碰巧在两台不同的机器上工作,它仍然可能发生,例如你下班后将一些提交推送到您的分支,而当您回到家时忘记获取(或拉取)。