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とか指定したブランチとマージできる(はず)
- ハイフンの場合は直前に操作していたブランチをマージ(???)