[root@localhost public_html]# git branch pu-1138 爲了在軟件2.3發佈版本上修復一個BUG,能夠指定rel-2.3的分支爲開始提交 [root@localhost public_html]# git branch pu-1138 rel-2.3 [root@localhost public_html]# git branch * master pu-1138 [root@localhost public_html]# git show-branch * [master] mv bar to foo ! [pu-1138] mv bar to foo -- *+ [master] mv bar to foo [root@localhost public_html]# git show-branch pu-1138 [pu-1138] mv bar to foo
例子:html
[root@localhost public_html]# git branch testing [root@localhost public_html]# git branch * master testing [root@localhost public_html]# ls foo.html index.html [root@localhost public_html]# echo 'testing' > test.txt [root@localhost public_html]# ls foo.html index.html test.txt [root@localhost public_html]# git add . [root@localhost public_html]# git commit -m "add test.txt" [master b0b257c] add test.txt 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 test.txt [root@localhost public_html]# ls foo.html index.html test.txt [root@localhost public_html]# git checkout testing Switched to branch 'testing' [root@localhost public_html]# ls foo.html index.html [root@localhost public_html]# git checkout master Switched to branch 'master' [root@localhost public_html]# ls foo.html index.html test.txt [root@localhost public_html]# git checkout -b newtest Switched to a new branch 'newtest' [root@localhost public_html]# ls foo.html index.html test.txt [root@localhost public_html]# git rm test.txt rm 'test.txt' [root@localhost public_html]# ls foo.html index.html [root@localhost public_html]# git commit -am "removed test.txt" [newtest 480b789] removed test.txt 1 files changed, 0 insertions(+), 1 deletions(-) delete mode 100644 test.txt [root@localhost public_html]# git checkout master Switched to branch 'master' [root@localhost public_html]# ls foo.html index.html test.txt
[root@localhost public_html]# git branch * master pu-1138 [root@localhost public_html]# git checkout pu-1138 Switched to branch 'pu-1138' [root@localhost public_html]# ls foo.html index.html [root@localhost public_html]# git branch master * pu-1138
[root@localhost public_html]# git branch -d pu-1138 Deleted branch pu-1138 (was aa431d9). [root@localhost public_html]# git branch * master
(1)合併一個分支git
[root@localhost public_html]# git branch * master newtest testing [root@localhost public_html]# git checkout testing Switched to branch 'testing' [root@localhost public_html]# ls foo.html index.html [root@localhost public_html]# git merge newtest Updating aa431d9..b488b19 Fast-forward yes.html | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 yes.html [root@localhost public_html]# ls foo.html index.html yes.html
(2)合併兩個分支vim
[root@localhost ~]# mkdir fenzhi_total [root@localhost ~]# cd fenzhi_total/ [root@localhost fenzhi_total]# ls [root@localhost fenzhi_total]# git init Initialized empty Git repository in /root/fenzhi_total/.git/ [root@localhost fenzhi_total]# cat > file Line 1 stuff Line 2 stuff Line 3 stuff [root@localhost fenzhi_total]# ls file [root@localhost fenzhi_total]# git add file [root@localhost fenzhi_total]# git commit -m "Initial 3 line file" [master (root-commit) 2f793c2] Initial 3 line file 1 files changed, 3 insertions(+), 0 deletions(-) create mode 100644 file [root@localhost fenzhi_total]# cat > other_file Here is stuff on another file! [root@localhost fenzhi_total]# git add other_file [root@localhost fenzhi_total]# git commit -m "Another file" [master 9f175ec] Another file 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 other_file [root@localhost fenzhi_total]# git checkout -b alternate master^ Switched to a new branch 'alternate' [root@localhost fenzhi_total]# git show-branch * [alternate] Initial 3 line file ! [master] Another file -- + [master] Another file *+ [alternate] Initial 3 line file [root@localhost fenzhi_total]# cat >> file Line 4 alternate stuff [root@localhost fenzhi_total]# git commit -am "Add alternate's line 4" [alternate c004281] Add alternate's line 4 1 files changed, 1 insertions(+), 0 deletions(-) [root@localhost fenzhi_total]# git checkout master Switched to branch 'master' [root@localhost fenzhi_total]# git status # On branch master nothing to commit (working directory clean) [root@localhost fenzhi_total]# ls file other_file [root@localhost fenzhi_total]# git merge alternate Merge made by recursive. file | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) [root@localhost fenzhi_total]# git log --graph --pretty=oneline --abbrev-commit * bdb04ee Merge branch 'alternate' |\ | * c004281 Add alternate's line 4 * | 9f175ec Another file |/ * 2f793c2 Initial 3 line file [root@localhost fenzhi_total]# cat file Line 1 stuff Line 2 stuff Line 3 stuff Line 4 alternate stuff
(3)有衝突的分支app
[root@localhost fenzhi_total]# git branch alternate * master [root@localhost fenzhi_total]# [root@localhost fenzhi_total]# [root@localhost fenzhi_total]# git checkout master Already on 'master' [root@localhost fenzhi_total]# cat >> file Line 5 stuff Line 6 stuff [root@localhost fenzhi_total]# git commit -am "Add line 5 and 6" [master 6e1cf57] Add line 5 and 6 1 files changed, 2 insertions(+), 0 deletions(-) [root@localhost fenzhi_total]# git checkout alternate Switched to branch 'alternate' [root@localhost fenzhi_total]# git show-branch * [alternate] Add alternate's line 4 ! [master] Add line 5 and 6 -- + [master] Add line 5 and 6 *+ [alternate] Add alternate's line 4 [root@localhost fenzhi_total]# cat >> file Line 5 alternate stuff Line 6 alternate stuff [root@localhost fenzhi_total]# cat file Line 1 stuff Line 2 stuff Line 3 stuff Line 4 alternate stuff Line 5 alternate stuff Line 6 alternate stuff [root@localhost fenzhi_total]# git diff diff --git a/file b/file index a29c52b..802acf8 100644 --- a/file +++ b/file @@ -2,3 +2,5 @@ Line 1 stuff Line 2 stuff Line 3 stuff Line 4 alternate stuff +Line 5 alternate stuff +Line 6 alternate stuff [root@localhost fenzhi_total]# git commit -am "Add alternate line 5 and 6" [alternate 4596a0d] Add alternate line 5 and 6 1 files changed, 2 insertions(+), 0 deletions(-) [root@localhost fenzhi_total]# git show-branch * [alternate] Add alternate line 5 and 6 ! [master] Add line 5 and 6 -- * [alternate] Add alternate line 5 and 6 + [master] Add line 5 and 6 *+ [alternate^] Add alternate's line 4 [root@localhost fenzhi_total]# git checkout master Switched to branch 'master' [root@localhost fenzhi_total]# git merge alternate Auto-merging file CONFLICT (content): Merge conflict in file Automatic merge failed; fix conflicts and then commit the result. 此時出現合併衝突 [root@localhost fenzhi_total]# git diff diff --cc file index 4d77dd1,802acf8..0000000 --- a/file +++ b/file @@@ -2,5 -2,5 +2,10 @@@ Line 1 stuf Line 2 stuff Line 3 stuff Line 4 alternate stuff ++<<<<<<< HEAD +Line 5 stuff +Line 6 stuff ++======= + Line 5 alternate stuff + Line 6 alternate stuff ++>>>>>>> alternate [root@localhost fenzhi_total]# cat file Line 1 stuff Line 2 stuff Line 3 stuff Line 4 alternate stuff <<<<<<< HEAD Line 5 stuff Line 6 stuff ======= Line 5 alternate stuff Line 6 alternate stuff >>>>>>> alternate 此時能夠選擇只取一邊的版本或兩邊混合(須要手動修改) [root@localhost fenzhi_total]# vim file [root@localhost fenzhi_total]# cat file Line 1 stuff Line 2 stuff Line 3 stuff Line 4 alternate stuff Line 5 alternate stuff Line 6 stuff [root@localhost fenzhi_total]# git add file [root@localhost fenzhi_total]# git commit [master 5a8e0fa] Merge branch 'alternate' [root@localhost fenzhi_total]# git show-branch ! [alternate] Add alternate line 5 and 6 * [master] Merge branch 'alternate' -- - [master] Merge branch 'alternate' +* [alternate] Add alternate line 5 and 6 [root@localhost fenzhi_total]# git log commit 5a8e0fa2318cc9d9aa4171d8aaff0105c4a06331 Merge: 6e1cf57 4596a0d Author: tong <tongxiaoda@anzhi.com> Date: Tue Feb 27 16:24:48 2018 +0800 Merge branch 'alternate' Conflicts: file change file commit 4596a0d219ceb1ac33214a8b2f891d7788ea80e5 Author: tong <tongxiaoda@anzhi.com> Date: Tue Feb 27 16:18:11 2018 +0800 Add alternate line 5 and 6 commit 6e1cf5717cd1012f527262d3108c8fad22dc4dde Author: tong <tongxiaoda@anzhi.com> Date: Tue Feb 27 16:16:26 2018 +0800 Add line 5 and 6 commit bdb04eec38411ea7d490054f4d236af783debb3c Merge: 9f175ec c004281 Author: tong <tongxiaoda@anzhi.com> Date: Tue Feb 27 16:13:20 2018 +0800 Merge branch 'alternate' commit c0042812ba692e1a16c0a5e0d9c9dc5e9b1f7a7e Author: tong <tongxiaoda@anzhi.com> Date: Tue Feb 27 16:12:39 2018 +0800 Add alternate's line 4 commit 9f175ec6e0e9b85de029969bb1da897a84abc4f5 Author: tong <tongxiaoda@anzhi.com> Date: Tue Feb 27 16:11:03 2018 +0800 Another file commit 2f793c27b2bc1ab5b046eec2790e88e751727566 Author: tong <tongxiaoda@anzhi.com> Date: Tue Feb 27 16:10:12 2018 +0800 Initial 3 line file
(4)處理合並衝突3d
[root@localhost fz_t]# git init Initialized empty Git repository in /root/fz_t/.git/ [root@localhost fz_t]# echo hello > hello [root@localhost fz_t]# git add hello [root@localhost fz_t]# git commit -m "Initial hello file" [master (root-commit) 296dfa0] Initial hello file 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 hello [root@localhost fz_t]# git checkout -b alt Switched to a new branch 'alt' [root@localhost fz_t]# echo world >> hello [root@localhost fz_t]# echo 'Yay!' >> hello [root@localhost fz_t]# git commit -am "One world" [alt ea3c204] One world 1 files changed, 2 insertions(+), 0 deletions(-) [root@localhost fz_t]# git checkout master Switched to branch 'master' [root@localhost fz_t]# echo worlds >> hello [root@localhost fz_t]# echo 'Yay!' >> hello [root@localhost fz_t]# git commit -am "All worlds" [master 8f316ee] All worlds 1 files changed, 2 insertions(+), 0 deletions(-) [root@localhost fz_t]# git merge alt Auto-merging hello CONFLICT (content): Merge conflict in hello Automatic merge failed; fix conflicts and then commit the result. 定位衝突文件 [root@localhost fz_t]# git status # On branch master # Unmerged paths: # (use "git add/rm <file>..." as appropriate to mark resolution) # # both modified: hello # no changes added to commit (use "git add" and/or "git commit -a") [root@localhost fz_t]# git ls-files -u 100644 ce013625030ba8dba906f756967f9e9ca394464a 1 hello 100644 e63164d9518b1e6caf28f455ac86c8246f78ab70 2 hello 100644 562080a4c6518e1bf67a9f58a32a67bff72d4f00 3 hello 檢查衝突 [root@localhost fz_t]# git diff HEAD diff --git a/hello b/hello index e63164d..1f2f61c 100644 --- a/hello +++ b/hello @@ -1,3 +1,7 @@ hello +<<<<<<< HEAD worlds +======= +world +>>>>>>> alt Yay! [root@localhost fz_t]# git diff MERGE_HEAD diff --git a/hello b/hello index 562080a..1f2f61c 100644 --- a/hello +++ b/hello @@ -1,3 +1,7 @@ hello +<<<<<<< HEAD +worlds +======= world +>>>>>>> alt Yay! 或使用如下命令檢查 [root@localhost fz_t]# git log --merge --left-right -p hello commit <8f316ee211109affd61eb89c001ac139f7274406 Author: tong <tongxiaoda@anzhi.com> Date: Tue Feb 27 16:28:35 2018 +0800 All worlds diff --git a/hello b/hello index ce01362..e63164d 100644 --- a/hello +++ b/hello @@ -1 +1,3 @@ hello +worlds +Yay! commit >ea3c2044aae6b375d3cba2fa0ac9ff1d78dd6779 Author: tong <tongxiaoda@anzhi.com> Date: Tue Feb 27 16:27:53 2018 +0800 One world diff --git a/hello b/hello index ce01362..562080a 100644 --- a/hello +++ b/hello @@ -1 +1,3 @@ hello +world +Yay! 不使用任何版本,繼續修改file [root@localhost fz_t]# cat hello hello worldly ones Yay! [root@localhost fz_t]# git diff diff --cc hello index e63164d,562080a..0000000 --- a/hello +++ b/hello @@@ -1,3 -1,3 +1,3 @@@ hello - worlds -world ++worldly ones Yay! 結束解決衝突 [root@localhost fz_t]# git add hello [root@localhost fz_t]# git ls-files -s 100644 01e406a245782525e6b02cadf6df25e212563967 0 hello [root@localhost fz_t]# cat .git/MERGE_MSG Merge branch 'alt' Conflicts: hello [root@localhost fz_t]# git commit [master af5cf67] Merge branch 'alt' [root@localhost fz_t]# git show commit af5cf675e311952e5377e5942dd1d7689427eec8 Merge: 8f316ee ea3c204 Author: tong <tongxiaoda@anzhi.com> Date: Tue Feb 27 16:38:29 2018 +0800 Merge branch 'alt' Conflicts: hello diff --cc hello index e63164d,562080a..01e406a --- a/hello +++ b/hello @@@ -1,3 -1,3 +1,3 @@@ hello - worlds -world ++worldly ones Yay!
(5)停止或從新啓動合併code
git reset --hard HEAD 把工做目錄和索引都還原到git merge命令以前 git reset --hard ORIG_HEAD 停止或在它已經結束後放棄