国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

詳解Git合并沖突——問題重現(xiàn)、原因及解決 “Automatic merge failed; fix conflicts and then commit the result.“

這篇具有很好參考價值的文章主要介紹了詳解Git合并沖突——問題重現(xiàn)、原因及解決 “Automatic merge failed; fix conflicts and then commit the result.“。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


最后更新日期:2022/10/6

在Git中使用git merge命令合并兩個分支的時候,有可能產(chǎn)生這種情況:

$ git merge A
Auto-merging merge.txt
CONFLICT (content): Merge conflict in merge.txt
Automatic merge failed; fix conflicts and then commit the result.

這就是發(fā)生了沖突(conflict)。

為什么會有沖突?要如何解決呢?請看下文介紹。

為什么會發(fā)生沖突?

簡單來說,就是兩個分支都對同一個文件做了更改,當這兩個分支合并的時候,Git不知道要采用哪一個更改,便發(fā)生了沖突。

git merge 沖突,Git,git,github,團隊開發(fā)
圖1 一個沖突的例子

舉個栗子,假設(shè)剛開始master分支版本為C0,然后依次發(fā)生了以下情況:

  1. 小A基于C0創(chuàng)建新分支new_branch,并在該分支上改動了文件merge.txt,提交得到版本C2
  2. 小B在主分支master上進行開發(fā),同樣改動了merge.txt,提交得到版本C1

此時,如果用git mergemasternew_branch合并,就會發(fā)生沖突。完整的過程如圖1所示。

Git提示沖突,也是一件好事,它其實是在告訴你:
“你讓我合并new_branchmaster兩個分支,但是它們兩個都改動了merge.txt,一個說要這樣改,一個說要那樣改,我應(yīng)該聽誰的呀?你來幫我看下吧!”。(形象解釋)

在講解如何解決沖突之前,我們得先有一個沖突。下面將根據(jù)圖1制造出一個沖突。

制造一個沖突

制造圖1的沖突分為4個步驟:

  • 第一步:初始化倉庫及文件
  • 第二步:在新分支上更改并提交文件
  • 第三步:在主分支上更改并提交文件
  • 第四步:執(zhí)行合并,觸發(fā)沖突

第一步:初始化倉庫及文件

首先創(chuàng)建一個新倉庫。打開Git Bash,順序執(zhí)行以下命令:

$ mkdir git-merge-test
$ cd git-merge-test
$ git init
Initialized empty Git repository in path/to/your/work/dictionary/git-merge-test/.git/

以上命令在當前位置創(chuàng)建了一個名為git-merge-test的文件夾,并將其初始化為Git倉庫。

然后創(chuàng)建倉庫文件。在倉庫根目錄下新建merge.txt,寫入以下內(nèi)容:

這是第一行,這行不會被修改
這是第二行

git merge 沖突,Git,git,github,團隊開發(fā)

添加merge.txt到暫存區(qū)并提交更改:

$ git add .
$ git commit -m"初始化倉庫內(nèi)容"
[master 8bc6262] 初始化倉庫
 Date: Wed Oct 5 16:30:35 2022 +0800
 1 file changed, 2 insertions(+)
 create mode 100644 merge.txt

此時,master處于圖1中的C0。

第二步:在新分支上更改并提交文件

然后,創(chuàng)建一個新分支new_branch::

$ git checkout -b new_branch
Switched to a new branch 'new_branch'

說明:git checkout -b 分支名表示創(chuàng)建一個新分支并切換到這個分支上。

修改merge.txt

這是第一行,這行不會被修改
我在new_branch分支上修改了第二行

git merge 沖突,Git,git,github,團隊開發(fā)

添加merge.txt并提交更改:

$ git commit -am"修改merge.txt"
[new_branch 8eb88a9] 修改merge.txt
 1 file changed, 1 insertion(+), 1 deletion(-)

說明:git commit -am"提交信息"中的選項a表示先git add所有發(fā)生改動的文件再提交。

此時,new_branch位于圖1中的C2。

第三步:在主分支上更改并提交文件

$ git checkout master
Switched to branch 'master'
$ echo "我在master分支上添加了第三行" >> merge.txt
$ git commit -am"新增內(nèi)容到merge.txt"
[master 52c86fa] 新增內(nèi)容到merge.txt
 1 file changed, 1 insertion(+)

上述命令的意思是,先切換回master分支,然后往merge.txt中添加一行內(nèi)容(">>"表示追加重定向文件),最后提交更改。

