私は使用git pull
し、マージの競合がありました:
unmerged: _widget.html.erb
You are in the middle of a conflicted merge.
ファイルの別のバージョンが適切で、私のファイルが不適切であることはわかっているので、すべての変更を破棄する必要があります。これどうやってするの?
私は使用git pull
し、マージの競合がありました:
unmerged: _widget.html.erb
You are in the middle of a conflicted merge.
ファイルの別のバージョンが適切で、私のファイルが不適切であることはわかっているので、すべての変更を破棄する必要があります。これどうやってするの?
あなたpull
が失敗したので、 HEAD
(not HEAD^
) はあなたのブランチでの最後の「有効な」コミットです:
git reset --hard HEAD
あなたが望むもう一つの部分は、彼らの変更があなたの変更を上書きできるようにすることです.
古いバージョンの git では、「theirs」マージ戦略を使用できました。
git pull --strategy=theirs remote_branch
しかし、 Junio Hamano (Git メンテナー)によるこのメッセージで説明されているように、これはその後削除されました。リンクに記載されているように、代わりに次のようにします。
git fetch origin
git reset --hard origin
git のバージョンが 1.6.1 以上の場合は、git reset --merge
.
また、@Michael Johnson が言及しているように、git バージョンが 1.7.4 以上の場合は、git merge --abort
.
いつものように、マージを開始する前に、コミットされていない変更がないことを確認してください。
git merge --abort
git reset --merge
が存在する場合と同等MERGE_HEAD
です。
MERGE_HEAD
マージが進行中の場合に存在します。
また、マージ開始時のコミットされていない変更について:
マージを開始する前にコミットしたくない変更がある場合は、マージgit stash
の前と、マージをgit stash pop
終了または中止した後にコミットします。
git merge --abort
現在の競合解決プロセスを中止し、マージ前の状態の再構築を試みます。
マージの開始時にコミットされていない作業ツリーの変更が存在する場合、
git merge --abort
これらの変更を再構築できない場合があります。したがって、git merge を実行する前に、常に変更をコミットまたは隠しておくことをお勧めします。
git merge --abort
git reset --merge
が存在する場合 と同等MERGE_HEAD
です。
私はそれgit reset
が必要だと思います。
たとえば、 Subversion では、元に戻すと (コミットされていない) 変更が破棄され、ファイルがリポジトリから現在のバージョンに戻されますが、コミットは "元に戻されます"git revert
とは非常に異なることを意味することに注意してください。svn revert
git revert
git reset
つまり、不要svn revert
な変更を破棄します。
この特定のユースケースでは、マージを実際に中止するのではなく、特定の方法で競合を解決するだけです。
リセットして別の戦略でマージを実行する必要も特にありません。競合はgitによって正しく強調表示されており、反対側の変更を受け入れるための要件は、この1つのファイルに対してのみです。
競合内のマージされていないファイルの場合、gitは、インデックス内のファイルの共通ベース、ローカル、およびリモートバージョンを利用できるようにします。(これは、3方向差分ツールで使用するために読み取られる場所ですgit mergetool
。)を使用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
git reset --merge
コメントは、が のエイリアスであることを示唆していgit merge --abort
ます。aが存在git merge --abort
する場合にのみ が同等であることに注意してください。これは、merge コマンドの git ヘルプで読むことができます。git reset --merge
MERGE_HEAD
MERGE_HEAD が存在する場合、git merge --abort は git reset --merge と同等です。
マージが失敗した後、 がないMERGE_HEAD
場合、失敗したマージは で元に戻すことができますがgit reset --merge
、必ずしも を使用するとは限りませんgit merge --abort
。それらは、同じものに対する新旧の構文であるだけではありません。
個人的にはgit reset --merge
、説明したシナリオに似たシナリオや、一般的にマージの失敗に対してはるかに強力だと思います。
作業コピーの状態を保持する別の方法は次のとおりです。
git stash
git merge --abort
git stash pop
次のコミットでブランチの関係を破棄するため、Subversion でマージするのと実質的に似ているため、通常はこれに反対することをお勧めします。
Git 1.6.1.3git checkout
では、マージのどちらの側からでもチェックアウトできるようになっています。
git checkout --theirs _widget.html.erb
私は次のことがうまくいったことを発見しました(単一のファイルをマージ前の状態に戻します):
git reset *currentBranchIntoWhichYouMerged* -- *fileToBeReset*