LoginSignup
25
27

More than 5 years have passed since last update.

自分用 Gitコンフリクトガイド

Last updated at Posted at 2015-11-25

毎回ググっているような気がしたのでメモ。

ブランチを切ってpushしたらpullreqで自動mergeできないって言われた・・・

リモートで自動mergeできない状態

対処方法として git mergegit rebase の2つの方法がある
git 使い始めの人には git merge を進めて慣れてる人には git rebase を進める

get mergeでの解決方法

参考

リモートから最新のmasterを取得してブランチにorigin/masterをmergeする

以下手順

リモートを取得

git fetch

pushしたブランチにいることを確認

git branch

#* experiment8
#  master

リモートの内容をブランチにmergeする

このときGithub側で自動mergeできなかった内容でコンフリクトする

git merge origin/master
                                                                                                                                                     git-leaning/git/experiment8
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

差分を見ると自動mergeできないものが出てきている

git diff README.md

git-leaning/git/experiment8 !+ (merge)
diff --cc README.md
index 3a9017e,4ef9294..0000000
--- a/README.md
+++ b/README.md
@@@ -30,4 -30,4 +30,8 @@@ branch experiment
  リモートの編集1
  ブランチでの編集

++<<<<<<< HEAD
 +## ブランチでの編集
++=======
+ ## リモートの履歴を進めてみるその9
++>>>>>>> origin/master

編集してconflictを直してコミット

vim README.md
git add .
# -mオプションなどでコンフリクトのログを消さないように注意
git commit

conflictを解消した上で再度push

git push orign experiment8

これでpullreq画面を再度見ると衝突が解消されたことがわかる

conflict解消後

これで引き続き開発をすればよい

git rebase での解決方法

リモートでconflict

git rebase --continue と場合によっては git rebase --skip を使う

またrebaseの状態がよくわからなくなったら git rebase --abort をすればrebase前に戻れる。rebaseを試しにやってみて、やっぱ難しい場合は abort 後mergeをすればよい

参考

リモートから最新のmasterを取得してブランチにorigin/masterをrebaseする

以下手順

リモートを取得

git fetch

pushしたブランチにいることを確認

git branch

#* experiment8
#  master

リモートの内容をブランチにmergeする

git rebase origin/master

このときGithub側で自動mergeできなかった内容でコンフリクトする
(ここまではmergeと同じ)

編集してconflictを直してadd

vim README.md
git add .

このときに自分の編集とリモート側の内容が一致した場合(つまり自分の編集を全く反映せずにリモート側の編集を全て反映させたい場合)はgit statusが変更したってことにならない

自分の編集を全て捨てた場合

自分の編集がリモートと一致しているから何もない

git st                                                                                                                                                            git-leaning/git/experiment13  (rebase)
rebase in progress; onto 939c6d7
You are currently rebasing branch 'experiment13' on '939c6d7'.
  (all conflicts fixed: run "git rebase --continue")

この場合は git rebase --skip を使用する

git rebase --skip

自分の編集が反映される場合

自分の編集が入っているからmodfiedがある

git st                                                                                                                                                           git-leaning/git/experiment13 + (rebase)
rebase in progress; onto 939c6d7
You are currently rebasing branch 'experiment12' on 'b230439'.
  (all conflicts fixed: run "git rebase --continue")

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   README.md

この場合は git rebase --continue を使用する

git rebase --continue

pushには -f が必要なことを忘れずに

mergeと同じ感覚でpushしてもリジェクトされてしまう

git push origin experiment13                                                                                                                                              

git-leaning/git/experiment13
To git@github.com:ryurock/git-leaning.git
 ! [rejected]        experiment13 -> experiment13 (non-fast-forward)
error: failed to push some refs to 'git@github.com:ryurock/git-leaning.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

この場合は強制 push オプション -f を使用する

git push -f origin experiment13

Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 347 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@github.com:ryurock/git-leaning.git
 + 1bebf33...3df9914 experiment13 -> experiment13 (forced update)

pullreq画面を再度見ると衝突が解消されたことがわかる

push後のpullreq

これで引き続き開発を行えばよい

25
27
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
25
27