web-dev-qa-db-ja.com

Gitの変更を破棄できないようです

コマンドラインから次を確認した後:

# On branch RB_3.0.10
# 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:   index.htm

次のコマンドを入力して、変更を破棄しようとしています。

git checkout -- index.htm

しかし、git statusを再実行すると、まったく同じように見えます。チェックアウトが機能していないようです。私は何か間違っていますか? windows/cygwinでGIT 1.6.1.2を使用しています。

# On branch RB_3.0.10
# 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:   index.htm
113
gemini929

これはしばらくの間私を悩ませてきました。私がチェックアウトするほとんどすべてのレポには、破棄できない変更がありました。簡単に言えば、上記のすべてを試しましたが、何も機能しませんでした。これは私が物事を通常に戻すためにしたことです(Mac上):

Completely remove the autocrlf & safecrlf settings from ~/.gitconfig
Completely remove the autocrlf & safecrlf settings from your repo's local config ./.git/config
git rm --cached -r .
git reset --hard
36
Frank Martin

git diffはファイルにどのような変更を示しますか? Windowsでは、このような問題を引き起こす行末の問題を見てきました。その場合は、git config core.autocrlfおよびgit config core.safecrlfの設定を確認してください。 これらの設定に関するドキュメントはこちら があります。

Subversionとの統合にgit svnを使用している場合、autocrlfがオフになっていることを確認してください。私が知ることができるのは、この構成では壊れているだけであり、変更を元に戻すためにcheckoutを実行すると、ほとんどのツールはファイルが変更されたと判断します。

git checkoutを実行し、git statusがファイルがまだ変更されていることを示し、git diffがファイルのすべての行でファイルが変更されていることを示す問題がある場合、これはあなたが見ている問題。

core.autocrlf

Trueの場合、gitがテキストファイルの行末のCRLFをLFに変換し、ファイルシステムから読み取るときは逆に変換します。変数は入力に設定できます。この場合、ファイルシステムからの読み取り中にのみ変換が行われますが、ファイルはLFで終了します。現在、どのパスが「テキスト」と見なされるか(つまりautocrlfメカニズム)は、純粋に内容に基づいて決定されます。

core.safecrlf

Trueの場合、core.autocrlfによって制御されるCRLFの変換が可逆的である場合、gitチェックを行います。 Gitは、コマンドが作業ツリー内のファイルを直接または間接的に変更するかどうかを検証します。たとえば、ファイルをコミットしてから同じファイルをチェックアウトすると、作業ツリーに元のファイルが生成されます。これがcore.autocrlfの現在の設定に当てはまらない場合、gitはファイルを拒否します。変数は「警告」に設定できます。この場合、gitは不可逆的な変換についてのみ警告しますが、操作は続行します。 ...

35

これが私の経験です。.git/configで次の変数を設定します。

[core]
    autocrlf = false
    safecrlf = false
    eol = crlf

次に$ git checkout HEAD .を実行すると動作します。しかし、$ git checkout -- .ではありません、奇妙です!

* gitバージョン1.9.3

35
Nianliang

-fを渡す必要があると思います

マニュアルページ(man git-checkout、GIT-CHECKOUT(1))から:

-f、-force
インデックスまたは作業ツリーがHEADと異なる場合でも続行します。
これはローカルの変更を破棄するために使用されます

たとえば、現在のブランチでの変更を破棄し、別のブランチに切り替えます。

git checkout -f master
15
hasen

@ 1800-informationが示唆するように、行末かもしれませんが、別の可能性は、違い(チェックアウトコマンドでこれらのファイルを元に戻すことを妨げる)がファイルモードの1つであることです。これが私に起こったことです。 gitの私のバージョンでは、これを使用してこれを見つけることができます

git diff index.htm

また、ファイルモードの変更が表示されます。ただし、-fオプションを使用しても、チェックアウトを使用して元に戻すことはできません。そのために使用

