【Git基础】在git merge和git rebase中,当出现冲突时,HEAD分支的一侧将会反转
首先
这是关于Git的merge和rebase基本的讨论。
样本Git树和代码
Git 树的前提条件
* <176d8be> (master) hello master
| * <f7edd2a> (HEAD -> feature) print feature
|/
* <5e9878f> first commit
从最初的提交开始,主分支和特性分支分叉了。
def main():
# main prints Hello feature
print("Hello feature")
if __name__ == "__main__":
main()
def main():
# main prints Hello master
print("Hello master")
if __name__ == "__main__":
main()
冲突发生
以HEAD作为feature分支,合并master分支,查看master分支的冲突状态;以HEAD作为feature分支,将master分支变基,查看冲突状态。
合并git
使用git merge master时,主分支成为挑战者。
$ git checkout feature
$ git merge master

目前的更改一直是特性。
合并冲突解决后的Git树
* <07ad829> (HEAD -> feature) merge master into feature
|\
| * <176d8be> (master) hello master
* | <f7edd2a> print feature
|/
* <5e9878f> first commit
在合并过程中,现有的提交不会消失(不会被破坏)。
重新基于git
只要取一个选项,请将以下内容以中国母语进行改写:
如果使用git rebase master,则feature将成为挑战者。
$ git checkout feature
$ git rebase master

在rebase过程中,master将成为HEAD,就像屏幕截图中的情况一样。
解决rebase冲突之后的Git树
* <37f6e7e> (HEAD -> feature) print feature
* <176d8be> (master) hello master
* <5e9878f> first commit
在rebase中,我们创建了一个新的提交,旧的提交(f7edd2a)将消失,并直接放入master分支。
当rebase完成后,HEAD将回到feature分支。
最后
-
- ちなみに英語では現在の変更(HEAD)は ours 、入力側の変更(チャレンジャー)は theirs という
- コンフリクト解消は本記事のスクショ用にも使ったVisual Studio Codeが便利