此時,master位于圖1中的C1

第四步:執(zhí)行合并,觸發(fā)沖突

在合并之前,我們先捋一下現(xiàn)在的狀況:

  • 最初的merge.txt的內(nèi)容為:
    這是第一行,這行不會被修改
    這是第二行
    
  • new_branch分支上改動后的merge.txt內(nèi)容為:
    這是第一行,這行不會被修改
    我在new_branch分支上修改了第二行
    
  • master主分支上改動后的merge.txt內(nèi)容為:
    這是第一行,這行不會被修改
    這是第二行
    我在master分支上添加了第三行
    

兩個分支都改動了merge.txt,合并會發(fā)生什么呢?下面就來試一下。

master分支上執(zhí)行git merge new_branch,嘗試把new_branch分支合并過來:

$ git merge new_branch
Auto-merging merge.txt
CONFLICT (content): Merge conflict in merge.txt
Automatic merge failed; fix conflicts and then commit the result.

可以看到,沖突發(fā)生了。

在解決沖突之前,應(yīng)該先要知道如何查看沖突。下面將進行介紹。

如何查看沖突?

文章剛開始已經(jīng)提到,合并時發(fā)生沖突,是因為兩個分支都對同一個文件做了更改。當合并masternew_branch的時候,Git發(fā)現(xiàn)對于merge.txt,一個分支這樣改,另一個分支那樣改,就陷入了兩難。從報錯信息可知,沖突需要我們手動解決后方可提交。

很多人到這里就懵了,不知道該怎么弄。實際上,我們現(xiàn)在正處于合并的“中間狀態(tài)”。合并的中間狀態(tài)就是合并了,但還沒完全合并。。好吧,是廢話,意思就是你執(zhí)行git merge了,但git merge并沒有執(zhí)行完成(因為發(fā)生沖突了),需要你解決沖突后繼續(xù)進行。

敲入git status,就可以看到這樣的信息:

$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   merge.txt

no changes added to commit (use "git add" and/or "git commit -a")

git status告訴我們以下信息:

  • “You have unmerged paths”:我們現(xiàn)在正處于合并的中間狀態(tài),有一些沒有合并的文件;
  • “Unmerged paths”:下面列出了所有未合并的文件,都顯示為紅色(網(wǎng)頁上看不到)??梢钥吹?,merge.txt沒有合并,因為兩個分支都更改了它(“both modified”),發(fā)生了沖突。我們要先把沖突解決了。

那我們現(xiàn)在就來查看沖突。用編輯器打開merge.txt,會發(fā)現(xiàn)內(nèi)容變成了這樣:

這是第一行,這行不會被修改
<<<<<<< HEAD
這是第二行
我在master分支上添加了第三行
=======
我在new_branch分支上修改了第二行
>>>>>>> new_branch

里面多了三行我們看不懂的記號:

  • <<<<<<< HEAD
  • =======
  • >>>>>>> new_branch

這些記號是標記沖突內(nèi)容的分隔線,解釋如下:

  • <<<<<<< HEAD=======之間的內(nèi)容:是master分支修改的內(nèi)容(準確來說是HEAD指針指向的分支修改的內(nèi)容);
  • =======>>>>>>> new_branch之間的內(nèi)容:是new_branch分支修改的內(nèi)容;
  • 分割線之外的內(nèi)容:是兩個分支都沒有改動的內(nèi)容(如merge.txt第一行)。

看懂了嗎?然后,解決沖突就變得很簡單了。

如何解決沖突?

解決沖突只需3步:

  1. 編輯沖突文件。決定要保留的內(nèi)容,然后刪掉三行分割線
  2. git add將沖突文件添加到暫存區(qū)
  3. git commit提交

對于第1步,要按照你的具體情況去改。通常情況下,我們有這兩種做法:

  • 保留其中一個修改,刪掉另一個
  • 同時保留兩個修改

不管怎樣,最終改好的文件會原封不動地提交到倉庫中。另外需要注意,最后不要忘了刪掉三行分隔線,即:<<<<<<< HEAD,=======,>>>>>>> new_branch

在我們的例子中,假如我們想同時保留兩個分支的修改,那么可以編輯merge.txt,僅刪掉三行分隔線,其他部分不用管,得到以下內(nèi)容:

這是第一行,這行不會被修改
這是第二行
我在master分支上添加了第三行
我在new_branch分支上修改了第二行

