通常,當我推送更改然后推送更多更改時,我會看到“被拒絕,而不是快進”錯誤。當我是唯一使用存盤庫的人時會發生這種情況,因此我知道沒有其他更改。
這似乎取決于推動之間的時間。如果我進行一次推送,然后在第二次推送之前等待幾分鐘,則不會發生。如果我在一分鐘左右內快速進行兩次推動,這種情況經常或總是發生。
這可能是系統時鐘之間一些時序偏差的結果嗎?git是否有可能認為我的第二次推動在第一次之前,因為時鐘不完全一致?
過去我會做 git pull 來解決這個問題,但這會造成困難的合并。現在,我只是使用選項來強制推送,如果遙控器已經發散。
我只是很困惑當我是唯一一個推動它的人時,git怎么會認為遙控器已經發散了?誰能澄清這個問題的可能原因?
謝謝
uj5u.com熱心網友回復:
從我們現在確定的評論來看,這是因為您正在快速修復(可能是錯字或類似錯誤)并修改之前的提交。一旦你修改了一個已經推送的提交,你將不得不強制推送而不是常規推送。
據推測,它看起來像是基于時間的原因,是因為您更有可能在提交并推送您一分鐘前所做的提交后不久修改提交,而處理新事物并提交將花費更多時間。
至于為什么修改需要強制推送,Git 在確定是否允許常規推送時會查看您的分支和遠程分支上的提交 ID。如果您嘗試推送的本地分支上沒有遠程提交,除非您強制推送,否則它將出錯。每次修改提交時,都會更改有關提交的某些內容,因此將創建一個新的提交 ID,這意味著您已經推送的前一個不再在您的分支上。
提示:用力推動時,使用以下是一個好習慣:
git push --force-with-lease
而不是更明顯git push --force。--force-with-lease如果遠程分支上有尚未獲取的提交,原因仍然是錯誤,這意味著您(可能)不知道它們在那里。如果你是唯一一個在你的分支上作業的人,那么你不太可能有你不知道的新提交,但是如果你碰巧從兩臺不同的機器上處理 repo,它仍然可能發生,例如你將一些提交從作業中推送到您的分支,并在您回到家時忘記獲取(或拉取)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/431332.html
