Git 入門 実践編 2
<htmlday> in Tokushima
Presented by か (@ka_)
コンフリクトを解消する
●
コンフリクト ( 競合 )
– マージを行うと付いて回る問題
– 同じ場所がそれぞれのブランチで編集されている
– 手動で直すのは非常に難しい
実験準備
●
リポジトリを作成する
●
“sample.txt” を作る
●
“a” という行のみ追加してコミット
競合を作り出す
●
“b-0” というブランチを作成
●
チェックアウトはしない
●
“b, c, d, f” と行を追加してコミット
●
“b-0” にここで改めてチェックアウト
●
“b, c, e, g” と行を追加してコミット
●
“master” に再びチェックアウトする
– マージのため
競合を作り出す (Windows)
競合を作り出す (Mac)
マージすると衝突する
●
“b-0” をマージしようとする
●
正常に終了しない
– これは Git が賢いということ
●
“sample.txt” が何やら禍々しくなっている
マージ失敗 (Windows)
競合発生時のリポジトリ
(Windows)
マージ失敗 (Mac)
“sample.txt” (Windows)
“sample.txt” (Mac)
競合を解消する
●
競合の解消は人間でなければ出来ない
●
“b, c” の部分は競合していない
– やはり賢い
●
競合している部分のみ正常に修正する
– “d, e, f, g” にしたい
HEAD とは
●
“master” に今まで居た
●
“HEAD” とはどのブランチを指しているか
– テープやディスクを扱う機器の「ヘッダ」
●
それぞれのブランチ由来のモノを表示
●
競合情報は分かってしまえば怖くない
競合の解消 (Windows)
マージを成功させる
●
競合を解消してコミットを行う
●
ログを見る
●
マージが成功している
●
“sample.txt” が正常になっている
●
Fast Forward マージにはならない
コミット (Windows)
コミット (Mac)
マージ成功 (Windows)
マージ成功 (Mac)
競合が発生する場面
●
マージ
● Revert
– 打ち消すことが出来ない場合もある
– 先の例ではそうならないようにしていた
● Rebase
どうしてこんなに難しいのか
●
手動でやるともっと難しいから

20130608 git-2