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

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

這篇具有很好參考價(jià)值的文章主要介紹了【Git】分支合并&沖突產(chǎn)生與解決。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

文章學(xué)習(xí)自:麥兜搞IT,如有侵權(quán),告知?jiǎng)h除

前言

合并操作在Git中屬于最為核心的一個(gè)操作,包括三種合并方式:一種為fast forward ,需要滿足有非常強(qiáng)的前提條件才能執(zhí)行;一種為3 way merge方式,這種是我們工作中常見的;最后一種為變基rebase。另外,本篇文章也會(huì)深入講解沖突如何產(chǎn)生,以及如何解決

1 Fast Forword 合并

1.1 核心原理

需求:將bugfix分支合并到master(切換到master然后執(zhí)行g(shù)it merge bugfix)

Fast Forword 合并: 將master分支指針向前快速移動(dòng)到bugfix分支所指向的commit對(duì)象,在此合并方式下,不會(huì)產(chǎn)生沖突

前提條件: bugfix和master分支具有完全相同的提交歷史(即bugfix提交歷史中有master最新的提交)

1.2 舉個(gè)栗子

合并前描述
master分支指向C2代表的commit對(duì)象,而bugfix超前于master分支1次提交(這里可以超前多次),指向了C3所代表的commit對(duì)象。符合fast forward merge
git合并沖突解決,Git學(xué)習(xí),git

執(zhí)行命令
git checkout master
git merge bugfix

合并后描述
master指針快速移動(dòng)到bugfix指針?biāo)赶虻腸ommit對(duì)象C3
git合并沖突解決,Git學(xué)習(xí),git

合并過(guò)程中發(fā)生的事情

1、.git/ 目錄下會(huì)新增一個(gè)文件 ORIG_HEAD文件,該文件為指向master上一次commit的指針,用于回滾,即若發(fā)現(xiàn)合并錯(cuò)了,那執(zhí)行git reset ORIG_HEAD即可完成回滾操作
2、不會(huì)產(chǎn)生新的commit、bolb、tree對(duì)象

fast-forward為什么不會(huì)產(chǎn)生沖突
沖突產(chǎn)生的原因:多個(gè)分支對(duì)同一個(gè)文件同一部分進(jìn)行了修改,并且這些修改是相互矛盾的,無(wú)法自動(dòng)合并。而fast-forward只有一個(gè)分支對(duì)文件做了修改(bugfix)

1.3 經(jīng)驗(yàn)之談

在實(shí)際工作場(chǎng)景中,此合并方式基本不會(huì)遇到,除非代碼倉(cāng)庫(kù)只有自己在維護(hù)。而我們通常遇到的情況都是下面要講的3 way merge 或者rebase的情況,也即bugfix和master分支不具有完全相同的提交歷史,產(chǎn)生了分叉

2 three way merge

2.1 核心原理

需求:將bugfix分支合并到master(切換到master然后執(zhí)行g(shù)it merge bugfix)

three way merge: Git 需要比較三個(gè)版本的代碼,即兩個(gè)分支的最新提交對(duì)象和它們的共同祖先提交對(duì)象。Git 使用一種叫做三方合并(three-way merge)的技術(shù)來(lái)自動(dòng)合并這三個(gè)版本的代碼。

合并過(guò)程:
1、找到兩個(gè)分支的共同祖先提交對(duì)象,確定兩個(gè)分支之間的修改范圍,確定沖突的位置

2、比較兩個(gè)分支的最新提交對(duì)象和共同祖先分支之間的差異,確定每個(gè)分支中的修改內(nèi)容。

3、合并兩個(gè)分支的修改。根據(jù)比較結(jié)果,Git 將兩個(gè)分支的修改合并起來(lái)。如果兩個(gè)分支對(duì)同一個(gè)文件的不同部分進(jìn)行了修改,Git 將嘗試自動(dòng)合并這些修改。如果這些修改發(fā)生在同一個(gè)文件的同一個(gè)區(qū)域,Git 就會(huì)提示用戶手動(dòng)解決沖突。

