929

そこで、.gitignore ファイルにフォルダーを追加しました。

私がやると、git statusそれは私に教えてくれます

# On branch latest
nothing to commit (working directory clean)

ただし、ブランチを変更しようとすると、次のようになります。

My-MacBook-Pro:webapp marcamillion$ git checkout develop
error: The following untracked working tree files would be overwritten by checkout:
    public/system/images/9/thumb/red-stripe.jpg
    public/system/images/9/original/red-stripe.jpg
    public/system/images/8/thumb/red-stripe-red.jpg
    public/system/images/8/original/red-stripe-red.jpg
    public/system/images/8/original/00-louis_c.k.-chewed_up-cover-2008.jpg
    public/system/images/7/thumb/red-stripe-dark.jpg
    public/system/images/7/original/red-stripe-dark.jpg
    public/system/images/7/original/DSC07833.JPG
    public/system/images/6/thumb/red-stripe-bw.jpg
    public/system/images/6/original/website-logo.png
    public/system/images/6/original/red-stripe-bw.jpg
    public/system/images/5/thumb/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/5/original/logocompv-colored-squares-100px.png
    public/system/images/5/original/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/4/thumb/DSC_0001.JPG
    public/system/images/4/original/logo.png
    public/system/images/4/original/DSC_0001.JPG
    public/system/images/4/original/2-up.jpg
    public/system/images/3/thumb/logo2.gif
    public/system/images/3/original/logo2.gif
    public/system/images/3/original/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/3/original/11002000962.jpg
    public/system/images/2/thumb/Profile Pic.jpg
    public/system/images/2/original/Profile Pic.jpg
    public/system/images/2/original/02 Login Screen.jpg
    public/system/images/1/original/Argentina-2010-World-Cup.jpg
Please move or remove them before you can switch branches.
Aborting

これは私の .gitignore ファイルがどのように見えるかです:

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*

これらのファイルを削除せずにブランチを切り替えることができるようにするにはどうすればよいですか?

変更を加えた場合、それらのファイルに影響しますか? つまり、後でこのブランチに戻ってきた場合、最新のコミットまではすべて完璧でしょうか?

私はそれらのファイルを失いたくありません。追跡したくないだけです。

4

31 に答える 31

1135

警告: 追跡されていないファイルが削除されるため、提起された質問に対する優れた回答ではありません。

私もこのメッセージを押しました。私の場合、ファイルを保持したくなかったので、これでうまくいきました:

git 2.11 以降

git clean  -d  -f .

古いgit

git clean  -d  -f ""

git によって無視されたファイルも削除する場合は、次のコマンドを実行します。

注意してください!!! これはおそらくあなたのプロジェクトを破壊します。あなたが何をしているのかを100%知っている場合にのみ使用してください

git 2.11 以降

git clean  -d  -fx .

古いgit

git clean  -d  -fx ""

http://www.kernel.org/pub/software/scm/git/docs/git-clean.html

  • -x無視されたファイルだけでなく、git に認識されていないファイルも削除されることを意味します。

  • -d追跡されていないファイルに加えて、追跡されていないディレクトリを削除することを意味します。

  • -f強制的に実行する必要があります。

于 2011-12-02T20:38:33.940 に答える
694

警告: これにより、インデックスが作成されていないローカル ファイルが削除されます

強制するだけです:git checkout -f another-branch

于 2013-01-11T17:40:41.380 に答える
282

ファイルを無視したいようですが、すでにコミットされています。.gitignore は、既にリポジトリにあるファイルには影響しないため、.gitignore で削除する必要がありますgit rm --cached。は--cached、作業コピーに影響を与えないようにし、次にコミットしたときに削除済みとしてマークするだけです。ファイルがレポから削除された後、.gitignore はそれらが再び追加されるのを防ぎます。

しかし、.gitignore には別の問題があります。ワイルドカードを過度に使用しているため、予想よりも一致度が低くなります。代わりに、.gitignore を変更して、これを試してみましょう。

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
于 2011-02-01T01:59:22.480 に答える
174

OS X を使用している場合、ファイル名の特定の文字の大文字と小文字が変更されていることが原因である可能性があります。次の構成オプションを設定してみてください。

git config core.ignorecase true
于 2014-05-30T17:54:00.573 に答える
48

Git は、(etc という名前の) ファイルを作成したいと言っていますが、Git によって追跡されていないpublic/system/images/9/...既存のファイルがそのディレクトリに既に存在します。おそらく、他の誰かがそれらのファイルを Git リポジトリに追加したので、そのブランチに切り替えたのはこれが初めてですか?

developこれらのファイルが現在のブランチではなくブランチにあるのにはおそらく理由があります。その理由を協力者に尋ねる必要があるかもしれません。

これらのファイルを削除せずにブランチを切り替えることができるようにするにはどうすればよいですか?

どうにかしてファイルを消さないとできません。今のところ、または何かに名前publicを変更できます。my_public

後でこのブランチに戻った場合、最新のコミットまですべてが完璧でしょうか?

変更をコミットすると、Git は変更を失いません。変更をコミットしない場合、Git は実行した作業を上書きしないように非常に努力します。それが、ここでの最初のインスタンス (ブランチを切り替えようとしたとき) で Git が警告していることです。

于 2011-02-01T01:47:15.070 に答える
22

このデリケートなタスクのためのコマンドがあります (追跡されていないファイルを完全に削除する)

git clean -i

