おもちゃ箱

頭の片隅に置いていて欲しい

GitでConflictを解消できるようになりました

Gitでマージすることを覚えました(masterへの反映ではない)
pushを終えたブランチにmasterを反映させてコンフリクトが発生した場合はその解消。
多分、あらかじめブランチをmasterとマージすることによってmasterからマージする時にコンフリクトが発生しなくなるのかな。その辺は良く分かってないです。

git merge


Conflictを解消する
git merge --no-ff -
  • git merge --no-ff
    • fast-forwardの関係であっても、必ずマージコミットを作るオプション
    • トピックブランチがあったという情報が残る
      • fast-forwardとは?
      • あるコミットに対してコミット履歴上で直接到達できる別のコミットをマージしようとした場合、Git は単にポインタを前に進めるだけで済ませること
      • マージ対象が分岐しているわけではない

Conflictが発生


Auto-merging sample/hoge.txt
CONFLICT (content): Merge conflict in sample/hoge.txt
Automatic merge failed; fix conflicts and then commit the result.
  • sample/hoge.txtのコンフリクトを解消しないとマージが行われない

sample/hoge.txtを開くと以下のようになっている

<<<<<<< HEAD
abc
def
=======
abc
123
>>>>>>> abcdef....
  • =======より上側がローカルリポジトリ(マージ前の状態)
  • =======より下側がリモートリポジトリ(マージしたい差分)
  • 自分の判断でどちらかを選択する。あるいは両方を組み合わせて最善の状態に編集する
  • 編集し終えたら<<<<<<<や=======も消してから保存する
  • 保存すると自動でgit addされる
git commit -a
  • コミットメッセージは自動で入力されるので終了させる
git push
  • pushしてブランチを公開したらマージ完了
  • お疲れさまでした!

今回の一連の流れ


git merge --no-ff -
git commit -a
git push

便利そうなコマンド


git log でブランチとタグも見る
git log --oneline --decorate
ある変更が含まれているブランチを見つける
git branch --contains hogehoge123(リビジョン番号)

まだ良く分かってないこと

git merge --no-ff origin/master
git merge --no-ff - 
  • origin/masterとか指定したブランチとマージできる(はず)
  • ハイフンの場合は直前に操作していたブランチをマージ(???)

参考にしたページ


【翻訳】あなたの知らないGit Tips