git基础-(4)-分支管理合并与冲突

一、创建分支

git branch [分支名]

创建出来的分支和原分支是一模一样的,里面的内容都没有变。注意创建出来的分支不是空分支。

二、查看所有分支

git branch -v

三、切换分支

git checkout [分支名]

四、删除分支

git branch -d [分支名]

五、合并分支内容

 当前分支合并被合并分支:  git merge [被合并分支]

核心总结:如果两个分支合并时,产生了新节点【判断是否产生新节点的依据是,A和B合并时,是否之前已经出现了合并结果了】,就会需要-m 参数 来 添加 提交备注,否则不需要  -m 参数 来 添加提交备注。

不存在行冲突时:git 分支合并是以 作为单位的,不存在行冲突就自动合并了。
如果 A和B一开始是一模一样的,A修改了提交生成 A+。
此时 A+ merge B,结果是没有变化,仍是 A+。
如果接着 B merge A+,则 B变成了A+ ,且没有产生新节点,不需要添加提交信息。

如果 A和B一开始是一模一样的,A修改了提交生成 A+,且 B修改成了B+。
此时 A+ merge B+,生成 A++,需要添加提交备注,也可以直接输入 A+ merge B+ -m "XX"
如果接着 B+ merge A++,则B+ 变成了 A++,且没有产生新节点,不需要添加提交信息。

存在行冲突时:在同一行 合并和被合并分支 都修改过了。

1、AB合并之前已经有合并结果了,比如A分支合并了B分支,产生了A+节点,此时B分支再合并A分支时,也只会变成A+节点。

2、AB合并之前还未出现合并结果,此时需要将所有冲突文件都添加到暂存区,然后提交(这里的 git commit 不需要再写文件名了,但是提交备注还是需要的)产生新的合并后节点。

aaaaaaa
bbbbbbb
ccccccc   ### modify by master
ddddddd
eeeeeee
fffffff

git commit apple.txt -m "modify apple by master"

===========上面是主分支进行的修改提交====下面是被合并分支进行的修改提交===========

aaaaaaa
bbbbbbb
cccccc  ### modify by hot_fixc
ddddddd
eeeeeee
fffffff

git commit apple.txt -m "modify apple by hot_fix"

结果显示:存在冲突。

cooldeMacBook-Pro:git-learn cool$ git merge hot_fix
Auto-merging apple.txt
CONFLICT (content): Merge conflict in apple.txt
Automatic merge failed; fix conflicts and then commit the result.
cooldeMacBook-Pro:git-learn cool$ git branch -v
  hot_fix f411b30 modify apple by hot_fix
* master  44bc206 modify apple by master
cooldeMacBook-Pro:git-learn cool$

查看当前合并冲突的状态信息:

cooldeMacBook-Pro:git-learn cool$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)

	both modified:   apple.txt

no changes added to commit (use "git add" and/or "git commit -a")
cooldeMacBook-Pro:git-learn cool$ 

需要手动修改提交:下面就是 冲突文件的信息,需要自己修改。

aaaaaaa
bbbbbbb
<<<<<<< HEAD
ccccccc   ### modify by master
=======
cccccc  ### modify by hot_fixc
>>>>>>> hot_fix
ddddddd
eeeeeee
fffffff

合并冲突时需要修改所有有冲突的文件,然后对每一个冲突文件执行  git add [冲突文件名]  ,当所有冲突文件都添加到暂存区后,执行  git commit -m “日志信息”
注意:此时commit 一定不能带具体文件名。

如果想直接git commit -m "信息" 就会报错了。

cooldeMacBook-Pro:git-learn cool$ git commit -m "测试一下"
U	apple.txt
error: Committing is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
cooldeMacBook-Pro:git-learn cool$ 

所以必需要先将冲突文件 添加到 暂存区,然后再执行 git commit -m “xxx”【后面不加 -m 参数时,需要进入 vim 编辑 添加提交信息】


下面是修改好,合并到本地库的文件。

aaaaaaa
bbbbbbb
<<<<<<<
ccccccc   ### modify by master
=======
cccccc  ### modify by hot_fixc
>>>>>>>
ddddddd
eeeeeee
fffffff

[注意master合并了hot_fix后,master 现在已经提交了合并,生成了新节点,此时再合并 hot_fix 会提示 已经合并过了,不能合并]

而此时,hot_fix 还是 :

aaaaaaa
bbbbbbb
cccccc  ### modify by hot_fixc
ddddddd
eeeeeee
fffffff

转到 hot_fix 分支, git merge master ,是可以合并的,如下结果

cooldeMacBook-Pro:git-learn cool$ git merge master
Updating f411b30..2faa553
Fast-forward
 apple.txt | 4 ++++
 1 file changed, 4 insertions(+)
cooldeMacBook-Pro:git-learn cool$ vim apple.txt

显示合并后的文件信息

aaaaaaa
bbbbbbb
<<<<<<<
ccccccc   ### modify by master
=======
cccccc  ### modify by hot_fixc
>>>>>>>
ddddddd
eeeeeee
fffffff

 

 

 

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments