Git Book读书笔记--git分支

本文介绍Git中的分支管理,包括创建、切换、合并分支的方法及解决冲突的过程。还详细讲解了变基(rebase)的概念和风险,并提供了实际的操作案例。

Git Book中文版

git分支

查看分支

git branch 

创建分支

git branch [branch_name]

切换分支

git checkout [branch_name]

查看项目分叉历史

$ git log --oneline --decorate --graph --all

* 8740aba (HEAD -> master) 1.txt master提交
| * e5c61aa (test) 1.txt修改
|/
* 3479e2f first commit

合并分支

git merge [branch_name]  # 该分支合并到当前分支(HEAD分支)
  • 快进(fast-forward):当你试图合并两个分支时,如果顺着一个分支走下去能够到达另外一个分支,那么git在合并两者的时候,只会简单的将指针向前推进,因为这种情况下的合并操作没有需要解决的分歧。

  • 合并冲突:如果你在两个分支中,对同一个文件的同一个部分进行了不同的修改,git就没有办法干净的合并他们。在合并的时候就会产生冲突。

如:

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

执行git status

$ 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:   1.txt

no changes added to commit (use "git add" and/or "git commit -a")

冲突的文件部分显示:

<<<<<<< HEAD
master分支:1.txt第二次修改
=======
test分支:1.text修改

>>>>>>> test

解决冲突:对于上述冲突,你可以选择保留=======上面的部分,也可以是下面的部分,或者将<<<<<<< HEAD,=======,>>>>>>> test删除,手动合并。


删除分支

git branch -d [branch_name]

查看每个分支最后一次提交

git branch -v

查看那些分支合并到master分支

git branch --merged

查看那些分支未合并到master分支

git branch --no-merged

如果分支没有合并到master分支,尝试使用git branch -d命令删除会失败

$ git branch -d zhang
error: The branch 'zhang' is not fully merged.
If you are sure you want to delete it, run 'git branch -D zhang'.

当然,如果你真的想删除没有合并到master的分支,可以使用-D选项强制删除。

$ git branch -D zhang
Deleted branch zhang (was 0618526).

分支开发工作流

长期分支:

短期分支(特性分支):用来实现单一特性或其相关工作。

远程分支:


变基

在git中整合来自不同的修改主要有2中方法,mergerebase

分叉提交历史的合并的2中方法:

分叉提交历史合并之前:

image

  • merge:将2个分叉的分支,进行merge合并。

当前分支切换到master分支,执行

git merge experiment

如图:

image

  • rebase:通过提取补丁的形式,在C3的基础上在做一次。在Git中,这种操作叫做变基。

执行命令:

git checkout experiment
git rebase master

效果如图:

image

进行2个分支合并(快进方式):

git checkout master

git merge experiment

最终效果如图:

image


变基例子:

你创建了一个特性分支server,为服务端添加了一些功能,提交了C3C4。然后从C3上创建了特性分支 client,为客户端添加了一些功能,提交了C8C9。 最后,你回到server分支,又提交了C10

如图:

image

现在希望将client中的修改合并到主分支并发布,但暂时不想合并server中的修改,这是可以使用git rebase命令的--onto选项,选中在client分支里但不在server分支里的修改,将它们在master分支上重放。

  • client分支的修改变基到master分支上

执行下面命令:

git rebase --onto master server client

以上命令的意思是:取出client分支,找出处于client分支和server分支的共同祖先之后修改,然后把它们在master分支重放一遍。

image

  • 合并clientmaster分支(快进合并)
git checkout master

git merge client

image

  • server分支的修改变基到master分支上
git rebase --onto master server

image

  • server分支合并到master分支上
git checkout master

git merge server
  • 删除server分支和client分支
git branch -d client
git branch -d server

最终提交历史会变成:下图所示

image


变基的风险

不要对你的仓库外有副本的分支执行变基。

Git Book中文版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值