剛開始學習git,有個疑問.
小A和小B都從遠端git clone了最新的版本。
兩個人都在本地對程式碼進行了修改。
小A先提交了程式碼。
這時小B再提交程式碼,會發生什麼事?
是會覆蓋小A提交的程式碼還是不讓提交呢?
伊谢尔伦2017-05-02 09:35:30
先回答問題:
小A先提交了程式碼,遠端函式庫和小A得本地函式庫同步,假設為0 -> a
此時小B的本地函式庫為0 -> b,遠端函式庫的版本比本機函式庫較新,git會拒絕推送並報錯誤。
git 會要求 git pull 更新本地庫,而 pull 操作相當於自動的 fetch 和 merge 操作,會試圖自動將遠端程式庫合併入本機程式庫,在有衝突時再要求手動合併。
漂亮男人2017-05-02 09:35:30
會提示小B先pull 程式碼,如果小B修改的程式碼那一行跟小A的一樣,那個檔案那一行會提示衝突,這裡需要手動合併,如果修改的不一樣,Git會自動合併相關程式碼
淡淡烟草味2017-05-02 09:35:30
有個習慣,我覺得聽不錯的,就是每次提交代碼的時候,你要先pull 再push 這樣很大程度上會避免報錯,至於解決衝突,這是代碼的問題,報錯後文件會顯示紅色,有個分割線,上面的是人家的程式碼,下面的是你自己的程式碼,根據需要取捨。
習慣沉默2017-05-02 09:35:30
小B在提交程式碼時應先git pull更新程式碼,如果程式碼有衝突就會出現類似這樣的錯誤:
error: Your local changes to the following files would be overwritten by merge:
****/****/**.php
Please, commit your changes or stash them before you can merge.
這時候git要求你先手動修改衝突,找到提示的文件,衝突的部分就會出現《《《《來分隔程式碼改變的部分,需要修改那部分,就看你怎麼選了。
大家讲道理2017-05-02 09:35:30
git不會自己解決衝突,只會試著去合併patch,如果git發現兩個patch修改了相同內容就會主動使用<<<<<< >>>>>>>>來顯示衝突,然後在認為解決。