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中方法,merge和rebase。
分叉提交历史的合并的2中方法:
分叉提交历史合并之前:

merge:将2个分叉的分支,进行merge合并。
当前分支切换到master分支,执行
git merge experiment
如图:

rebase:通过提取补丁的形式,在C3的基础上在做一次。在Git中,这种操作叫做变基。
执行命令:
git checkout experiment
git rebase master
效果如图:

进行2个分支合并(快进方式):
git checkout master
git merge experiment
最终效果如图:

变基例子:
你创建了一个特性分支server,为服务端添加了一些功能,提交了C3和C4。然后从C3上创建了特性分支 client,为客户端添加了一些功能,提交了C8和C9。 最后,你回到server分支,又提交了C10。
如图:

现在希望将client中的修改合并到主分支并发布,但暂时不想合并server中的修改,这是可以使用git rebase命令的--onto选项,选中在client分支里但不在server分支里的修改,将它们在master分支上重放。
- 将
client分支的修改变基到master分支上
执行下面命令:
git rebase --onto master server client
以上命令的意思是:取出client分支,找出处于client分支和server分支的共同祖先之后修改,然后把它们在master分支重放一遍。

- 合并
client和master分支(快进合并)
git checkout master
git merge client

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

- 将
server分支合并到master分支上
git checkout master
git merge server
- 删除
server分支和client分支
git branch -d client
git branch -d server
最终提交历史会变成:下图所示

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

被折叠的 条评论
为什么被折叠?