git config core.filemode false

または、テキストエディターでgit .configを変更して変更します。

[コア]

filemode = false

これを行った後、使用できます

git reset HEAD index.htm

ファイルが消えます。

(これは gitでモードの変更を無視する(chmod)を行うにはどうすればよいですか? および pdating-file-permissions-only-in-git への回答から得られました。

10
Eyal

OSXまたはWindowsを使用していますか?その場合、問題はおそらく、大文字と小文字が異なる同じ名前の2つのファイルを持つことです。例えば。 index.htmおよびIndex.htm

WindowsおよびデフォルトのOSXでは、大文字と小文字を区別しないgitと競合する大文字と小文字を区別しないファイルシステムを使用します。

4
Fil

私はこの問題を抱えていて、上記のすべてを試した後、何も機能しませんでした。

私のために働いたのは、ファイルがあったディレクトリを削除してからgit statusそして、そのディレクトリ内のすべてのファイルが削除済みとしてマークされていることを確認します。その後、私は単にgit checkout -fそしてすべてが正常に戻った。

2
Eldar

私はAndroid StudiolibGDXプロジェクトに取り組んでいて、行ったすべての変更を破棄したかったのですが、何も機能していませんでした。私が思いついた解決策はすべての変更をコミットすることでした新しいブランチに

git checkout -b TRASH
git add .
git commit -m "discarded changes"
git checkout master

必要に応じて、TRASHブランチを削除できます。

1
Waqleh

Windowsで権限の問題があり、icacls containingFolder /reset /t /l /cをクリックし、フォルダをダブルクリックして、アクセス許可を元に戻します。

0
Noumenon

これは古い質問ですが、私にはまだ関係がありました。私はオフィスを尋ねるまで答えを見つけられず、サブモジュールに問題があることを発見しました。それらが更新され、あなた自身のリポジトリがそれらの変更を反映しないとき、それは違いがあるように見えます、頭をリセットすることは助けになりません。この場合、次を実行します。

git status update

それはず物事を修正するのを助ける(この特定の場合)

0

同様の問題がありました。存在しないか、変更されたファイルを破棄することはできません。私は職場でVisual Studioを使用していますが、これはアプリの実行中にブランチを切り替えるときに発生することがわかりました。

git checkoutと破棄しようとしても役に立ちませんでした。うまくいかないか、許可されていないことを教えてくれます。

働いた解決策:

  1. セーフモードに移動します
  2. ファイルの破棄

再起動は苦痛ですが、これは100のことを試すよりも速く働きました。

0
Gene Parcellano

簡単な解決策があります。これが発生した場合(通常、予期しないウィンドウのシャットダウンまたはメモリダンプから)、変更を破棄したり、ブランチ間を切り替えたりすることはできません(Gitは十分なアクセス許可がないと言います)。 Windows環境show all hidden files and folders内のフォルダーオプションから。 GITディレクトリに移動し(.gitで始まる必要があります)、"index.lock"ファイルを削除します。その後、Gitで何でもやりたいことができます。

0
Mahib

私もやや似たような問題に直面し、次の手順が助けてくれました

git commit -am 'temp commit'
git pull Origin master
git reset head~1
git reset head --hard

他の人にも役立つことを願っています。

0
Atin Agarwal

私の場合、ディレクトリに関連する変更を破棄できませんでした。例えばgit diffを実行すると、次のように表示されます:-Subproject commit fdcccccccccccccccccccccccccccccccccccccc +Subproject commit f1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

だから私はそのディレクトリを呼び出し、そこでgitステータスを実行しました。それはHEAD切り離された状態でした。それから私はgit checkout master そこで。それは私にとって正しいことです。しかし、これはここで求められている正確なシナリオには役立ちません。

0
Sheetal Kaul

git stashに続いてgit stash cleanいくつかを取り除きます。 .git /または〜/ .gitに自動cr/lf設定が表示されませんでした。

0
Matt H