2.2 舉個(gè)栗子(不帶沖突)

合并前描述
A用戶對(duì)master執(zhí)行了合并,使得master指針從C2變?yōu)榱薈4;B用戶對(duì)bugfix執(zhí)行了commit操作,使得bugfix從C2變?yōu)榱薈3,此時(shí),產(chǎn)生了分叉。我們的目標(biāo)是要將bugfix合并到master上
git合并沖突解決,Git學(xué)習(xí),git

執(zhí)行命令
git checkout master
git merge bugfix

此時(shí)會(huì)跳轉(zhuǎn)到一個(gè)vim界面,編輯本次merge包括了哪些信息,這個(gè)自己填寫就可以
git合并沖突解決,Git學(xué)習(xí),git

合并后描述
產(chǎn)生一個(gè)新的commit對(duì)象C5,它的parent有兩個(gè),C3與C4,同時(shí)master指針指向C5,合并完成
git合并沖突解決,Git學(xué)習(xí),git

2.3 帶沖突的three way merge

合并前描述
master和bugfix對(duì)同一文件的同一區(qū)域進(jìn)行了修改,現(xiàn)在要將bugfix分支合并到master
git合并沖突解決,Git學(xué)習(xí),git
執(zhí)行命令
git checkout master
git merge bugfix

此時(shí)會(huì)顯示如下沖突信息
git合并沖突解決,Git學(xué)習(xí),git

此時(shí)也可以使用git status來(lái)查看有哪些文件產(chǎn)生了沖突
git合并沖突解決,Git學(xué)習(xí),git
然后可以使用git diff 沖突文件路徑來(lái)查看差異,最后可以手動(dòng)解決(git add git commit即可)。
當(dāng)然目前有很多IDE內(nèi)置了很方便的沖突解決功能

合并后描述
產(chǎn)生C4,parent是C2,C3,C4中的test.txt是你解決完沖突后的內(nèi)容

3 變基rebase

git rebase命令適合有強(qiáng)迫癥的人使用。

3.1 引入rebase

3 way merge方式在git歷史線上會(huì)產(chǎn)生分叉,類似下面,紅色代表dev,藍(lán)色代表master
git合并沖突解決,Git學(xué)習(xí),git
有些人就覺得,不行,必須得是直線才好看,也就是想在3 way merge的方式下還想達(dá)到fast forward的效果(fast forward在git 歷史上是直線),所以產(chǎn)生了git rebase

3.2 核心原理

核心原理:將一個(gè)分支的修改“移動(dòng)”到另一個(gè)分支上,使得兩個(gè)分支的修改可以按照時(shí)間順序排列,從而形成一個(gè)線性的提交歷史

基本步驟
git合并沖突解決,Git學(xué)習(xí),git
在 rebase完之后,可以checkou 到master執(zhí)行merge操作,完成合并。
注意:rebase的過(guò)程中也是有可能產(chǎn)生沖突的,解決完沖突之后 使用git rebase --continue繼續(xù)rebase

4 沖突問題

4.1 產(chǎn)生沖突的原因

核心原因多個(gè)分支對(duì)同一個(gè)文件同一部分進(jìn)行了修改,并且這些修改是相互矛盾的,無(wú)法自動(dòng)合并。

具體來(lái)說(shuō),當(dāng)多個(gè)分支對(duì)同一個(gè)文件的同一部分進(jìn)行了修改時(shí),Git 會(huì)嘗試自動(dòng)合并這些修改,并將合并結(jié)果應(yīng)用于最終合并結(jié)果中。但是,如果這些修改是相互矛盾的,例如一個(gè)分支將文件的某個(gè)部分刪除了,而另一個(gè)分支對(duì)該部分進(jìn)行了修改,則 Git 就無(wú)法自動(dòng)合并這些修改,會(huì)提示合并沖突。

