git merge 沖突解決


git merge 沖突解決

背景

git 現在已經成為我們日常生活中普遍的工具了,其實有時候還是有一些疑問的,畢竟很多東西即使你之前學過了,當你用的時候還是有點不確定,一般我都會在本地做一下測試,避免給生產環境的 git 代碼庫帶來問題, 畢竟這決定了你一個人的態度。

補充

我們都知道 git 是一個分布式的代碼管理工具,因為是分布式每個人都可以在自己的本地倉庫進行操作以及提交,最后可以 push 到 remote repository。但是我們在 push 之前,應該 pull 一下,因為如果有相同的文件修改了會出現問題,其實 git pull 這個操作還是不太好的,因為他不夠直觀

git pull 

git fetch
git merge

git fetch 會把此分支上面所有的更新拉下來,但是沒有和本地的 Head 分支進行和合並。
如果執行 git fetch 后再去執行 git merge 就會把更新的部門和當前的 Head 進行合並,如果有沖突就會產生沖突文件,然后把沖突文件修改一下就可以了。

探索

我們用本地的一個倉庫去模擬一下 git merge 產生沖突時候的情況。

git init 
echo "master" > info.txt
git add .
git commit -m "master"

git branch issue1 
git branch issue2

這里要注意點,這兩個分支都是從 master 分支產生的,此時這三個分支都是在一個點,對於 git 來說,這三個分支的指針是一樣的,這里需要支出的是 HEAD 指的就是當前的分支,每當我們 git checkout 分支的時候,HEAD 也會自動的修改指向切換后的分支。
我們可以這樣去查看 HEAD:

cat .git/HEAD

ref: refs/heads/master

接下來進入正題,首先切換到 issue1 分支:

git checkout issue1
echo "issue1" >> info.txt
git add .
git commit -m "issue1"


[issue1 4e5bb48] issue1
 1 file changed, 1 insertion(+)

然后切換到 issue2:

git checkout issue2
echo "issue2" >> info.txt
git add .
git commit -m "issue2"


[issue2 bcf0fb0] issue2
 1 file changed, 1 insertion(+)

然后我們再切換到 master 分支把 issue1 和 issue2merge 到 master 分支, 不過在我們 merge 之前我們想思考一下,假設我們先 merge issue1 分支,然后再 merge issue2 分支會出現什么樣的結果呢?

因為 issue1 和 issue2 都是從 master 分支創建出來的,所以 master 分支 merge issue1 的時候是可以成功的,因為在 master 分支在 merge issue1 的時候,master 分支並沒有改動過,但在 master merge issue2 的時候,就會有問題,因為此時 master 以及修改了,而且修改的地方還都存在沖突,沖突就是第二行。

master 合並 issue1 分支:

Updating e84213a..4e5bb48
Fast-forward
 info.txt | 1 +
 1 file changed, 1 insertion(+)

上面的 Fast-forward 指的就是把 master 當前的指針直接移動到 issue1 也就是master 此時和 issue1 指向一個位置。

master 再合並 issue2 分支:

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

從上面可以看出,出現了沖突。

cat info.txt

master
<<<<<<< HEAD 
issue1
=======  
issue2
>>>>>>> issue2

因為第二行出現了沖突, master merge issue1 后第二行為 issue1
然后此時 merge issue2 的時候 第二行為 issue2,所以出現了沖突,
修改一下,然后提交就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM