Git合并

一般情况下,我们使用merge命令即可合并两个branch,比如现在有两个Branch,一个是branchA,一个是branchB。现在我正处在BranchA,需要合并BranchB,只需要执行

git branch merge BranchB

解决冲突


我们使用代码管理工具的时候,总不可避免的会遇到代码冲突,有关代码冲突的相关介绍可以这里了解冲突时的分支合并,对于更复杂的冲突合并,我们可以借助Source Tree进行解决。
当我们遇到下面信息的时候,就需要手动进行冲突的解决。

CONFLICT (content): Merge conflict in hello.rb
Automatic merge failed; fix conflicts and then commit the result.

中断一次合并

当然遇到了冲突,我们也可以选择中断这次合并,通过下面命令,在工作目录中有未储藏、未提交的修改时它不能完美处理,除此之外它都工作地很好。

git merge --abort

如果因为某些原因你发现自己处在一个混乱的状态中然后只是想要重来一次,可以执行

git reset --hard HEAD

回到之前的状态或其他你想要恢复的状态。 请牢记这会将清除工作目录中的所有内容,所以确保你不需要保存这里的任意改动。

如果你想要在最终提交前看一下我们这边与另一边之间实际的修改,你可以使用 git diff 来比较将要提交作为合并结果的工作目录与其中任意一个阶段的文件差异。具体使用方法可以参考git-diff

同时我们可以使用下面指令来来清理我们为手动合并而创建但不再有用的额外文件。

git clean -f

撤销合并


我们已经知道如何创建一个合并提交,但有时出错是在所难免的。
我们有两种方法来解决这个问题,这取决于你想要的结果是什么
方法1
reset –hard
这个方法的缺点是它会重写历史,在一个共享的仓库中这会造成问题的。 用简单的话说就是如果其他人已经有你将要重写的提交,你应当避免使用 reset。 如果有任何其他提交在合并之后创建了,那么这个方法也会无效;移动引用实际上会丢失那些改动。
方法2 还原提交
$ git revert -m 1 HEAD

合并指定分支单个文件


# git checkout --patch branchB xxxx

合并指定commit


  • cherry pick 合并单个 commit
    git checkout master
    git cherry-pick xxxxx

欢迎留言

avatar
  Subscribe  
Notify of