一、分支名

  • 分支名不能以斜线结尾
  • 分支名不能以减号开头
  • 以斜杠分割的组件不能以点开头(feature/.new)
  • 分支名的任何地方都不能包含连个连续的点
  • 分支名不能包含空格或空白符
  • 分支名不能包含波浪线~、插入符^、冒号:、问号?、星号*、左括号[,以及ASCII码控制字符

二、创建分支

[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

例子:

[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)合并一个分支

[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)合并两个分支

[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)有冲突的分支

[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)处理合并冲突

[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)中止或重新启动合并

git reset --hard HEAD
把工作目录和索引都还原到git merge命令之前 git reset --hard ORIG_HEAD
中止或在它已经结束后放弃

最新文章

  1. 前后台数据交互 后台封装数据 json格式
  2. 2.Nginx优化
  3. 服务设计模式一:Web服务概述
  4. Spring与其他Web框架集成
  5. 显示win7桌面网络.reg
  6. 在 SVG 中添加交互性
  7. [转]LINQ语句之Select/Distinct和Count/Sum/Min/Max/Avg
  8. poj 2065 SETI 高斯消元
  9. servlet 配置到服务器
  10. php 汉字排序
  11. qcow2、raw、vmdk等镜像格式
  12. 它们的定义PropertyPlaceHolder无法完成更换任务
  13. c语言:快速排序
  14. swiper结合ajax的轮播图
  15. 聊聊Vue.js组件间通信的几种姿势
  16. appium初步认识
  17. jenkins+sonarQube代码质量扫描 并排除指定的目录
  18. requirejs案例
  19. JavaScript Drag处理
  20. 使用CSS定位元素实现水平垂直居中效果

热门文章

  1. MySQL的system命令在渗透测试中的使用以及UDF提权
  2. JavaScript 禁止表单提交
  3. SaltStack之编译安装LNMP环境
  4. 第十一课——codis-server的高可用,对比codis和redis cluster的优缺点
  5. [iOS微博项目 - 3.5] - 封装业务
  6. $obj-&gt;0
  7. glibc-2.23_large_bin链接方式_浅析
  8. 金融量化ushare模块
  9. 关于android:windowNoTitle不起作用的解决办法
  10. Spring源码解析(一)开篇