注:补充一点,使用git am的时候,加上-3参数,这样conflict的时候就会出现如下的文本,方便我们解决conflict。
会产生conflict的,一般是在做git merge, git cherry-pick, git rebase这些事情的时候。
conflict的时候,编辑冲突的文件,搜索<<<<,就会找到冲突的地方,一般语法是这样的:
<<<<<<< HEAD: <filename>
......
=======
......
>>>>>>> <commit number & commit subject/branch name(which wanna be merged)>: <filename>
七个<号到七个=中间的内容,是HEAD这个branch上的内容。七个=到七个>之间的内容,是要merge的patch的内容。
1. git merge <branch which wanna be merged>
对于git merge来说,七个<号到七个=中间的内容,是local branch上的内容。七个=到七个>之间的内容,是要merge进来的branch上的内容。
2. git cherry-pick,跟git merge一样
3. git rebase
git rebase的做法很简单,就是将要rebase的第一个commit之前的那个commit checkout出来到一个"no branch"(没有名字的branch),然后从要rebase的第一个patch开始,一个一个的merge到这个"no branch"中去。完成之后,将这个"no branch"改名成你运行git rebase的时候所在的branch。
所以,在git rebase的时候, 七个<号到七个=中间的内容,是"no branch"上的内容。七个=到七个>之间的内容,是本次要rebase的那个patch的内容。七个>号后面的commit name/commit subject也证明了这一点。
解决了冲突之后,git add即可,不需要git commit,然后git rebase --continue即可。