それgit pullからします。

于 2016-09-21T08:37:58.817 に答える
14

Scott Schaferの答えよりも広範囲に及ぶものを必要としない人のために、

git clean -f

おそらく動作します。実行することを強くお勧めします

git clean --dry-run

最初。このコマンドは、実行した場合に Git が削除するファイルのリストを出力し、不要git clean -fなものを不注意に削除するという苦痛を軽減するかもしれません。

の詳細については、この Stack Oveflow の回答またはドキュメントを参照してくださいgit clean

于 2018-02-14T17:29:34.967 に答える
12

残念ながら、どちらもgit rm --cachedgit clean -d -fx ""のためにそれをしませんでした。

私の解決策は、ブランチをリモートにプッシュし、新しいレポを複製してから、新しいレポでマージすることでした。レポにアクセスする他の人も同じことをしなければなりませんでした。

教訓:.gitignore最初からファイルを使用する。

于 2013-01-09T05:33:41.797 に答える
9

以前のコミットに基づいてブランチにチェックアウトするときに、同じ問題が発生しました。追跡されていないファイルが原因で、Git がチェックアウトを拒否しました。

私は解決策を見つけました。それがあなたにも役立つことを願っています。

影響を受けるディレクトリを追加し.gitignoreて発行$ git rm -r --cachedするだけでは明らかに不十分です。

以前のコミット K に基づいてブランチを作成し、いくつかのものをテストして現在のバージョンに戻すとします。次の手順で行います。

  1. 追跡されていないファイルをセットアップします。編集して、git に無視させたいファイルとディレクトリに.gitignore適用します。$ git rm -r --cachedファイル.gitignore自体も追加.gitignoreし、発行することを忘れないでください$ git rm -r --cached .gitignore。これにより、以前のコミットで git の無視動作が同じままになることが保証されます。

  2. 行った変更をコミットします。

    $ git add -A
    $ git commit
    
  3. 現在のログを保存します。そうしないと、現在のバージョンに戻るときに問題が発生する可能性があります

    $ git log > ../git.log

  4. コミット K へのハード リセット

    $ git reset --hard version_k

  5. コミット K に基づいてブランチを作成する

    $ git branch commit_k_branch

  6. そのブランチにチェックアウトします

    $ git checkout commit_k_branch

  7. あなたのことをして、それをコミットしてください

  8. 再度マスターにチェックアウトします

    $ git checkout master

  9. 現在のバージョンに再度リセットする

    $ git reset current_versionまた$ git reset ORIG_HEAD

  10. これで、HEAD にハード リセットできます

    git reset --hard HEAD

ノート!最後から 2 番目のステップをスキップしないでください (例: など$ git reset --hard ORIG_HEAD )。

また、git が不平を言ったファイルが削除されていないことも確認しました。それらをテキストファイルにコピーし、コマンドを発行しました$ for i in $(cat ../test.txt); do ls -ahl $i; done

上記のブランチに再度チェックアウトする場合は、忘れずに発行$ git statusして、不要な変更が表示されないようにしてください。

于 2012-02-05T17:58:00.617 に答える
3

私の場合git rm --cachedはうまくいきませんでした。しかし、私はそれを手に入れましたgit rebase

于 2012-06-14T13:47:27.573 に答える
3

私も同様の問題に直面しており、上記のすべての解決策を試しましたが、うまくいきませんでした

この問題は、ブランチで名前を変更したときに発生onMusicUpdateListener.javaしました。OnMusicUpdateListener.javadevelop

今は同じファイルを持ってい ましmasteronMusicUpdateListener.javadevelopOnMusicUpdateListener.java

マスターに切り替えるたびにエラーが発生しました

The following untracked working tree files would be overwritten by checkout

そしてそれaborted

これを解決するために、私は強制的にchecked out master分岐してから、名前を my に変更onMusicUpdateListener.javaOnMusicUpdateListener.javacommitted次にmergedそれをdevelopブランチに変更しました。

次に、developブランチを更新mergingして、masterすべてが正常に戻り、問題が解決しました。

于 2015-09-01T06:47:11.700 に答える
2

これは許可の問題である可能性があります。

所有権を変更し、

sudo chown -v -R usr-name:group-name folder-name
于 2015-04-24T20:10:00.367 に答える
1

ローカルでファイルの名前を変更してから を実行するとpull、そのエラー メッセージが表示されます。

于 2017-10-23T08:50:37.053 に答える
1

このコマンドは私の問題を解決しました:

git add * 
git stash
git pull
于 2021-11-09T10:00:57.077 に答える
0

私の場合、このエラーが表示されました。これは、一般的なオープン ソース CMS を使用していて、問題を引き起こしたディレクトリが CMS が書き込むアップロード ディレクトリであったためです。

つまり、持っていないが、バージョン管理からは取得できないファイルがあるということです。

ライブサイトからローカルにすべてのファイルを取得しています。これで問題が解決することを期待して、これをリポジトリにチェックインします。

于 2014-10-31T11:12:09.797 に答える
0

この問題を解決するには、 appname/gen/から.gitignoreファイルを削除します。

于 2016-01-19T09:32:02.727 に答える
0

ファイルシステムに移動してファイルを直接削除し、git checkout を続行したところ、機能しました。

この問題は何度か発生しましたが、開発者が削除、プッシュ、再追加、プッシュなどを行っていることに関連している可能性があります。

于 2017-12-13T21:27:22.097 に答える