一、分支名
- 分支名不能以斜线结尾
- 分支名不能以减号开头
- 以斜杠分割的组件不能以点开头(feature/.new)
- 分支名的任何地方都不能包含连个连续的点
- 分支名不能包含空格或空白符
- 分支名不能包含波浪线~、插入符^、冒号:、问号?、星号*、左括号[,以及ASCII码控制字符
二、创建分支
[[email protected] public_html]# git branch pu-1138
为了在软件2.3发布版本上修复一个BUG,可以指定rel-2.3的分支为开始提交
[[email protected] public_html]# git branch pu-1138 rel-2.3
[[email protected] public_html]# git branch
* master
pu-1138
[[email protected] public_html]# git show-branch
* [master] mv bar to foo
! [pu-1138] mv bar to foo
--
*+ [master] mv bar to foo
[[email protected] public_html]# git show-branch pu-1138
[pu-1138] mv bar to foo
例子:
[[email protected] public_html]# git branch testing
[[email protected] public_html]# git branch
* master
testing
[[email protected] public_html]# ls
foo.html index.html
[[email protected] public_html]# echo ‘testing‘ > test.txt
[[email protected] public_html]# ls
foo.html index.html test.txt
[[email protected] public_html]# git add .
[[email protected] 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
[[email protected] public_html]# ls
foo.html index.html test.txt
[[email protected] public_html]# git checkout testing
Switched to branch ‘testing‘
[[email protected] public_html]# ls
foo.html index.html
[[email protected] public_html]# git checkout master
Switched to branch ‘master‘
[[email protected] public_html]# ls
foo.html index.html test.txt
[[email protected] public_html]# git checkout -b newtest
Switched to a new branch ‘newtest‘
[[email protected] public_html]# ls
foo.html index.html test.txt
[[email protected] public_html]# git rm test.txt
rm ‘test.txt‘
[[email protected] public_html]# ls
foo.html index.html
[roo[email protected] 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
[[email protected] public_html]# git checkout master
Switched to branch ‘master‘
[[email protected] public_html]# ls
foo.html index.html test.txt
三、检出分支
[[email protected] public_html]# git branch
* master
pu-1138
[[email protected] public_html]# git checkout pu-1138
Switched to branch ‘pu-1138‘
[[email protected] public_html]# ls
foo.html index.html
[[email protected] public_html]# git branch
master
* pu-1138
四、删除分支
[[email protected] public_html]# git branch -d pu-1138
Deleted branch pu-1138 (was aa431d9).
[[email protected] public_html]# git branch
* master
五、合并分支
(1)合并一个分支
[[email protected] public_html]# git branch
* master
newtest
testing
[[email protected] public_html]# git checkout testing
Switched to branch ‘testing‘
[[email protected] public_html]# ls
foo.html index.html
[[email protected] 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
[[email protected] public_html]# ls
foo.html index.html yes.html
(2)合并两个分支
[[email protected] ~]# mkdir fenzhi_total
[[email protected] ~]# cd fenzhi_total/
[[email protected] fenzhi_total]# ls
[[email protected] fenzhi_total]# git init
Initialized empty Git repository in /root/fenzhi_total/.git/
[[email protected] fenzhi_total]# cat > file
Line 1 stuff
Line 2 stuff
Line 3 stuff
[[email protected] fenzhi_total]# ls
file
[[email protected] fenzhi_total]# git add file
[[email protected] 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
[[email protected] fenzhi_total]# cat > other_file
Here is stuff on another file!
[[email protected] fenzhi_total]# git add other_file
[[email protected] fenzhi_total]# git commit -m "Another file"
[master 9f175ec] Another file
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 other_file
[[email protected] fenzhi_total]# git checkout -b alternate master^
Switched to a new branch ‘alternate‘
[[email protected] fenzhi_total]# git show-branch
* [alternate] Initial 3 line file
! [master] Another file
--
+ [master] Another file
*+ [alternate] Initial 3 line file
[[email protected] fenzhi_total]# cat >> file
Line 4 alternate stuff
[[email protected] fenzhi_total]# git commit -am "Add alternate‘s line 4"
[alternate c004281] Add alternate‘s line 4
1 files changed, 1 insertions(+), 0 deletions(-)
[[email protected] fenzhi_total]# git checkout master
Switched to branch ‘master‘
[[email protected] fenzhi_total]# git status
# On branch master
nothing to commit (working directory clean)
[[email protected] fenzhi_total]# ls
file other_file
[[email protected] fenzhi_total]# git merge alternate
Merge made by recursive.
file | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
[[email protected] 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
[[email protected] fenzhi_total]# cat file
Line 1 stuff
Line 2 stuff
Line 3 stuff
Line 4 alternate stuff
(3)有冲突的分支
[[email protected] fenzhi_total]# git branch
alternate
* master
[[email protected] fenzhi_total]#
[[email protected] fenzhi_total]#
[[email protected] fenzhi_total]# git checkout master
Already on ‘master‘
[[email protected] fenzhi_total]# cat >> file
Line 5 stuff
Line 6 stuff
[[email protected] fenzhi_total]# git commit -am "Add line 5 and 6"
[master 6e1cf57] Add line 5 and 6
1 files changed, 2 insertions(+), 0 deletions(-)
[[email protected] fenzhi_total]# git checkout alternate
Switched to branch ‘alternate‘
[[email protected] 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
[[email protected] fenzhi_total]# cat >> file
Line 5 alternate stuff
Line 6 alternate stuff
[[email protected] 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
[[email protected] 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
[[email protected] 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(-)
[[email protected] 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
[[email protected] fenzhi_total]# git checkout master
Switched to branch ‘master‘
[[email protected] fenzhi_total]# git merge alternate
Auto-merging file
CONFLICT (content): Merge conflict in file
Automatic merge failed; fix conflicts and then commit the result.
此时出现合并冲突
[[email protected] 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
[[email protected] 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
此时可以选择只取一边的版本或两边混合(需要手动修改)
[[email protected] fenzhi_total]# vim file
[[email protected] fenzhi_total]# cat file
Line 1 stuff
Line 2 stuff
Line 3 stuff
Line 4 alternate stuff
Line 5 alternate stuff
Line 6 stuff
[[email protected] fenzhi_total]# git add file
[[email protected] fenzhi_total]# git commit
[master 5a8e0fa] Merge branch ‘alternate‘
[[email protected] 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
[[email protected] fenzhi_total]# git log
commit 5a8e0fa2318cc9d9aa4171d8aaff0105c4a06331
Merge: 6e1cf57 4596a0d
Author: tong <[email protected]>
Date: Tue Feb 27 16:24:48 2018 +0800
Merge branch ‘alternate‘
Conflicts:
file
change file
commit 4596a0d219ceb1ac33214a8b2f891d7788ea80e5
Author: tong <[email protected]>
Date: Tue Feb 27 16:18:11 2018 +0800
Add alternate line 5 and 6
commit 6e1cf5717cd1012f527262d3108c8fad22dc4dde
Author: tong <[email protected]>
Date: Tue Feb 27 16:16:26 2018 +0800
Add line 5 and 6
commit bdb04eec38411ea7d490054f4d236af783debb3c
Merge: 9f175ec c004281
Author: tong <[email protected]>
Date: Tue Feb 27 16:13:20 2018 +0800
Merge branch ‘alternate‘
commit c0042812ba692e1a16c0a5e0d9c9dc5e9b1f7a7e
Author: tong <[email protected]>
Date: Tue Feb 27 16:12:39 2018 +0800
Add alternate‘s line 4
commit 9f175ec6e0e9b85de029969bb1da897a84abc4f5
Author: tong <[email protected]>
Date: Tue Feb 27 16:11:03 2018 +0800
Another file
commit 2f793c27b2bc1ab5b046eec2790e88e751727566
Author: tong <[email protected]>
Date: Tue Feb 27 16:10:12 2018 +0800
Initial 3 line file
(4)处理合并冲突
[[email protected] fz_t]# git init
Initialized empty Git repository in /root/fz_t/.git/
[[email protected] fz_t]# echo hello > hello
[[email protected] fz_t]# git add hello
[[email protected] 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
[[email protected] fz_t]# git checkout -b alt
Switched to a new branch ‘alt‘
[[email protected] fz_t]# echo world >> hello
[[email protected] fz_t]# echo ‘Yay!‘ >> hello
[[email protected] fz_t]# git commit -am "One world"
[alt ea3c204] One world
1 files changed, 2 insertions(+), 0 deletions(-)
[[email protected] fz_t]# git checkout master
Switched to branch ‘master‘
[[email protected] fz_t]# echo worlds >> hello
[[email protected] fz_t]# echo ‘Yay!‘ >> hello
[[email protected] fz_t]# git commit -am "All worlds"
[master 8f316ee] All worlds
1 files changed, 2 insertions(+), 0 deletions(-)
[[email protected] fz_t]# git merge alt
Auto-merging hello
CONFLICT (content): Merge conflict in hello
Automatic merge failed; fix conflicts and then commit the result.
定位冲突文件
[[email protected] 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")
[[email protected] fz_t]# git ls-files -u
100644 ce013625030ba8dba906f756967f9e9ca394464a 1 hello
100644 e63164d9518b1e6caf28f455ac86c8246f78ab70 2 hello
100644 562080a4c6518e1bf67a9f58a32a67bff72d4f00 3 hello
检查冲突
[[email protected] 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!
[[email protected] 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!
或使用以下命令检查
[[email protected] fz_t]# git log --merge --left-right -p hello
commit <8f316ee211109affd61eb89c001ac139f7274406
Author: tong <[email protected]>
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 <[email protected]>
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
[[email protected] fz_t]# cat hello
hello
worldly ones
Yay!
[[email protected] 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!
结束解决冲突
[[email protected] fz_t]# git add hello
[[email protected] fz_t]# git ls-files -s
100644 01e406a245782525e6b02cadf6df25e212563967 0 hello
[[email protected] fz_t]# cat .git/MERGE_MSG
Merge branch ‘alt‘
Conflicts:
hello
[[email protected] fz_t]# git commit
[master af5cf67] Merge branch ‘alt‘
[[email protected] fz_t]# git show
commit af5cf675e311952e5377e5942dd1d7689427eec8
Merge: 8f316ee ea3c204
Author: tong <[email protected]>
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)中止或重新启动合并
git reset --hard HEAD
把工作目录和索引都还原到git merge命令之前
git reset --hard ORIG_HEAD
中止或在它已经结束后放弃