はじめに
- 他のブランチを merge しようとしてコンフリクトした時、他のブランチを rebase しようとしてコンフリクトした時、他のブランチの merge を revert しようとしてコンフリクトした時、それぞれ 
git checkout --oursとgit 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