改好后,就可以提交了:

$ git add merge.txt
$ git commit -m "合并new_branch分支并解決沖突"
[master 0c88c4f] 合并new_branch分支并解決沖突

查看合并后的提交記錄:

$ git log
commit 0c88c4f9210af067125c9027f3e5885065f88dd0 (HEAD -> master)
Merge: 52c86fa 8eb88a9
Author: lanjianghao <528601933@qq.com>
Date:   Wed Oct 5 22:28:34 2022 +0800

    合并new_branch分支并解決沖突

commit 52c86fa51bca34c7763ed7b56b7705b3ce31379c
Author: lanjianghao <528601933@qq.com>
Date:   Wed Oct 5 19:23:32 2022 +0800

    新增內(nèi)容到merge.txt

commit 8eb88a9d1dc88b30333492ec44c12685aaa8187c (new_branch)
Author: lanjianghao <528601933@qq.com>
Date:   Wed Oct 5 19:17:06 2022 +0800

    修改merge.txt

commit 8bc626277eec39e413dcdd764642865b5291674e
Author: lanjianghao <528601933@qq.com>
Date:   Wed Oct 5 16:30:35 2022 +0800

    初始化倉庫

可以看到,日志中新增了一條合并記錄。

總結(jié)

  • 為什么合并時發(fā)生了沖突?
    • 要合并的兩個分支改動了同一個文件,Git不知道要采用哪個,還是兩個都采用,需要由你來決定。
  • 怎樣查看沖突?
    • git status查看沖突的文件
    • 編輯器打開沖突的文件,查看沖突的內(nèi)容
    • 沖突內(nèi)容分隔線怎么看:
      未沖突的內(nèi)容(兩個分支都未改動)在分隔線外面
      <<<<<<< HEAD
      Git當前所在分支修改的內(nèi)容(準確來說是HEAD指針指向的分支修改的內(nèi)容)
      =======
      要合并過來的分支修改的內(nèi)容
      >>>>>>> branch_to_merge
      
  • 怎樣解決沖突?
    1. git status查看沖突的文件
    2. 編輯沖突文件,解決沖突(記得刪除三行分隔線)
    3. git add 沖突文件
    4. git commit -m "提交信息"

其他問題

  • 我不想繼續(xù)合并了,如何退出合并的中間狀態(tài)?
    git merge --abort
    
    前文中提到,如果執(zhí)行git merge合并時發(fā)生沖突,則會進入合并的中間狀態(tài)。合并的中間狀態(tài)下將無法執(zhí)行其他一些操作(如切換分支)。
    如果不想繼續(xù)合并,要先用git merge --abort命令退出。該命令會使你回到執(zhí)行git merge 分支之前的狀態(tài)。

感謝大家能看到這里!本人也還是小白,如果有不對的地方,歡迎指正!

參考:
https://www.atlassian.com/git/tutorials/using-branches/merge-conflicts文章來源地址http://www.zghlxwxcb.cn/news/detail-633976.html

