Git Book读书笔记--git分支

来源:互联网 发布:sqlserver 参考手册 编辑:程序博客网 时间:2024/06/08 07:13

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 testAuto-merging 1.txtCONFLICT (content): Merge conflict in 1.txtAutomatic merge failed; fix conflicts and then commit the result.

执行git status

$ git statusOn branch masterYou 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.txtno changes added to commit (use "git add" and/or "git commit -a")

冲突的文件部分显示:

<<<<<<< HEADmaster分支: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 zhangerror: 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 zhangDeleted branch zhang (was 0618526).

分支开发工作流

长期分支:

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

远程分支:


变基

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

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

分叉提交历史合并之前:

image

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

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

git merge experiment

如图:

image

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

执行命令:

git checkout experimentgit rebase master

效果如图:

image

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

git checkout mastergit 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 mastergit merge client

image

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

image

  • server分支合并到master分支上
git checkout mastergit merge server
  • 删除server分支和client分支
git branch -d clientgit branch -d server

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

image


变基的风险

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

Git Book中文版

0 0
原创粉丝点击