Git:ローカルの変更を元に戻すことができません(エラー:パス…マージされていません)


335

次の作業ツリーの状態があります

$ git status foo/bar.txt
# On branch master
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       deleted by us:      foo/bar.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

ファイルfoo/bar.txtがあり、再び「変更されていない状態」にしたい( 'svn revert'と同様):

$ git checkout HEAD foo/bar.txt
error: path 'foo/bar.txt' is unmerged
$ git reset HEAD foo/bar.txt
Unstaged changes after reset:
M       foo/bar.txt

今では混乱しています:

$ git status foo/bar.txt
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   foo/bar.txt
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   foo/bar.txt
#

新規変更の両方のセクションで同じファイルですか?私は何をすべきか?


7
私は、誰かがこの状況にどうやって入り込むのなぜそれが起こり、なぜ解決策が機能するのかを誰かに説明してほしいと思います。
Marcos Dione 2017

1
私は、マージの競合に陥ったリベースの後にスタッシュをポップしたときにこの状況に陥りました(スタッシュポップはマージを実行します)。変更はまだそこにありました....それらを削除するために..私はもう一度ファイルのチェックアウトを試みました..それは上記のエラーを見たときです。
Arindam Roychowdhury

回答:


554

あなたはそれを間違った方法でやった。最初にリセットし、ファイルのステージングを解除してから、チェックアウトして、ローカルの変更を元に戻します。

これを試して:

$ git reset foo/bar.txt
$ git checkout foo/bar.txt

ありがとう。魅力のように働いた!私はコミットする必要があり(-a引数ではなく、関連する変更はすでにステージングされていました)、その後、通常のようにプッシュ/プルすることができました。
Patrick

18
私にとっては次のものが必要でした:<br/> $ git reset-foo / bar.txt <br/> $ git checkout-foo / bar.txt <br/>(間にある余分な「-」に注意してください)
1

4
適切な構文は、「git reset HEAD file1 file2 ...」、次に「git checkout-file1 file2 ...」です
Thomas Decaux

1
最高投票数の回答が基本的に「間違っている」と言っているときはいつも面白いです:)
nathanchere

4
(物事は何をすべきかについて)説明偉大されているだろう...
Kissaki

51

これは私にとって完璧に機能しました:

$ git reset -- foo/bar.txt
$ git checkout foo/bar.txt

14
git checkout origin/[branch] .
git status

//末尾のドット(。)に注意してください。そして、すべてが良いでしょう


-2
git checkout foo/bar.txt

あなたはそれを試しましたか?(HEADキーワードなし)

私は通常、この方法で変更を元に戻します。


1
典型的なエラーしようとcheckoutマージの真っ只中に: $ git co path/to/file=結果=> error: path 'path/to/file' is unmerged =>そう、最初の実行:$ git reset path/to/file、その後、git checkout path/to/file動作するはずです。
マイケル2013

2
HEADを指定しないと、gitチェックアウトがインデックスからチェックアウトされます。これは、より弱い操作です(コンテンツソースはHEADではなくインデックスです)。さらに、私はそれがこのケースでまったく違いがあるとは思いません-特定の問題で質問が述べました。やっみましたか?
キサキ

-4

私は見つけるgitの隠し場所がすべての「汚い」状態の時間的な取り扱いのために非常に便利。


4
役立つと思われる場合は、この具体的なケースでどのように役立つかを説明してください。ここでそれをどのように使用しますか?
Kissaki
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.