Git 笔记(六)创建合并分支、解决冲突

为什么需要分支
分支,就是一个完整的项目中,平行的几个代码仓库,开发的时候,多人分开开发,最后合并成完整的功能。
分支可以使多人协作更加安全,不会因为每个人的进度和功能块不同儿相互影响。
分支原理
通常情况下,我们单分支管理项目代码的时候,只有 master 一个分支,每一次提交都是一个节点,master 则指向我们提交代码的节点,用于标记当前快照的 HEAD 就指向 master。

假设我们创建新的分支 dev,那么就会多一个 dev 指针,指向我们提交代码的节点,HEAD 改为指向 dev ,所以 git 中创建分支是很快的。如果我们需要合并分支,那么重新用 master 指向我们提交代码的节点,HEAD 指向 master 就完成了,所以在 git 中 ,合并分支也是很轻松快速的。

如果不再需要 dev 分支,则删除 dev 指针,代码没有任何变动。

创建分支

使用 git branch 查看分支情况

$ git branch
* master

使用 git branch dev创建分支 和 git checkout dev切换分支。git checkout -b dev创建并且切换分支到 dev。

$ git branch dev
$ git checkout dev
Switched to branch 'dev'
M       README.md
$ git branch
* dev
  master

使用 git branch 查看分支,我们发现现在有两个分支了,并且当前分支为 dev(当前分支前会加上 *)。

在 dev 分支上修改 README 文件并且提交。

$ git add .
$ git commit -m "commit dev"
[dev 1895051] commit dev
 1 file changed, 1 insertion(+), 1 deletion(-)
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

此时我们去查看 README 文件,并没有我们刚才的修改内容,为什么呢?因为我们的修改是提交到了 dev 分支上面,而 master 分支没有做任何改动。

合并分支

合并 dev 分支到 master 分支。

$ git merge dev
Updating a6de0c0..1895051
Fast-forward
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。再次查看 README 文件,我们刚才在 dev 分支上的修改出现了。

分支已经合并完成,那么可以删除分支了。

$ git branch -d dev
Deleted branch dev (was 1895051).
$ git branch
* master

现在又只剩下一个 master 分支了。

总结
Git鼓励大量使用分支:因为更加安全而不影响效率。

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

解决冲突

重新创建分支 dev , 修改 README 文件,提交。

$ git checkout -b dev
$ git add .
$ git commit -m "commit dev"

然后切换回master分支,修改 README 文件,提交。

$ git checkout master
$ git add .
$ git commit -m "commit master"

合并分支,重现冲突的情况。

$ git merge dev
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

看看 README 文件中冲突的地方:

<<<<<<< HEAD
重现冲突的情况 master++
=======
重现冲突的情况 dev+
>>>>>>> dev

git 使用 <<< , ====, >>> 区分开冲突的文件。HEAD 表示当前分支。这时候,我们需要手动将冲突的地方进行修改,这里我们决定最终采用 重现冲突的情况 master++,删除文中的符号和我们丢弃的内容。

重现冲突的情况 master++

提交并且再次合并再次合并

$ git add .
$ git commit -m "merge"
$ git log --graph
*   commit f8302135fc340de7569d4df48f8ab2323025d7a2 (HEAD -> master)
|\  Merge: 34ed366 fe4a7e8
| | Author: Shanks <[email protected]>
| | Date:   Wed Jul 4 14:47:53 2018 +0800
| |
| |     merge
| |
| * commit fe4a7e852cbc69b82561ecdae14e86fbd1627a40 (dev)
| | Author: Shanks <[email protected]>
| | Date:   Wed Jul 4 14:41:27 2018 +0800
| |
| |     dev
| |
* | commit 34ed366f6204012c3cbe3de8cda02f2380c3a440
|/  Author: Shanks <[email protected]>
|   Date:   Wed Jul 4 14:42:18 2018 +0800
|
|       master

使用 git log --graph 可以查看我们分支合并图。

最后删除分支

$ git branch -d dev
Deleted branch dev (was fe4a7e8).

总结
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

猜你喜欢

转载自blog.csdn.net/xiao6gui/article/details/80912851