假设原来有文件A,程序员甲把A进行了完全的重写,而甲在自己的branch工作的同时,他的同事程序员乙则对A进行了一个优化。这样,当甲想要merge的时候,A文件就有很多的冲突,可能多达几百行。
这时候两个程序员达成一致,最后应该完全采用甲的版本,因为乙只是在原基础上优化,而甲进行了全方面的重写。在这种情况下,git checkout 命令的 - -theirs 和 - -ours 就派上用场了。前者表示保留甲 想要merge的版本,后者表示保留master branch中的版本,即乙的版本。
$ git checkout - -ours xxx/A.java // 抛弃甲的版本,保留乙的
$ git checkout - -theirs xxx/A.java // 抛弃乙的版本,完全采用甲的
从上面的例子看出git checkout --theirs和git checkout --ours的作用与明面上的意思相反,theirs表示自己,ours表示别人
原因:git是这么处理这件事情的,先把甲分支撤销掉,把它作为patch放进.git/rebase
目录,然后把master
分支更新为乙分支,然后再把甲分支这个patch打上来。