教你玩轉Git-合併衝突

Git 是一個開源的分佈式版本控制系統,用於敏捷高效地處理任何或小或大的項目。Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。Git 與經常使用的版本控制工具 CVS, Subversion 等不一樣,它採用了分佈式版本庫的方式,沒必要服務器端軟件支持。

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

合併並不單單是簡單的文件添加、移除的操做,Git 也會合並修改。php

$ git branch
* master
$ cat runoob.php

首先,咱們建立一個叫作 change_site 的分支,切換過去,咱們將 runoob.php 內容改成:html

< ?php
echo 'runoob';
?>

建立 change_site 分支:linux

$ 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

http://www.51cto.com/it/news/2019/0923/14820.html
https://www.linuxprobe.com/booksvim

$ 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'

如今咱們成功解決了合併中的衝突,並提交告終果。3d

相關文章
相關標籤/搜索