LoginSignup
21
23

More than 5 years have passed since last update.

git の merge, rebase, revert で衝突した際の ours, theirs はどんな状態になるか

Posted at

はじめに

  • 他のブランチを merge しようとしてコンフリクトした時、他のブランチを rebase しようとしてコンフリクトした時、他のブランチの merge を revert しようとしてコンフリクトした時、それぞれ git checkout --oursgit checkout --theirs した際にファイルがどのブランチの状態になるかを確認した。

先に結論

  • 他のブランチを merge しようとしてコンフリクトした時
    • ours: 現在のブランチの状態になる
    • theirs: merge しようとしているブランチの状態になる
  • 他のブランチを rebase しようとしてコンフリクトした時
    • ours: rebase しようとしているブランチの状態になる
    • theirs: 現在のブランチの状態になる
  • 他のブランチの merge を revert しようとしてコンフリクトした時
    • ours: merge 後に変更した状態になる
    • theirs: merge 前の状態になる

準備

mkdir remote
cd remote
git init --bare myrepo.git
cd ../
git clone /Users/dchiba/Project/git_test/remote/myrepo.git/ local1
git clone /Users/dchiba/Project/git_test/remote/myrepo.git/ local2
cd local1
vi file1
git add .
git commit -m "add file1"
git push origin master
cd ../local2
git pull origin master
git checkout -b br1

merge の検証

master と br1 ブランチで file1 を変更

変更前の file1

aaa
bbb
ccc
ddd
eee

master で変更した file1

  • 1 行目を削除
bbb
ccc
ddd
eee

br1 ブランチで変更した file1

  • 1 行目を変更
a1a
bbb
ccc
ddd
eee

master で br1 ブランチを merge する

merge の実行

git fetch
git merge origin/br1

file1 のコンフリクト

$ git diff

diff --cc file1
index 3462243,2d53893..0000000
--- a/file1
+++ b/file1
@@@ -1,3 -1,4 +1,7 @@@
++<<<<<<< HEAD
++=======
+ a1a
++>>>>>>> origin/br1
  bbb
  ccc
  ddd

master ブランチで git checkout --ours file1

  • master ブランチの file1 になる
bbb
ccc
ddd
eee

master ブランチで git checkout --theirs file1

  • br1 ブランチの file1 になる
a1a
bbb
ccc
ddd
eee

rebase の検証

file1 を変更

  • merge の場合と同様に file1 を変更

br1 ブランチで master をリベースする

git pull --rebase origin master

file1 の diff

$ git diff

diff --cc file1
index 3462243,2d53893..0000000
--- a/file1
+++ b/file1
@@@ -1,3 -1,4 +1,7 @@@
++<<<<<<< 428e75c53eebe68d1bda63a5a032adbf9b784d62
++=======
+ a1a
++>>>>>>> update file1
  bbb
  ccc
  ddd

br1 ブランチで git checkout --ours file1

  • master ブランチの file1 になる
bbb
ccc
ddd
eee

br1 ブランチで git checkout --theirs file1

  • br1 ブランチの file1 になる
a1a
bbb
ccc
ddd
eee

revert の検証

br1 ブランチを master に merge

git merge origin/br1

file1 の状態

merge 前の file1

bbb
ccc
ddd
eee

merge した直後の file1

  • br1 の変更を受け入れた
a1a
bbb
ccc
ddd
eee

merge 後に master で file1 を変更する

a2a
bbb
ccc
ddd
eee

master で br1 の merge を revert する

revert 実行

git revert -m 1 b2a72be909fa938ef4dde72d0f211452c59412b1

file1 の diff

  • merge 前の master と revert 後のもので conflict している
$ git diff

diff --cc file1
index c350386,3462243..0000000
--- a/file1
+++ b/file1
@@@ -1,4 -1,3 +1,7 @@@
++<<<<<<< HEAD
 +a2a
++=======
++>>>>>>> parent of b2a72be... Merge remote-tracking branch 'origin/br1'
  bbb
  ccc
  ddd

master で git checkout --ours file1

  • revert 後の変更を受け入れる
a2a
bbb
ccc
ddd
eee

master で git checkout --theirs file1

  • revert 前の状態を受け入れる
bbb
ccc
ddd
eee
21
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
23