【Git学习笔记】4:分支的简单使用和合并,禁用Fast-forward

版权声明:本文为博主原创学习笔记,如需转载请注明来源。 https://blog.csdn.net/SHU15121856/article/details/82049720

在本地创建和使用分支

Git鼓励使用多分支。

查看当前版本库中的分支

git branch

其中*标注的是当前分支。

创建并切换到分支

git checkout -b 分支名

这时所有的commit都会提交到这个分支上,而不会影响其它分支。

切换分支

git checkout 分支名

合并某分支到当前分支

git merge 分支名

一般是在master上合并其它分支,如切换到master分支并执行:

[root@localhost testGit]# git merge zephyr
Updating 4b71208..5be328a
Fast-forward
 README.md |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

这里Fast-forward表示快进模式合并,即直接将当前分支指针指向要合并的分支,此后两个指针重合,这时可以删除那个合并的分支(指针),而不会影响当前分支的合并情况。

删除分支

git branch -d 分支名

解决冲突

当合并两个各自存在commit的分支时就可能出现冲突,而无法实现快速模式。

在同一个文件中,两个分支各自加了一行并提交,在master上合并zephyr分支时出现了冲突:

[root@localhost testGit]# git merge zephyr
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

git status可以看到冲突发生在哪个文件:

[root@localhost testGit]# git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   both modified:      README.md
#
no changes added to commit (use "git add" and/or "git commit -a")

查看文件,在<<<<<<< HEAD=======>>>>>>> 要合并的分支名之间所夹的就是刚刚尝试合并两个分支时发现的区别:
这里写图片描述
手动修改文件,解决冲突:
这里写图片描述
再重新add和commit,即在当前分支上向后走一个解决了冲突的版本即可:

[root@localhost testGit]# git add .
[root@localhost testGit]# git commit -m "解决冲突"
[master 8843dd7] 解决冲突

查看分支的合并情况:

[root@localhost testGit]# git log --graph --pretty=oneline --abbrev-commit
*   8843dd7 解决冲突
|\  
| * 957b845 在zephyr上加行3
* | ba66b25 在master上加行3
|/  
* 5be328a 提交到新分支
* 4b71208 Zephyr 1
* 45830ad Initial commit

现在就已经通过解决冲突合并好这两个分支了,可以删除合并进来的分支了。

扫描二维码关注公众号,回复: 3052828 查看本文章

廖老师的最佳实践

下面很多图来自廖雪峰的Git教程

实际开发时分支的组织

在实际开发中master分支用来发布和记录历史版本,dev分支用来开发:
这里写图片描述
其它人的分支适时合并到dev上。

禁用Fast-forward(快进模式)

注意这张图里合并总是能看到这样的结构:
这里写图片描述
这样的结构在发生冲突,手动解决冲突并提交时是完全正常的,因为解决后再提交会生成新的commit,就相当于上面红色矩形框中右上角的结点。

但当出现Fast-forward时候,前面学了这种情况下会直接把当前分支的指针指向要合并尽量的分支,就是这样的:
这里写图片描述
一旦删除分支或者分支指针往前走,很难体现该处提交是合并自某个分支的。如果禁用掉Fast-forward,就可以生成新的commit从而反映这件事:
这里写图片描述
禁用快进模式的分支合并:

git merge --no-ff -m "commit描述" 要合并的分支名

实际上是做了合并,提交一个新的commit。

猜你喜欢

转载自blog.csdn.net/SHU15121856/article/details/82049720