一、分支名

  • 分支名不能以斜线结尾
  • 分支名不能以减号开头
  • 以斜杠分割的组件不能以点开头(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
中止或在它已经结束后放弃

GIT使用—分支与合并的更多相关文章

  1. Git入门指南十一:Git branch 分支与合并分支

    十五. Git branch 分支 查看当前有哪些branch bixiaopeng@bixiaopengtekiMacBook-Pro xmrobotium$ git branch * master ...

  2. Git branch 分支与合并分支

    Git branch 分支 查看当前有哪些branch bixiaopeng@bixiaopengtekiMacBook-Pro xmrobotium$ git branch * master 新建一 ...

  3. Git 创建分支与合并分支

    下面以branchName=>aiMdTest为例介绍 1.  下载code git clone masterUrl iva(另存文件名) 2.  创建并切换分支 cd iva git chec ...

  4. git branch 分支与合并

    在使用 git 进行分支开发与合并的时候需要用到这些命令.其他基本 git 命令参考 Git 简易食用指南 git branch 查看分支 git branch 查看当前分支情况 创建分支 git b ...

  5. Git 创建分支并合并主分支

    首先,我们创建dev分支,然后切换到dev分支: $ git checkout -b dev(等价于 $ git branch dev $ git checkout dev ) Switched to ...

  6. Git的分支与合并

    在Git里面我们可以创建不同的分支,来进行调试.发布.维护等不同工作,而互不干扰.下面我们还是来创建一个试验仓库,看一下Git分支运作的台前幕后: $rm -rf test_branch_proj $ ...

  7. idea如何在git上将分支代码合并到主干

    1.首先将idea中的代码分支切换到master分支,可以看到我们在dev上提交的代码 在master上是没有的 2.如图所示,在remote branch 上选择分支,点击后面的三角图标,展开之后选 ...

  8. git创建分支与合并分支

    git branch myfeture 创建分支 git checkout myfeture git add --all git commit -m git push origin myfeture ...

  9. Git:创建与合并分支

    1.1创建dev分支,使用命令符 git branch 分支名称. 1.2将HEAD指针切换到dev分支,使用命名符git checkout 分支名称. 注:创建并且转移可以合并为一个步骤,使用命令符 ...

随机推荐

  1. dubbo项目实战代码展示

    最近公司项目使用dubbo服务,于是就去网上搜索关于dubbo的相关资料,真的很多,但是对于很多人并不是很了解框架或者 不是太适合新手的片段代码,于是我就根据项目的相关内容把dubbo部分单独切出来, ...

  2. 搭建jsp运行环境

    一:搭建jsp服务器端运行环境的步骤: a,下载并按照JDK(JavaDevelopmentKit),这其中就包含了编译器,虚拟机,类库:. b,配置操作系统的环境变量PATH; 补充:编辑变量  添 ...

  3. Codevs 5914 [SXOI2016]最大值

    70分算法+30分打表 #include<ctime> #include<cstdio> #include<cstdlib> #include<algorit ...

  4. 160229-02、Sublime Text 3 快捷键总结

    选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更改所有相同的变量名.函数 ...

  5. 160316、实时处理oracle数据库中表的数据变化

    http://blog.csdn.net/as339000204/article/details/45390727     近期接受项目需求,需要实时处理oracle数据库中表的数据变化,首先想到的是 ...

  6. 百度jQuery库

    <script src="http://apps.bdimg.com/libs/jquery/1.11.1/jquery.js"></script>

  7. error.log worker_connections exceed open file resource limit: 1024

    不按照预期响应请求 nginx.conf中worker_connections 与ulimt -n 配置的冲突

  8. Spark源码分析 – Executor

    ExecutorBackend 很简单的接口 package org.apache.spark.executor /** * A pluggable interface used by the Exe ...

  9. Systemd 配置

    一.开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件. 如果你想让该软件开机启动,就执行下面的命令(以httpd. ...

  10. Sqoop简介及使用

    一.Sqoop概述 1)官网 http://sqoop.apache.org/ 2)场景 传统型缺点,分布式存储.把传统型数据库数据迁移. Apache Sqoop(TM)是一种用于在Apache H ...