在這種情況下,開發(fā)者需要手動(dòng)解決沖突,從而完成合并操作。手動(dòng)解決沖突的過(guò)程中,開發(fā)者需要根據(jù)需要保留、修改或刪除對(duì)應(yīng)的代碼行或代碼段。解決沖突后,開發(fā)者需要將修改提交到 Git 倉(cāng)庫(kù)中。

4.2 常見沖突場(chǎng)景

1、git merge時(shí)(3 way merge)
2、git pull時(shí)

以下場(chǎng)景不會(huì)產(chǎn)生沖突:

場(chǎng)景一:
假設(shè)有兩個(gè)分支,分別是 A 和 B,它們都對(duì)同一個(gè)文件 file.txt 進(jìn)行了修改:

分支 A 對(duì) file.txt 進(jìn)行了刪除操作; 分支 B 對(duì) file.txt 進(jìn)行了修改操作。 這時(shí)候,如果要合并這兩個(gè)分支,Git就會(huì)自動(dòng)先將分支 B 對(duì) file.txt 的修改操作合并到最終合并結(jié)果中,再將A 對(duì) file.txt 的刪除操作合并到最終合并結(jié)果中,而不會(huì)提示合并沖突
最終合并的結(jié)果是file文件被刪除了

4.3 解決沖突

git合并沖突解決,Git學(xué)習(xí),git

git合并沖突解決,Git學(xué)習(xí),git
git合并沖突解決,Git學(xué)習(xí),git文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-763105.html