到了這里,關(guān)于詳解Git合并沖突——問題重現(xiàn)、原因及解決 “Automatic merge failed; fix conflicts and then commit the result.“的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Git管理神器SourceTree使用教程詳解(連接遠程倉庫,克隆,拉取,提交,推送,新建/切換/合并分支,沖突解決,提交PR)

    Git管理神器SourceTree使用教程詳解(連接遠程倉庫,克隆,拉取,提交,推送,新建/切換/合并分支,沖突解決,提交PR)

    俗話說的好工欲善其事必先利其器,Git分布式版本控制系統(tǒng)是我們?nèi)粘i_發(fā)中不可或缺的。目前市面上比較流行的Git可視化管理工具有SourceTree、Github Desktop、TortoiseGit,綜合網(wǎng)上的一些文章分析和自己的日常開發(fā)實踐心得個人比較推薦開發(fā)者使用SourceTree,因為SourceTree同時支持

    2024年02月03日
    瀏覽(101)
  • git 分支合并沖突解決

    git 分支合并沖突解決

    已經(jīng)累到不想說話了,直接上流程吧! 1、比如你想A分支合并到B分支,先把這兩分支都pull一下最新代碼:git pull 2、切換到要合并的分支:git checkout tougu_pan (tougu_pan 是我的B分支) 3、在 tougu_pan 分支上執(zhí)行 git merge --no-ff dev 4、git status 查看本地修改,就會出現(xiàn)以下狀態(tài) 5、如

    2024年02月10日
    瀏覽(90)
  • git代碼合并、git解決沖突的方法?

    Git是一種分布式版本控制系統(tǒng),它提供了多種方法來合并代碼和解決沖突。下面是兩個常見的場景以及對應(yīng)的操作步驟: 合并分支 當我們在一個項目中有多個分支時,需要將不同分支中的代碼合并到一起。假設(shè)我們有一個主分支master和一個開發(fā)分支dev,現(xiàn)在需要將dev分支合

    2024年02月02日
    瀏覽(129)
  • git使用常見問題(提交代碼,合并沖突)

    git使用常見問題(提交代碼,合并沖突)

    git fetch 獲取遠程分支更新 git branch 查看本地分支 git branch -r 查看遠程分支 git branch -a 查看所有分支(本地分支和遠程分支) git clone 地址 克隆代碼 git checkout 切換分支 git pull 同步到本地(拉) git push 推送至服務(wù)器 git checkout -b dev origin/master 基于主分支創(chuàng)建dev分支 git add . 添加

    2024年02月03日
    瀏覽(98)
  • 【Git】分支合并&沖突產(chǎn)生與解決

    【Git】分支合并&沖突產(chǎn)生與解決

    文章學習自:麥兜搞IT,如有侵權(quán),告知刪除 合并操作在Git中屬于最為核心的一個操作,包括三種合并方式:一種為fast forward ,需要滿足有非常強的前提條件才能執(zhí)行;一種為3 way merge方式,這種是我們工作中常見的;最后一種為變基rebase。另外,本篇文章也會深入講解沖突

    2024年02月04日
    瀏覽(25)
  • Git合并多分支及沖突解決

    工作場景 工作場景中我們常常會遇到以下情況: 小明:靚仔/妹,我上線那天有事情,我的那個分支你幫我一起推一下 摸魚崽:幫我也合一下,好哥哥 我:好(你)呀(md) 如果在這種時候你說我不會,我只會add,commit、push我本地的,你的分支我哪兒會啊,是不是有點尷尬

    2024年02月13日
    瀏覽(24)
  • 【Git教程】(六)分支合并 —— 合并過程,各類合并沖突及解決思路 ~

    【Git教程】(六)分支合并 —— 合并過程,各類合并沖突及解決思路 ~

    使用 merge 命令來進行分支合并是 Git 中最重要的操作之一。雖然這一操作的底層算法很復雜,但調(diào)用起來卻很簡單。我們可以通過指定分支名稱來選擇待合并修改的分支。然后, Git 會基于合并的內(nèi)容來創(chuàng)建一次新的提交。 下面,我們來看下圖中的這個例子:在一群開發(fā)者在

    2024年04月25日
    瀏覽(31)
  • git必備知識 git使用常見問題(提交代碼,合并沖突)

    git必備知識 git使用常見問題(提交代碼,合并沖突)

    git fetch 獲取遠程分支更新 git branch 查看本地分支 git branch -r 查看遠程分支 git branch -a 查看所有分支(本地分支和遠程分支) git clone 地址 克隆代碼 git checkout 切換分支 git pull 同步到本地(拉) git push 推送至服務(wù)器 git checkout -b dev origin/master 基于主分支創(chuàng)建dev分支 git add . 添加

    2024年02月16日
    瀏覽(86)
  • 如何解決Git合并分支造成的沖突

    如何解決Git合并分支造成的沖突

    一、造成沖突的場景 ????????在我們在參與項目開發(fā)的時候,通常會創(chuàng)建公共的文件,但是當我們編碼完成,使用git進行分支合并時,往往會出現(xiàn)合并沖突,也就是負責不同部分的開發(fā)人員會對同一個文件的同一個部分進行修改,這個時候就需要我們解決合并造成的沖突

    2023年04月23日
    瀏覽(31)
  • 深入了解 Git 分支合并沖突解決步驟

    深入了解 Git 分支合并沖突解決步驟

    在協(xié)作開發(fā)中,當不同分支對同一文件的相同位置進行修改時,往往會出現(xiàn)合并沖突。這些沖突需要開發(fā)者手動介入解決,以確保代碼的一致性和穩(wěn)定性。以下是解決 Git 合并沖突的有效步驟,讓我們深入了解這個過程。 一旦執(zhí)行 git merge 分支名稱 進行合并操作,Git 會嘗試自

    2024年02月04日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包