前言
GIT
基本上貫穿我們的開發(fā)生涯,之所以要使用git也是有很多優(yōu)點的
????????????????
1.通俗易懂點,
保存代碼不丟失
:防止因內(nèi)存,操作等因素導(dǎo)致代碼丟失
????????????????
2.易于
版本控制
:Git可以幫助你跟蹤代碼的變化,記錄每個版本的變化和差異,方便回退到之前的版本或者查看代碼的演進歷史
????????????????
- 能夠
多人協(xié)作
:Git支持多人同時對同一個代碼庫進行協(xié)作開發(fā),可以方便地合并不同人的修改或者解決代碼沖突。
以及其他方面等等優(yōu)勢,那么這篇文章我重點教大家如何解決GIT沖突
??????????????????
為什么沖突
GIT沖突大致可以分為三類
- ??
并行開發(fā)
當(dāng)多個開發(fā)者在
不同
的分支
上同時修改同一個文件
時,如果合并這些分支時存在對同一部分的修改,就會導(dǎo)致沖突。
- ?
合并分支
當(dāng)你嘗試將一個
分支合并
到另一個分支時,如果這兩個分支都修改了同一個文件的相同部分
,Git 無法自動確定應(yīng)該采用哪個版本的修改,就會產(chǎn)生沖突。
- ?
修改歷史
如果在 Git 歷史中的
不同提交
中對同一文件
的相同部分
進行了修改
,當(dāng)你試圖合并這些修改時,Git 無法確定應(yīng)該如何組合它們,因此會導(dǎo)致沖突。
那么我們可以很顯而易見的知道,造成GIT沖突的最直接的原因為:通過不同的途徑
對同一個文件的相同地方
進行修改
了,就會造成GIT沖突
GIT解決沖突
在講解IDEA進行解決GIT沖突前,先來講解以下通用的GIT解決沖突的步驟和方式
????????????????????????????
以下舉例給大家講解如何解決沖突
步驟
假定有
A分支
和B分支
.我們需要將A分支
的代碼合并
到B分支
代碼,且修改相同文件的相同代碼塊,會有git沖突
首先先使用指令確定當(dāng)前是否為A分支
git branch
如果當(dāng)前分支不是 A分支
,可以切換到 A分支
分支。使用以下命令切換分支:
git checkout A分支
確保當(dāng)前分支是最新的,可以使用以下命令拉取最新代碼
git pull origin A分支
需要注意的是:要合并代碼一定要為最新代碼
切換到要合并的分支,也就是B分支
git checkout B分支
將A分支
合并B分支
git merge A分支
因為我們假定一定會出現(xiàn)沖突,因此接下來是解決沖突的步驟??
這個時候,GIT會標(biāo)記我們沖突的代碼,假如打開我們的沖突的文件,你會在該文件看到如下示例:
<<<<<<< HEAD
這部分是當(dāng)前分支的修改
=======
這部分是合并分支的修改
>>>>>>> branch-name
查看沖突部分,并理解每個版本的修改。<<<<<<< HEAD 到 ======= 是當(dāng)前分支的修改,======= 到 >>>>>>>branch-name 是合并分支的修改。
???????????????
然后,手動編輯文件,選擇你希望
保留的修改
或者組合修改
。你可以刪除 <<<<<<< HEAD 到 ======= 之間的內(nèi)容,或者刪除 ======= 到 >>>>>>> branch-name 之間的內(nèi)容。
這一步,是為了留下你想留下的代碼,將代碼更新最新
假定沖突文件名為:myfile.txt
,使用如下指令提交解決沖突后的代碼
git add myfile.txt
git commit
使用
git add < file>
命令將解決沖突后的文件標(biāo)記為已解決
。
運行git commit
命令提交
解決沖突的版本。
最后,使用推送指令,將代碼推送到遠端
git push origin B分支
有可能在你解決完沖突的過程中其他人有新的代碼已經(jīng)推送到遠端,因此在推送遠端前建議先拉取最新代碼,如果很確定不會出現(xiàn)這種情況可不做
以上大功告成,可喜可賀
??????????????????????????????
IDEA解決沖突
接下來,我將使用一個實例來給大家講解如何使用idea來更方便的解決沖突
在開始之前,請確保你的電腦安裝并配置好了
GIT工具
,具體百度操作即可
步驟
首先,我先建立了一個git倉庫
,并基于master主分支,新建了兩個分支,分別為A分支
和B分支
以下截圖,為了后續(xù)演示方便我兩個分支名稱就叫A分支
和B分支
克隆并打開項目,分別修改A和B分支
以下為講解
A分支
合并
到B分支
的解決沖突的做法,我們·修改·文件README.md
文件
??????????????????????
從遠端克隆下項目
git clone git地址
然后用IDEA打開項目,在右下角可以看到分支
初始我們什么都不做的情況下,
A分支
和B分支
的文件內(nèi)容是一樣的
以修改README.md文件為例,初始內(nèi)容為:
# search_markdown_data
#### 介紹
用于檢索markdown的數(shù)據(jù)來源
#### 軟件架構(gòu)
軟件架構(gòu)說明
#### 安裝教程
1. xxxx
2. xxxx
3. xxxx
#### 使用說明
1. xxxx
2. xxxx
3. xxxx
#### 參與貢獻
1. Fork 本倉庫
2. 新建 Feat_xxx 分支
3. 提交代碼
4. 新建 Pull Request
#### 特技
1. 使用 Readme\_XXX.md 來支持不同的語言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 這個地址來了解 Gitee 上的優(yōu)秀開源項目
4. [GVP](https://gitee.com/gvp) 全稱是 Gitee 最有價值開源項目,是綜合評定出的優(yōu)秀開源項目
5. Gitee 官方提供的使用手冊 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一檔用來展示 Gitee 會員風(fēng)采的欄目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
首先點擊右下角先切換B分支
選擇分支->CheckOut
修改B分支的README.md內(nèi)容如下:
# search_markdown_data
#### 介紹
用于檢索markdown的數(shù)據(jù)來源
#### 安裝教程
1. xxxx 測試修改相同的地方B分支
2. xxxx
3. xxxx
#### 使用說明
1. xxxx
2. xxxx
3. xxxx
#### 參與貢獻
1. Fork 本倉庫
2. 新建 Feat_xxx 分支
3. 提交代碼
4. 新建 Pull Request
#### 特技
1. 使用 Readme\_XXX.md 來支持不同的語言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 這個地址來了解 Gitee 上的優(yōu)秀開源項目
4. [GVP](https://gitee.com/gvp) 全稱是 Gitee 最有價值開源項目,是綜合評定出的優(yōu)秀開源項目
5. Gitee 官方提供的使用手冊 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一檔用來展示 Gitee 會員風(fēng)采的欄目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
即
修改內(nèi)容
安裝教程的第一條為1. xxxx 測試修改相同的地方B分支
以及刪除
軟件架構(gòu)和軟件架構(gòu)說明字樣
然后提交和推送遠端
??????????????????????????????
切換
A分支
,并修改README.md
內(nèi)容為如下:
# search_markdown_data
#### 介紹
用于檢索markdown的數(shù)據(jù)來源
#### 軟件架構(gòu)
軟件架構(gòu)說明
#### 安裝教程
1. xxxx測試修改相同的地方A分支
2. xxxx
3. xxxx
#### 使用說明
1. xxxx
2. xxxx
3. xxxx
4. A分支新增
#### 參與貢獻
1. Fork 本倉庫
2. 新建 Feat_xxx 分支
3. 提交代碼
4. 新建 Pull Request
#### 特技
1. 使用 Readme\_XXX.md 來支持不同的語言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 這個地址來了解 Gitee 上的優(yōu)秀開源項目
4. [GVP](https://gitee.com/gvp) 全稱是 Gitee 最有價值開源項目,是綜合評定出的優(yōu)秀開源項目
5. Gitee 官方提供的使用手冊 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一檔用來展示 Gitee 會員風(fēng)采的欄目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
即
修改內(nèi)容
安裝教程的第一條為1. xxxx 測試修改相同的地方A分支
以及新增
4. A分支新增
提交并推送A分支到遠端
A分支合并B分支
先切換到B分支
在A分支的選項中選擇
merge into current
,意思為把A分支合并到當(dāng)前切換的分支
此時會進行彈窗
左邊為沖突的文件,右邊有三個選項,
??Accept Yours
:接受當(dāng)前分支變更
??Accept Theirs
: 接受別人的分支的變更
??Merge...
: 將兩個分支的變更一起查看選擇變更
這個根據(jù)實際選擇不同進行解決沖突,一般情況選擇第三個
點擊merge
出現(xiàn)如下界面出現(xiàn)了三分界面:
??左邊屏幕為:當(dāng)前分支的代碼變更
??右邊屏幕為:其他分支的代碼變更
??中間屏幕為:解決沖突之后最終的代碼結(jié)果
截取左上角的界面
它有如下操作:
??
上下箭頭
: 切換你要解決沖突的代碼塊,有的時候解決沖突的代碼可能比較長,兩處改動的代碼塊間隔比較多行,可以使用該操作
??Left,All,Right
: 點擊Lfet,代表把左邊的沖突代碼塊合到中間,Right是把右邊的沖突代碼合到中間,All是把兩邊的沖突代碼合并到中間.需要注意的是,該操作只能把沖突文件中的不是修改相同的地方的代碼進行合并
截取解決沖突的操作界面:
??
X按鈕
:代表不將變動合并到最終的結(jié)果
??》按鈕
:代表將分支的變動合并到最終解決之后采用的變更
此外還需要注意的是,它一般有三種變更:
??
灰色沖突代碼塊
:代表的是刪除的代碼塊
??紅色沖突代碼塊
:代表的是雙方改到相同的地方的代碼塊,一般情況真實項目中以對同一個功能需要添加兩個不同功能居多
??藍色沖突代碼塊
:代表新增的代碼塊
灰色和藍色的沖突塊都好解決,直接點擊
All
就行,如下為點擊All最終執(zhí)行的結(jié)果
只留下修改相同的代碼
,至于需要執(zhí)行什么操作,留下哪個分支的代碼,或者兩個分支的代碼都要,在真實項目中,需要與其他開發(fā)者協(xié)商
那么這邊,我兩邊的代碼塊都保留,也就是點擊兩邊的》按鈕
:
當(dāng)所有沖突解決完成之后,會提示:
All changes have bean proccessed. Save Changes and finish merging
的字樣,就可以點擊Apply
,采用變更了,提一句,Abort
按鈕操作是取消合并
然后提交并推送遠端,我們的沖突就解決了
大功告成,可喜可賀,撒花~
??????????????????????????????文章來源:http://www.zghlxwxcb.cn/news/detail-762391.html
結(jié)語
以上就是GIT解決沖突的過程啦,這篇文章就到這里文章來源地址http://www.zghlxwxcb.cn/news/detail-762391.html
到了這里,關(guān)于教你IDEA解決GIT沖突的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!