git pull`を使用したところ、マージコンフリクトが発生しました。
unmerged: _widget.html.erb
You are in the middle of a conflicted merge.
他のバージョンのファイルが良くて、私のバージョンが悪いことはわかっているので、私の変更はすべて放棄されるべきです。どうすればいいですか?
あなたの pull
は失敗したので、HEAD
(HEAD^
ではなく) があなたのブランチの最後の「有効な」コミットになります。
git reset --hard HEAD
もうひとつは、相手の変更が自分の変更を上書きするようにすることです。
git の古いバージョンでは、"theirs" というマージ戦略を使うことができました。
git pull --strategy=theirs remote_branch
しかし、これは削除されました。これについては 浜野純夫氏のメッセージ (Git のメンテナ) が説明しています。 リンク先]1にあるように、代わりに次のようにします。
git fetch origin
git reset --hard origin
必要なのは git reset
だと思います。
Subversionでは、revertは(コミットされていない)変更を破棄して、ファイルをリポジトリから現在のバージョンに戻すのに対し、git revert
はコミットを「元に戻す」という意味で、svn revert
とは全く異なることに注意してください。
git resetは
svn revert` と同等の動作、つまり不要な変更を破棄します。
このケースでは、実際にはマージを中止するのではなく、特定の方法でコンフリクトを解決したいと考えています。
リセットして別の方法でマージを実行する必要も特にありません。コンフリクトは git によって正しくハイライトされており、相手側の変更を受け入れる必要があるのはこのファイルだけです。
コンフリクトしているマージされていないファイルに対して、git はそのファイルの共通のベースバージョン、ローカルバージョン、リモートバージョンをインデックスで公開します。(これは、git mergetool
による 3 者間 diff ツールで使用するために、これらのバージョンが読み込まれる場所です)。これらを見るには git show
を使います。
# common base:
git show :1:_widget.html.erb
# 'ours'
git show :2:_widget.html.erb
# 'theirs'
git show :3:_widget.html.erb
リモートバージョンをそのまま使用するというコンフリクトを解決する最も簡単な方法は
git show :3:_widget.html.erb >_widget.html.erb
git add _widget.html.erb
あるいは、git >= 1.6.1 の場合。
git checkout --theirs _widget.html.erb