Pull Requestをためたりなどして、マージする競合(コンフリクト)が発生すると、GitHubでは自動マージできないためこの様な表示になる。
この様なときの解決方法は、競合が発生しているため、人間が判断して取り込む必要がある。
自分のリポジトリへマージする
まず、Pull Requestを受け取ったリポジトリを最新の状態にする。
$ git clone [email protected]:hirocaster/wdpress69.git
Cloning into 'wdpress69'...
remote: Counting objects: 236, done.
remote: Compressing objects: 100% (122/122), done.
remote: Total 236 (delta 134), reused 211 (delta 111)
Receiving objects: 100% (236/236), 126.55 KiB | 77 KiB/s, done.
Resolving deltas: 100% (134/134), done.
$ cd wdpress69
$ git pull
Already up-to-date.
既にCloneしていたのであれば、Pull Requestを受けたブランチでpullだけすれば良い。
リモートリポジトリを追加
今回リポジトリを送ってきた人のリポジトリをremoteに追加する
$ git remote add kitak git://github.com/kitak/wdpress69.git
リモートリポジトリのデータを取得する。
$ git fetch kitak
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 2), reused 3 (delta 2)
Unpacking objects: 100% (3/3), done.
From git://github.com/kitak/wdpress69
* [new branch] gh-pages -> kitak/gh-pages
* [new branch] work -> kitak/work
kitak/workからPull Requestが送られてきたので、kitak/workをマージしてみる。
$ git merge kitak/work
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
見事にindex.htmlで競合(CONFLICT)が発生した。このため自動マージができなかったのである。
コンフリクトを解決する
コンフリクトをしたindex.htmlをのぞいてみる。
<<<<<<< HEAD
<p class="impression">Pull Requestを初めて使いました。git使いこなせるようになり
たい!(<a href="https://twitter.com/#!/ko2000jp">@ko2000jp</a>)</p>
<p class="impression">GitHubが分かりやすく理解できました。初めてのPull Request\
もできました!ありがとうございます。(<a href="http://twitter.com/nasneg">@nasne
g</a>)</p>
<p class="impression">敷居が高いと思っていたPull Requestを実際に体験できてよか\
ったと思います。これからGitHubをもっと活用していきたいです!ありがとうございま\
した!!(<a href="http://twitter.com/__yas">@__yas</a>)</p>
=======
<p class="impression">Pull Request, 初挑戦です. 分かりやすい記事をありがとうご\
ざいます! (<a href="https://twitter.com/#!/kitak">@kitak</a>)</p>
>>>>>>> kitak/work
この様に ======= の行を境目にして、上側が自分のリポジトリの最新版、下側がPull Requestを送ってもらったリポジトリの内容である。この部分が競合(コンフリクト)している。
今回の場合は両方の競合を採用するので、以下のように修正する。
<p class="impression">Pull Requestを初めて使いました。git使いこなせるようになり
たい!(<a href="https://twitter.com/#!/ko2000jp">@ko2000jp</a>)</p>
<p class="impression">GitHubが分かりやすく理解できました。初めてのPull Request\
もできました!ありがとうございます。(<a href="http://twitter.com/nasneg">@nasne
g</a>)</p>
<p class="impression">敷居が高いと思っていたPull Requestを実際に体験できてよか\
ったと思います。これからGitHubをもっと活用していきたいです!ありがとうございま\
した!!(<a href="http://twitter.com/__yas">@__yas</a>)</p>
<p class="impression">Pull Request, 初挑戦です. 分かりやすい記事をありがとうご\
ざいます! (<a href="https://twitter.com/#!/kitak">@kitak</a>)</p>
単純に無駄な行を削除しただけである。どちらか1つが必要な場合は片方を丸ごと削除するケースもある。
あまり難しいことを考えず、両方比較して、あるべき姿に修正してやれば良い。
競合箇所を見つけるには ===== なんかを検索して見つけるのがポイント。
$ git add index.html
$ git commit -m "Merge from kitak/work #37"
$ git push
Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 657 bytes, done.
Total 6 (delta 4), reused 0 (delta 0)
To [email protected]:hirocaster/wdpress69.git
71a6643..139e41a gh-pages -> gh-pages
こんな感じでコミットして、pushしてやれば良い。
マージされている表示に変わったことが確認できる。
紙面の都合で競合(コンフリクト)については触れられてないが、それ以外の操作については触れているので、こちらのお買い上げも検討頂きたい。どうぞよろしくお願いします。
WEB+DB PRESS編集部 |
git力をあげるにはこちらがイイかも。