【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
スクリーンショット 2018-01-15 22.16.07.png

目前的更改一直是特性。

合并冲突解决后的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
スクリーンショット 2018-01-15 22.15.35.png

在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が便利
bannerAds