連載目次:【連載Git目次】ほんとは簡単?SourceTreeでGitを始めよう!
前回:【連載Git 第3回】ブランチを切ってみよう
- ブランチを切る
- ブランチをマージする
- ブランチを削除する
について覚えました。
今回はマージする際に起こりうる”競合”について書いてみます。
今回はマージする際に起こりうる”競合”について書いてみます。
マージの競合
競合って?
以下の場合を考えてみます。master最新とsub最新で同じファイルに変更が加えられているとどうなるでしょうか?
実際にやってみましょう。
前回subブランチを作ったままの場合は一旦削除します。
masterブランチからsubブランチを作り直しましょう。
subとmasterが同じ場所にいることを確認します。
subをチェックアウトして変更を加えてコミット。
masterをチェックアウトして変更を加えてコミット。
わざと競合を起こすために同じファイルを編集しています。
この状態でSourceTreeを見てみると、
うまくブランチが分岐していますね。
ではmasterにsubをマージしてみましょう。
masterがチェックアウトされていることを確認して()から
subブランチをマージします。
競合メッセージがでました。
正しくコミットできるとmasterの枝が伸びるのですが、
"uncommitted changes"という状態で止まっていますね。
自動でマージ(統合)できなかったのでエラーで止まってしまいました。
!マーク()が競合を表すアイコンです。
解決するまではコミットできません。
直してみましょう。
競合内容を確認する
まずはどこで競合しているか確認してみましょう。
競合アイコン()のついているファイルをクリックすると右側に表示されます。
・"<<<<<<< HEAD"から"======="までが軸ブランチのファイル内容
・"======="から">>>>>>> sub" までが他方のブランチのファイル内容
これを見ればどこがちがって競合しているのか確認できます。
競合を直す
直す方法は3つあります。
- マージの軸になったブランチ(master)に合わせる
- マージの軸じゃない方のブランチ(sub)に合わせる
- 両方の変更を確認しながら手作業で合わせ込む
ではみてみましょう。
どちらかのブランチを正として合わせるだけなら簡単です。
競合ファイルを右クリック->競合の解決->どちらかを使って解決
”自分の変更”は軸となったブランチ(ここではmaster)
"相手の変更"は他方のブランチ(ここではsub)
簡単ですね。
もし自分で変更する場合は直接ファイルを開いて編集。
競合ファイル右クリック->競合の解決->解決済みにする
これでコミット可能な状態となるので、
再度追加->コミット
これでmasterにsubの変更が取り込まれました。
グラフィカルで見やすいですね!
その他
そもそも競合が起こらないような運用をすべきでしょうね。それでも起こっちゃうことはあるだろうし
念のためこまめにマージしておくと大変なことにならずにすむかも。
それ以外にもマージを手助けしてくれるソフトもあるだろうし探してみるといいかも。
(windowsだとwinmergeみたいなやつ)
あとは一人で運用してく分には好き勝手マージすればいいけど
チーム開発で競合しちゃった場合は勝手に直さない方がいいと思う。
勝手に直してると地獄を見そうな気がする…
まとめ
今回は競合について説明しました。- 競合とは
- 競合内容の確認
- 競合の解決
そんなとき困らないようにわざと競合を起こしてリハーサルしておきましょう。
ここまで使えればもう十分かも?
次回はリモートリポジトリを作ってバックアップとして使ってみます。
次回:【連載Git 第5回】リモートリポジトリを使ってみよう
連載目次:【連載Git目次】ほんとは簡単?SourceTreeでGitを始めよう!