搜尋

首頁  >  問答  >  主體

git是怎麼處理衝突的?

剛開始學習git,有個疑問.
小A和小B都從遠端git clone了最新的版本。
兩個人都在本地對程式碼進行了修改。
小A先提交了程式碼。
這時小B再提交程式碼,會發生什麼事?
是會覆蓋小A提交的程式碼還是不讓提交呢?

淡淡烟草味淡淡烟草味2811 天前822

全部回覆(10)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-05-02 09:35:30

    先回答問題:

    小A先提交了程式碼,遠端函式庫和小A得本地函式庫同步,假設為0 -> a
    此時小B的本地函式庫為0 -> b,遠端函式庫的版本比本機函式庫較新,git會拒絕推送並報錯誤。

    git 會要求 git pull 更新本地庫,而 pull 操作相當於自動的 fetch 和 merge 操作,會試圖自動將遠端程式庫合併入本機程式庫,在有衝突時再要求手動合併。

    回覆
    0
  • 漂亮男人

    漂亮男人2017-05-02 09:35:30

    會提示小B先pull 程式碼,如果小B修改的程式碼那一行跟小A的一樣,那個檔案那一行會提示衝突,這裡需要手動合併,如果修改的不一樣,Git會自動合併相關程式碼

    回覆
    0
  • PHPz

    PHPz2017-05-02 09:35:30

    如果是改的不同地方 可以直接merge 如果改了相同的地方 git會自動把兩個版本的程式碼放到檔案裡面 等你選

    回覆
    0
  • 迷茫

    迷茫2017-05-02 09:35:30

    小B先吧小A的代碼 pull 回來,然後合併,然後才能再提交。

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-05-02 09:35:30

    每次開發完成後 先add commit 然後pull遠端程式碼 有衝突的話盡快解決 然後再push 當然我說的是不考慮分支的情況下

    回覆
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-02 09:35:30

    有個習慣,我覺得聽不錯的,就是每次提交代碼的時候,你要先pull 再push 這樣很大程度上會避免報錯,至於解決衝突,這是代碼的問題,報錯後文件會顯示紅色,有個分割線,上面的是人家的程式碼,下面的是你自己的程式碼,根據需要取捨。

    回覆
    0
  • 高洛峰

    高洛峰2017-05-02 09:35:30

    看標題我就醉了,既然是衝突,那肯定是要手動解決的。

    工具判斷不瞭如何合併程式碼,才會衝突。如果Git自己能解決衝突了,那就不需要人來寫程式了。

    回覆
    0
  • 習慣沉默

    習慣沉默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要求你先手動修改衝突,找到提示的文件,衝突的部分就會出現《《《《來分隔程式碼改變的部分,需要修改那部分,就看你怎麼選了。

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-02 09:35:30

    git不會自己解決衝突,只會試著去合併patch,如果git發現兩個patch修改了相同內容就會主動使用<<<<<< >>>>>>>>來顯示衝突,然後在認為解決。

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-02 09:35:30

    如果你的程式碼修改部分少,你可以copy一份他的黏進去。

    回覆
    0
  • 取消回覆