1. 程式人生 > >教你玩轉Git-合併衝突

教你玩轉Git-合併衝突

導讀 Git 是一個開源的分散式版本控制系統,用於敏捷高效地處理任何或小或大的專案。Git 是 Linus Torvalds 為了幫助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。Git 與常用的版本控制工具 CVS, Subversion 等不同,它採用了分散式版本庫的方式,不必伺服器端軟體支援。

教你玩轉Git-合併衝突教你玩轉Git-合併衝突

合併並不僅僅是簡單的檔案新增、移除的操作,Git 也會合並修改。

$ git branch
* master
$ cat runoob.php

首先,我們建立一個叫做 change_site 的分支,切換過去,我們將 runoob.php 內容改為:

< ?php
echo 'runoob';
?>

建立 change_site 分支:

$ git checkout -b change_site
Switched to a new branch 'change_site'
$ vim runoob.php
$ head -3 runoob.php
< ?php
echo 'runoob';
?>
$ git commit -am 'changed the runoob.php'
[change_site 7774248] changed the runoob.php
 1 file changed, 3 insertions(+)

將修改的內容提交到 change_site 分支中。 現在,假如切換回 master 分支我們可以看內容恢復到我們修改前的(空檔案,沒有程式碼),我們再次修改 runoob.php 檔案。

$ git checkout master
Switched to branch 'master'
$ cat runoob.php
$ vim runoob.php    # 修改內容如下
$ cat runoob.php
< ?php
echo 1;
?>
$ git diff
diff --git a/runoob.php b/runoob.php
index e69de29..ac60739 100644
--- a/runoob.php
+++ b/runoob.php
@@ -0,0 +1,3 @@
+< ?php
+echo 1;
+?>
$ git commit -am '修改程式碼'
[master c68142b] 修改程式碼
 1 file changed, 3 insertions(+)

現在這些改變已經記錄到我的 "master" 分支了。接下來我們將 "change_site" 分支合併過來。

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

$ cat runoob.php     # 代開檔案,看到衝突內容
< ?php
<<<<<<< HEAD
echo 1;
=======
echo 'runoob';
>>>>>>> change_site
?>

我們將前一個分支合併到 master 分支,一個合併衝突就出現了,接下來我們需要手動去修改它。

$ vim runoob.php 
$ cat runoob.php
< ?php
echo 1;
echo 'runoob';
?>
$ git diff
diff --cc runoob.php
index ac60739,b63d7d7..0000000
--- a/runoob.php
+++ b/runoob.php
@@@ -1,3 -1,3 +1,4 @@@
  < ?php
 +echo 1;
+ echo 'runoob';
  ?>

在 Git 中,我們可以用 git add 要告訴 Git 檔案衝突已經解決

$ git status -s
UU runoob.php
$ git add runoob.php
$ git status -s
M  runoob.php
$ git commit
[master 88afe0e] Merge branch 'change_site'

現在我們成功解決了合併中的衝突,並提交了結果。

本文原創地址:https://www.linuxprobe.com/git-me