【Git基礎】git mergeとgit rebaseではコンフリクト時のHEAD側ブランチが逆
はじめに
Gitのmergeとrebaseの基本的なお話です
サンプル Git treeとコード
前提 Git tree
* <176d8be> (master) hello master
| * <f7edd2a> (HEAD -> feature) print feature
|/
* <5e9878f> first commit
初期コミットからmasterブランチとfeatureブランチが枝分かれ
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ブランチとしてmerge master
、rebase master
それぞれのコンフリクト状態を見る
git merge
git merge master
だとmasterがチャレンジャー
$ git checkout feature
$ git merge master
HEAD(現在の変更)はずっとfeature
mergeコンフリクト解消後のGit tree
* <07ad829> (HEAD -> feature) merge master into feature
|\
| * <176d8be> (master) hello master
* | <f7edd2a> print feature
|/
* <5e9878f> first commit
mergeでは既存のコミット達は消えない(破壊しない)
git rebase
git rebase master
だとfeatureがチャレンジャー
$ git checkout feature
$ git rebase master
上スクショのようにrebase中はmasterがHEADとなる
rebaseコンフリクト解消後のGit tree
* <37f6e7e> (HEAD -> feature) print feature
* <176d8be> (master) hello master
* <5e9878f> first commit
rebaseではかつてのコミット(f7edd2a
)は消えmasterにそのまま乗る新しいコミットを作る
rebaseが完了するとHEADはfeatureに戻る
おわりに
ちなみに英語では現在の変更(HEAD)は ours 、入力側の変更(チャレンジャー)は theirs という
コンフリクト解消は本記事のスクショ用にも使ったVisual Studio Codeが便利
ちなみに英語では現在の変更(HEAD)は ours 、入力側の変更(チャレンジャー)は theirs という
コンフリクト解消は本記事のスクショ用にも使ったVisual Studio Codeが便利
Author And Source
この問題について(【Git基礎】git mergeとgit rebaseではコンフリクト時のHEAD側ブランチが逆), 我々は、より多くの情報をここで見つけました https://qiita.com/momotaro98/items/64cda91e4c2d82c2fd4f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .