作業コピーへのすべての変更を削除したいと思います。
_git status
を実行すると、変更されたファイルが表示されます。
これらの変更を削除することはありません。
例えば。:
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# 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: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git checkout -- Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# 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: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git checkout `git ls-files -m`
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# 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: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git reset --hard HEAD
HEAD is now at 6c857e7 boo libraries updated to 2.0.9.2 and rhino.dsl.dll updated.
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# 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: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
この動作を引き起こす可能性のある複数の問題があります。
行末の正規化
私もこの種の問題を抱えています。 crlfをlfに自動的に変換するgitになります。これは通常、単一ファイル内の行末が混在していることが原因です。ファイルはインデックス内で正規化されますが、gitが再び非正規化して作業ツリー内のファイルと比較すると、結果は異なります。
ただし、これを修正する場合は、core.autocrlfを無効にし、すべての行末をlfに変更してから、再度有効にする必要があります。または、次のようにして完全に無効にすることができます。
git config --global core.autocrlf false
core.autocrlfの代わりに、 .gitattribute
ファイルの使用を検討することもできます。この方法により、リポジトリを使用するすべてのユーザーが同じ正規化ルールを使用し、混合行末がリポジトリに入らないようにすることができます。
また、core.safecrlfを設定して、非可逆正規化が実行されるときにgitに警告するようにしたい場合に警告することも検討してください。
Git manpages これを言ってください:
CRLF変換では、データが破損する可能性がわずかにあります。 autocrlf = trueは、コミット時にCRLFをLFに、チェックアウト時にLFをCRLFに変換します。コミット前にLFとCRLFが混在するファイルは、gitで再作成できません。テキストファイルの場合、これは正しいことです。リポジトリにLFの行末のみがあるように行末を修正します。ただし、誤ってテキストとして分類されたバイナリファイルの場合、変換によってデータが破損する可能性があります。
大文字と小文字を区別しないファイルシステム
大文字と小文字を区別しないファイルシステムでは、大文字と小文字が異なる同じファイル名がリポジトリにある場合、gitは両方をチェックアウトしようとしますが、ファイルシステムでは1つだけになります。 gitが2番目のものを比較しようとすると、間違ったファイルと比較されます。
解決策は、大文字と小文字を区別しないファイルシステムに切り替えることですが、ほとんどの場合、これは実行不可能であるか、別のファイルシステムのファイルの名前を変更してコミットします。
私はWindowsでこの問題を抱えていましたが、config --global core.autocrlf false
を使用した場合の影響を調べる準備ができていませんでした。何かする必要があるだけです。今。
Gitに作業ディレクトリを完全に書き換えさせるという考えで、これはうまくいきました。
git rm --cached -r .
git reset --hard
(元の質問へのコメントで示唆されているように、rm
の前のファイルでgit reset --hard
を実行するだけでは十分ではなく、プレーンreset
でもなかったことに注意してください)
テキストオプションはどれも役に立たなかったため、人々に役立つ別のソリューション:
.gitattributes
の内容を単一行* binary
に置き換えます。これは、すべてのファイルを何も処理できないバイナリファイルとして扱うようにgitに指示します。git checkout -- <files>
でリポジトリバージョンに復元できますgit checkout -- .gitattributes
は、.gitattributes
ファイルを初期状態に復元しますこの問題を抱えている将来の人々のために:ファイルモードを変更しても同じ症状が発生する可能性があります。 git config core.filemode false
で修正されます。
これは私を夢中にさせています。特に、オンラインで見つかったソリューションがなければ解決できませんでした。ここに私がそれを解決した方法があります。これは同僚の仕事なので、ここでクレジットを取ることはできません:)
問題の原因:gitの最初のインストールでは、Windowsで自動行変換が行われませんでした。これにより、GLFWへの最初のコミットが適切な行末なしになりました。
注:これはローカルソリューションのみです。リポジトリを複製する次の人は、まだこの問題で立ち往生しています。永続的な解決策は、ここにあります: https://help.github.com/articles/dealing-with-line-endings/#re-normalizing-a-repository 。
セットアップ:glfwプロジェクトを使用したXubuntu 12.04 Gitリポジトリ
問題:glfwファイルをリセットできません。私が試したものに関係なく、それらは常に修正済みとして表示されます。
解決済み:
edit .gitattributes
Comment out the line: # text=auto
Save the file
restore .gitattributes: git checkout .gitattributes
同じ問題の.batファイルがありました(追跡されていないファイルでそれを取り除くことはできませんでした)。 git checkout-機能しませんでした。このページの提案も機能しませんでした。私のために働いた唯一のことは、することでした:
git stash save --keep-index
そして、隠し場所を削除するには:
git stash drop
同じ問題を2回取得しました!どちらの場合も、いくつかの変更を隠してから、それらを元に戻そうとしました。変更されたファイルがたくさんあるので、変更をポップできませんでしたが、そうではありません!それらはまったく同じです。
私は今、成功せずに上記のすべてのソリューションを試したと思います。試した後
git rm --cached -r .
git reset --hard
リポジトリ内のほとんどすべてのファイルが変更されました。
ファイルを比較すると、すべての行を削除してから再度追加したと表示されます。
邪魔の種類。私は今後、隠れることを避けます。
唯一の解決策は、新しいリポジトリのクローンを作成して最初からやり直すことです。 (前回作成)
これを修正するには、リポジトリの.gitattributesファイル(* text=auto
および*.c text
を定義した)を一時的に削除するしかありませんでした。
削除後にgit status
を実行しましたが、変更はなくなりました。 .gitattributesを元に戻した後でも、それらは戻りませんでした。
やってみて
git checkout -f
これにより、現在動作しているローカルリポジトリのすべての変更がクリアされます。
ここには多くの解決策がありますが、自分で考え出す前にこれらのいくつかを試してみるべきでした。とにかくここにもう1つあります...
私たちの問題は、エンドラインの強制がなく、リポジトリにDOS/Unixが混在していたことです。さらに悪いのは、それが実際にこの位置でのオープンソースリポジトリであり、私たちが分岐したことです。 OSリポジトリの主な所有権を持つすべてのエンドラインをUnixに変更するという決定が下され、行末を強制する.gitattributes
を含むコミットが行われました。
残念ながら、これにより、DOS-2-Unixが実行される前からコードのマージが行われると、ファイルは永久に変更済みとしてマークされ、元に戻せなくなるという問題が発生するようです。
このための私の研究中に私は出くわしました- https://help.github.com/articles/dealing-with-line-endings/ -これに直面した場合もう一度問題を解決するために、まずこれを試してみます
ここに私がやったことがあります:
この問題があることに気づく前に、最初にマージを実行し、それを中止しなければなりませんでした-git reset --hard HEAD
( マージの競合が発生しました。どうすればマージを中止できますか? )
問題のファイルをVIMで開き、Unix(:set ff=unix
)に変更しました。もちろんdos2unix
のようなツールを使用できます
関与する
master
をマージしました(マスターにDOS-2-Unixの変更があります)
git checkout old-code-branch; git merge master
競合を解決し、ファイルは再びDOSになったため、VIMで:set ff=unix
する必要がありました。 (注: https://github.com/itchyny/lightline.vim をインストールしたので、VIM statuslineのファイル形式を確認できました)
この問題は、リポジトリへの貢献者がLinuxマシンで動作する場合、またはCygwinとファイルのアクセス許可を持つウィンドウが変更された場合にも発生する可能性があります。 Gitは755と644のみを知っています。
この問題の例とその確認方法:
git diff styleguide/filename
diff --git a/filename b/filename
old mode 100644
new mode 100755
これを回避するには、次を使用してgitを正しくセットアップする必要があります。
git config --global core.filemode false
一貫した行末を持つことは良いことです。たとえば、些細ではありますが、不要なマージはトリガーされません。 Visual Studioが行末が混在したファイルを作成するのを見てきました。
また、bash(Linux)のような一部のプログラムでは、.shファイルをLFで終了する必要があります。
これを確実に行うには、gitattributesを使用できます。 autcrlfの価値に関係なく、リポジトリレベルで機能します。
たとえば、次のような.gitattributesを使用できます。* text = auto
場合によっては、ファイルの種類/拡張子ごとに詳細を指定することもできます。
次に、autocrlfはWindowsプログラムの行末をローカルで変換できます。
混合C#/ C++/Java/Ruby/R、Windows/Linuxプロジェクトでは、これはうまく機能しています。今のところ問題はありません。
私も同じ症状がありましたが、原因は異なります。
私はできませんでした:
git checkout app.js //did nothing
git rm app.js //did nothing
rm -rf app.js //did nothing
git rm --cached app.js
でも削除済みとして署名され、追跡されていないファイルにはapp.jsが表示されます。しかし、rm -rf app.js
とpeform git status
をもう一度試しても、ファイルは「追跡されていない」状態のままです。
同僚と数回試した結果、Gruntが原因であることがわかりました。
Grunt
がオンになっており、app.jsが他のいくつかのjsファイルから生成されているため、jsファイル(このapp.jsも含む)を使用した各操作の後、app.jsが再度作成されることがわかりました。
すべての変更をコミットしてから、コミットして元に戻しました。これは私のために働いた
git add。
git commit -m "ランダムなコミット"
git reset --hard HEAD〜1
私にとって問題は、コマンドを実行するときにVisual Studioが開かれたことでした
git checkout <file>
Visual Studioを閉じた後、コマンドは機能し、スタックから作業を最終的に適用できました。したがって、SourceTree、SmartGit、NotePad、NotePad ++などのエディターなど、コードを変更する可能性のあるすべてのアプリケーションを確認してください。
リポジトリのクローンを作成し、保留中の変更を即座に確認した場合、リポジトリは一貫性のない状態です。 * text=auto
ファイルから.gitattributes
をコメントアウトしないでください。これは、リポジトリの所有者がすべてのファイルをLFの行末で一貫して保存することを望んでいるため、特にそこに置かれました。
HankCaが述べているように、 https://help.github.com/articles/dealing-with-line-endings/ の指示に従うことは、問題を解決する方法です。簡単なボタン:
git clone git@Host:repo-name
git checkout -b normalize-line-endings
git add .
git commit -m "Normalize line endings"
git Push
git Push -u Origin normalize-line-endings
次に、ブランチをリポジトリの所有者にマージ(またはプルリクエスト)します。
私が遭遇した問題は、windowsはファイル名の大文字小文字を気にしないが、gitは気にするということです。そのため、gitはファイルの小文字と大文字のバージョンを保存しましたが、チェックアウトできるのは1つだけでした。
このページの他に何も機能しませんでした。これは最終的に私のために働いた。追跡されていない、またはコミットされたファイルを表示しません。
git add -A
git reset --hard
当社でも同様の状況に直面しました。提案された方法はどれも私たちを助けませんでした。研究の結果、問題が明らかになりました。 問題は、Gitには2つのファイルがあり、その名前はシンボルの登録のみが異なることでした。Unixシステムはそれらを2つの異なるファイルと見なしていましたが、Windowsは狂っていました。問題を解決するには、サーバー上のファイルの1つを削除しました。その後、Windowsのローカルリポジトリで、次のいくつかのコマンドを(異なる順序で)支援しました。
git reset --hard
git pull Origin
git merge
私はこの問題に何度か遭遇しました。現在、雇用主から提供されたWindows 10マシンで開発しています。今日、この特定のgit動作は、「開発」ブランチから新しいブランチを作成したことが原因です。何らかの理由で、「develop」ブランチに切り替えた後、いくつかのランダムなファイルが持続し、「git status」で「modified」として表示されていました。
また、その時点で別のブランチをチェックアウトできなかったため、「開発」ブランチで立ち往生しました。
これは私がやったことです:
$ git log
今日私が「develop」から作成した新しいブランチは、最初の「commit」メッセージに表示され、最後に「HEAD->開発、Origin/develop、Origin/HEAD、The-branch -i-created-earlier-today "。
本当に必要なかったので、削除しました。
$ git branch -d The-branch-i-created-earlier-today
変更されたファイルはまだ表示されていたので、私はしました:
$ git stash
これは私の問題を解決しました:
$ git status
On branch develop
Your branch is up to date with 'Origin/develop'.
nothing to commit, working tree clean
もちろん$ git stash list
には隠された変更が表示されます。また、隠し場所はほとんどなく、必要ありませんでしたので、$ git stash clear
を実行してすべての隠し場所を削除しました。
NOTE:私が前に誰かがここで提案したことをやろうとしなかった:
$ git rm --cached -r .
$ git reset --hard
これも同様に機能した可能性があります。次回この問題に遭遇したときに必ず試してみます。
私は.git/configを編集して追加しました:
[branch "name_branch"]
remote = Origin
merge = refs/heads/name_branch
次に.git/refs/heads/name_branchに行き、最後のcommitenter code here
のidを配置します
私はこのように解決しました:
それは私のために働いたものです。