git中Updates were rejected because the tip of your current branch is behind解決方案

1.錯誤說明

出現這個錯誤的原因是git本地倉庫的當前版本低於遠程倉庫的版本(大白話就是:你在github上進行的修改沒有同步到本地git倉庫中)。

2.錯誤原因

  • 第一種錯誤的原因

某一天你在本地倉庫進行了相關修改然後上傳到遠程倉庫中,這時本地倉庫和遠程倉庫都是同步的,不會出現這種錯誤。過了幾天你突然在github看到了一個錯誤需要修改,但你並沒有通過本地倉庫進行修改而是直接在github上進行修改,然後保存修改。這裏就要注意一個問題,之前你通過本地倉庫進行修改文章最後都會上傳到遠程倉庫(也就是github中),這就保證了遠程倉庫和本地倉庫是同步的,但是如果你直接在遠程倉庫(github)中進行修改,默認是不會上傳到本地的,這就導致了一個問題,本地倉庫中的相關內容沒有被修改,而遠程倉庫中的相關內容被修改,這裏可以理解爲遠程倉庫更新了而本地倉庫沒有更新,這就導致了本地倉庫的版本落後於遠程倉庫,也就是本地倉庫和遠程倉庫版本不一致。而你現在直接在本地倉庫這個落後的倉庫中修改相關文件然後上傳到遠程倉庫中就會出現錯誤,本地的修改是基於之前版本的修改,這種修改無法基於遠程倉庫中這種之後的版本,因爲要修改的地方原本的內容都不同就會導致有些修改方法無法實現(比如說本地倉庫要把1變爲2就加一就可以了,但是遠程倉庫不是1而是3,這是如果用本地倉庫的修改方法也加一就會變爲4,這顯然是不合適的)。

  • 第二種原因

在企業開發中,通常一個項目不是由一個人獨立完成的而是由多個人共同完成的,由於另外的程序員更改了相關的代碼並向遠程上傳了更改,而你沒有同步他的更改而是在之前的基礎上也更改了並上傳就會出現版本低於遠程版本的錯誤無法修改。舉個簡單的例子,要實現一個算式3先加一在減二最終得到2的功能,實現這個功能需要兩步:先加一j,然後減二。假設你負責實現加一的功能,另外一個程序員實現減二的功能,現在本地倉庫和遠程倉庫的數字都是3,正常情況下是你先實現加一的功能使本地的數字變爲4然後上傳到遠程使遠程的數字變爲4,然後另一位程序員將遠程更改後的數字4同步到本地使本地的數字也變爲4,然後在本地4的基礎上實現減二的功能使其變爲2然後上傳到遠程使其也變爲2,最後你同步遠程的2到本地使你的本地數字也變爲2,這樣就實現了該功能。但是由於你的個人原因,讓另一位程序員提前你一步實現減二的功能並上傳到遠程,導致遠程的數字變爲了0,而你現在上傳加一的功能肯定是會報錯的,如果成功那麼遠程就變爲了1這顯然是達不到功能需求的。

3.解決方案

  • 錯誤的解決方案(注意是錯誤的解決方案)
在終端下輸入:git push -u origin master -f
   這句話執行的後果就是在遠程倉庫中進行的相關修改會被刪除,使遠程倉庫回到你本地倉庫未修改之前的那個版本,
   然後上傳你基於本地倉庫的修改。這如果在企業開發中就會讓別的程序員的這些天的開發付之東流,一切回到解放前。
  • 正確的解決方案

先在終端下輸入:git pull origin master

這句話是說將遠程中進行的相關修改保存下來
  但這時可能會報錯:error: Your local changes to the following files would be overwritten by merge:
  解決方案看我另一篇博客:https://blog.csdn.net/IT_SoftEngineer/article/details/107133284
  解決上述問題後就可保證遠程倉庫的更新會被同步到本地而本地倉庫的修改也不會被覆蓋
  然後就是add,commit,push命令將本地的修改上傳到遠程倉庫中
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章