Git学习笔记5 merge冲突时二选一
2012-07-31 21:40
281 查看
常常有这样一种情况,程序员甲在Git branch了一个项目,然后花了1个月在 branch 中开发了几个功能,解决了一些bug,最后一步必然是把这个branch merge回master,然后解决冲突,再进行交给QA前的最后调试。解决冲突是个很痛苦的过程,如果高效解决 merge conflict 是所有版本控制系统花大力气的地方之一,这里就不赘述,只介绍如何在merge 冲突时使用 Git 命令简单地在发生冲突的两个文件版本中进行二选一。
假设原来有文件A,程序员甲把A进行了完全的重写,而甲在自己的branch工作的同时,他的同事程序员乙则对A进行了一个优化。这样,当甲想要merge的时候,A文件就有很多的冲突,可能多达几百行。
$ git merge master
Auto-merged xxx/A.java
CONFLICT (content) : Merge conflict in xxx/A.java
Automatic merge failed; fix conflicts and then commit the result.
这时候两个程序员达成一致,最后应该完全采用甲的版本,因为乙只是在原基础上优化,而甲进行了全方面的重写。在这种情况下,git checkout 命令的 - -theirs 和 - -ours 就派上用场了。前者表示保留甲 想要merge的版本,后者表示保留master branch中的版本,即乙的版本。
$ git checkout - -ours xxx/A.java // 抛弃甲的版本,保留乙的
$ git checkout - -theirs xxx/A.java // 抛弃乙的版本,完全采用甲的
这两个参数只适用于 Git 1.6.1及更新的版本。
在1.6.1 以前版本中,虽然没有这两个参数,但也有办法
1、实现 - - theirs
$ git reset - - xxx/A.java
$ git checkout MERGE_HEAD - - xxx/A.java
2、实现 - - ours
$ git reset - - xxx/A.java
$ git checkout ORIG_HEAD - - xxx/A.java
假设原来有文件A,程序员甲把A进行了完全的重写,而甲在自己的branch工作的同时,他的同事程序员乙则对A进行了一个优化。这样,当甲想要merge的时候,A文件就有很多的冲突,可能多达几百行。
$ git merge master
Auto-merged xxx/A.java
CONFLICT (content) : Merge conflict in xxx/A.java
Automatic merge failed; fix conflicts and then commit the result.
这时候两个程序员达成一致,最后应该完全采用甲的版本,因为乙只是在原基础上优化,而甲进行了全方面的重写。在这种情况下,git checkout 命令的 - -theirs 和 - -ours 就派上用场了。前者表示保留甲 想要merge的版本,后者表示保留master branch中的版本,即乙的版本。
$ git checkout - -ours xxx/A.java // 抛弃甲的版本,保留乙的
$ git checkout - -theirs xxx/A.java // 抛弃乙的版本,完全采用甲的
这两个参数只适用于 Git 1.6.1及更新的版本。
在1.6.1 以前版本中,虽然没有这两个参数,但也有办法
1、实现 - - theirs
$ git reset - - xxx/A.java
$ git checkout MERGE_HEAD - - xxx/A.java
2、实现 - - ours
$ git reset - - xxx/A.java
$ git checkout ORIG_HEAD - - xxx/A.java
相关文章推荐
- 【Git学习笔记】Git冲突:commit your changes or stash them before you can merge.
- 【Git学习笔记】merge的时候有冲突怎么办?
- Git 学习笔记--Git下的冲突解决
- 【Git/Github学习笔记】Git常用命令(代码冲突)
- 【Git/Github学习笔记】Git常用命令(代码冲突二)
- 【Git学习笔记】强行删除还没有merge的分支
- 【Git学习笔记】用git pull取回远程仓库某个分支的更新,再与本地的指定分支自动merge
- git的学习笔记(冲突解决)
- git学习笔记整理-12-合并冲突解决
- 【Git学习笔记】用git pull取回远程仓库某个分支的更新,再与本地的指定分支自动merge【转】
- git常用命令-Git学习笔记
- 【Git学习笔记】git fetch取回远程库的更新到本地仓库中
- Git 学习笔记
- Git学习笔记
- git 学习笔记(1)
- Git学习笔记(8)——标签管理
- git学习笔记整理
- Git 学习笔记(W,I,P)
- 学习笔记——jenkins+gradle+git配置
- Git—学习笔记1