到了這里,關(guān)于【Git】分支合并&沖突產(chǎn)生與解決的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

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

    一、造成沖突的場(chǎng)景 ????????在我們?cè)趨⑴c項(xiàng)目開發(fā)的時(shí)候,通常會(huì)創(chuàng)建公共的文件,但是當(dāng)我們編碼完成,使用git進(jìn)行分支合并時(shí),往往會(huì)出現(xiàn)合并沖突,也就是負(fù)責(zé)不同部分的開發(fā)人員會(huì)對(duì)同一個(gè)文件的同一個(gè)部分進(jìn)行修改,這個(gè)時(shí)候就需要我們解決合并造成的沖突

    2023年04月23日
    瀏覽(31)
  • 【Git教程】(六)分支合并 —— 合并過(guò)程,各類合并沖突及解決思路 ~

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

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

    2024年04月25日
    瀏覽(31)
  • Git入門實(shí)戰(zhàn)教程之合并分支并解決沖突

    在開發(fā)過(guò)程中,難免會(huì)遇到代碼沖突的情況,那么該如何處理呢? 分支策略: 首先master主分支應(yīng)該是非常穩(wěn)定的,也就是用來(lái)發(fā)布新版本,一般情況下不允許在上面干活,干活一般情況下在新建的dev分支上干活,干完后,比如上要發(fā)布,或者說(shuō)dev分支代碼穩(wěn)定后可以合并到

    2024年04月10日
    瀏覽(58)
  • idea解決代碼沖突-git分布式合并分支-加git回滾操作

    idea解決代碼沖突-git分布式合并分支-加git回滾操作

    第一次接觸項(xiàng)目發(fā)版的工作,記錄一下解決版本沖突合并問題的心得。 適用場(chǎng)景:分布式項(xiàng)目,多人使用自己分支開發(fā),最后合并自己的代碼分支給主分支。 話不多說(shuō),直接看圖 1.全部拉下來(lái)(這個(gè)拉取是全部拉取,既保證自己的分支最新,同時(shí)也把遠(yuǎn)端的分支都拉到最新

    2024年02月08日
    瀏覽(570)
  • Git管理神器SourceTree使用教程詳解(連接遠(yuǎn)程倉(cāng)庫(kù),克隆,拉取,提交,推送,新建/切換/合并分支,沖突解決,提交PR)

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

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

    2024年02月03日
    瀏覽(100)
  • 【Git】在idea中多分支開發(fā)如何——合并分支、處理沖突

    【Git】在idea中多分支開發(fā)如何——合并分支、處理沖突

    博主簡(jiǎn)介: 22級(jí)計(jì)算機(jī)科學(xué)與技術(shù)本科生一枚?? 博主主頁(yè):是瑤瑤子啦 每日一言??: “人間總有一兩風(fēng),填我十萬(wàn)八千夢(mèng)” 我當(dāng)前開發(fā)的分支—— hfy 我想將 subject 分支的最新代碼拉取合并到 hfy 分支 點(diǎn)擊之后會(huì)出現(xiàn)界面,有需要你處理的沖突( 沖突的處理的本質(zhì)就是:你

    2024年04月17日
    瀏覽(99)
  • git的分支的使用,創(chuàng)建分支,合并分支,刪除分支,合并沖突,分支管理策略,bug分支,強(qiáng)制刪除分支

    git的分支的使用,創(chuàng)建分支,合并分支,刪除分支,合并沖突,分支管理策略,bug分支,強(qiáng)制刪除分支

    查看當(dāng)前本地倉(cāng)庫(kù)中有哪些分支 HEAD所指向的分支就是當(dāng)前正在工作的分支 創(chuàng)建一個(gè)分支 創(chuàng)建好了,但是目前還是指向 master 用tree命令也可以看到已經(jīng)創(chuàng)建分支成功了 創(chuàng)建出來(lái)的分支,和主分支的最新記錄是一樣的 切換分支就是讓HEAD指向我們的dev分支 我們?cè)赿ev分支上堆R

    2024年02月04日
    瀏覽(125)
  • 多分支Git的操作簡(jiǎn)介,沖突合并,多平臺(tái)對(duì)應(yīng)

    多分支Git的操作簡(jiǎn)介,沖突合并,多平臺(tái)對(duì)應(yīng)

    在使用git管理代碼時(shí),在多人開發(fā),或者不同功能開發(fā)以及環(huán)境測(cè)試時(shí),需要保持master代碼的穩(wěn)定性,因此往往需要?jiǎng)?chuàng)建多分支的Git倉(cāng)庫(kù),這里記錄一些多分支倉(cāng)庫(kù)的操作指令 1. 分支操作 1.1 創(chuàng)建分支 上述輸入想要?jiǎng)?chuàng)建的分支名字,即可在本地創(chuàng)建分支,如 即可以在本地創(chuàng)

    2024年01月22日
    瀏覽(23)
  • git中合并分支時(shí)出現(xiàn)了代碼沖突怎么辦

    git中合并分支時(shí)出現(xiàn)了代碼沖突怎么辦

    友情提醒: ①git merge命令介紹 git merge 用于本地分支的合并。將一個(gè)本地分支的更改合并到另一個(gè)本地分支時(shí),你會(huì)使用git merge命令。 git merge命令用于將一個(gè)分支的更改合并到另一個(gè)分支。它會(huì)將兩個(gè)分支的更改整合在一起,保留詳細(xì)的合并信息,并成為一個(gè)新的提交。 例如

    2024年03月20日
    瀏覽(101)
  • git ----拉去遠(yuǎn)端倉(cāng)庫(kù)產(chǎn)生沖突的解決方式

    # 出現(xiàn)沖突的原因 ?? ?-1 多人在同一分支,修改了同一個(gè)地方的代碼,出現(xiàn)的沖突 ? ? -2 分支合并時(shí)出沖突 ? ?? ? ?? ? ?? ? ?? # 1 多人統(tǒng)一分支開發(fā),修改了同樣的代碼 ?? ? ?? ?-某人修改了1.txt的第四行,提交了 ? ? -我操作: ? ? ?? ?-修改了1.txt第四行 ? ? ? ?

    2024年02月10日
    瀏覽(17)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包