だから私は私の.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/*
これらのファイルを削除せずにブランチを切り替えることができるようにするにはどうすればこれを機能させることができますか
変更した場合、それらのファイルにも影響がありますか?言い換えれば、後でこのブランチに戻ってきた場合、最新のコミットまではすべて問題ありません。
私はそれらのファイルを失いたくありません、私はただそれらを追跡したくありません。
ファイルを無視したいが、それらは既にコミットされているようです。 .gitignoreはすでにリポジトリにあるファイルには影響を与えないので、それらはgit rm --cached
で削除する必要があります。 --cached
は作業コピーに影響を与えないようにし、次回コミットしたときに削除済みとしてマークするだけです。ファイルがリポジトリから削除された後、.gitignoreはそれらが再び追加されるのを防ぎます。
しかし、あなたはあなたの.gitignoreに別の問題を抱えています、あなたは過度にワイルドカードを使用しています、そしてそれはあなたがそれが予想していたよりマッチするのを引き起こします。代わりに.gitignoreを変更して試してみましょう。
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
私もこのメッセージを打ちました。私の場合は、ファイルを保存したくないので、これは私にとって役に立ちました。
git clean -d -f .
git clean -d -f ""
Gitによって無視されたファイルも削除したい場合は、次のコマンドを実行してください。
git clean -d -fx .
git clean -d -fx ""
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
は無視されたファイルも削除されることを意味しますgitに未知のファイルと同様に。
-d
は、追跡されていないファイルに加えて、追跡されていないディレクトリを削除することを意味します。
強制的に実行するには-f
が必要です。
警告:これはインデックスされていないローカルファイルを削除します
ただ強制してください:git checkout -f another-branch
あなたがOS Xを使っているならば、それはファイルの名前が大文字と小文字を変える特定の文字を持っていたためかもしれません。次の設定オプションを設定してみてください。
git config core.ignorecase true
Gitは(public/system/images/9/...
などの名前の)ファイルを作成したいが、そのディレクトリにare n'tがGitによって追跡されている既存のファイルがあることを伝えています。おそらく他の誰かがそれらのファイルをGitリポジトリに追加したのでしょうか、そしてそのブランチに切り替えたのはこれが初めてですか?
おそらく、これらのファイルがdevelop
ブランチにあるが、現在のブランチにはないのには理由があります。その理由を共同編集者に尋ねる必要があるかもしれません。
これらのファイルを削除せずにブランチを切り替えることができるように、これをどのように機能させるのですか?
ファイルを何らかの形で消さずにそれを行うことはできません。現時点では、public
の名前をmy_public
または何かに変更できます。
このブランチに戻った後、最新のコミットまですべてが完璧になりますか?
変更をコミットしても、Gitはそれらを失います。変更をコミットしない場合、Gitは実際に一生懸命に試行しますnot実行した作業を上書きします。これが、Gitが最初のインスタンス(ブランチを切り替えようとしたとき)で警告していることです。
この微妙な作業のためのコマンドがあります(未追跡のファイルを永久に削除する)
git clean -i
それからgit pull
はします。
これは私のために働きました。
1. git fetch --all
2. git reset --hard Origin/{branch_name}
残念ながら、git rm --cached
もgit clean -d -fx ""
も私のためにそれをしませんでした。
私の解決策は、私のブランチをリモートにプッシュし、新しいリポジトリを複製し、それから新しいリポジトリにマージすることでした。レポにアクセスする他の人々も同じことをしなければなりませんでした。
物語の道徳的:最初から.gitignore
ファイルを使ってください。
git clean -f
おそらくうまくいくでしょう。 I 非常に 実行を提案する
git clean --dry-run
最初。このコマンドは、git clean -f
を実行した場合にGitが削除するファイルのリストを出力するので、不用意に不要なものを削除する手間が省けます。
git clean
の詳細については、 このStack Oveflowの回答 または ドキュメント を参照してください。
この問題をすぐに解決したい場合は、次のコマンドを使用できます。
git checkout -f dev
これは Windows 8 システムで、PromptコマンドのGitを使って私に起こりました。私のチームの残りの部分は _ tfs _ を使い、私はTFSと私のローカルGitリポジトリの間をプッシュ/プルするためにMicrosoftの git-tf を使います。
問題は、いくつかの ファイルの名前を変更するためだけに名前が変更されたために発生しました 。起こったように思われるのはこれでした:
git status
を使用しても、Windowsコマンドのプロンプトではこれらのファイル名は同じなので、変更はありません。私にとって最も簡単な解決策は次のとおりです。
git checkout
前のバージョン 、 これらのファイルが追加される直前の 。git checkout
プロジェクトの最新バージョン を、正しいファイルケースを使用してください。以前のコミットに基づいてブランチにチェックアウトしたときにも同じ問題がありました。 Gitはファイルが追跡されていないため、チェックアウトを拒否しました。
私は解決策を見つけました、そしてそれがあなたにも役立つことを願っています。
影響を受けるディレクトリを.gitignore
に追加し、それらに$ git rm -r --cached
を発行することは明らかに十分ではありません。
何かをテストして現在のバージョンに戻るために、以前のコミットKに基づいてブランチを作成したいとします。私は次のステップでそれをするでしょう:
追跡されていないファイルを設定します。 .gitignore
を編集し、gitに無視させたいファイルとディレクトリに$ git rm -r --cached
を適用します。ファイル.gitignore
自体も.gitignore
に追加して、$ git rm -r --cached .gitignore
を発行することを忘れないでください。これにより、gitの無視動作が以前のコミットでも同じままになります。
今行った変更をコミットします。
$ git add -A
$ git commit
現在のログを保存してください。そうしないと、現在のバージョンに問題が戻ってくる可能性があります。
$ git log > ../git.log
コミットKへのハードリセット
$ git reset --hard version_k
コミットKに基づいてブランチを作成する
$ git branch commit_k_branch
そのブランチにチェックアウト
$ git checkout commit_k_branch
あなたのことをしてそれをコミットする
もう一度マスターにチェックアウトする
$ git checkout master
現在のバージョンに再度リセット
$ git reset current_version
または$ git reset ORIG_HEAD
今、あなたは激しく頭にリセットすることができます
git reset --hard HEAD
注意!最後の次のステップをスキップしないでください(例:$ git reset --hard ORIG_HEAD
)、それ以外の場合は、上記の不満のあるファイルgitは失われます。
私はまた、gitが苦情を言っているファイルが削除されていないことを確認しました。それらをテキストファイルにコピーして$ for i in $(cat ../test.txt); do ls -ahl $i; done
コマンドを発行しました
上記のブランチに再度チェックアウトする場合は、不要な変更が表示されないように$ git status
を発行することを忘れないでください。
私の場合、問題はサブモジュールにありました。 master
はプロジェクトに新しいサブモジュールを追加した別のブランチとマージされました。私がチェックアウトしようとしていたブランチがそれを持っていませんでした、それがgitが追跡されていないファイルについて不平を言っていて、他の提案された解決策がどれも私にとってうまくいかなかった理由です。私は自分の新しいブランチにチェックアウトを強制し、マスターを引っ張りました。
git checkout -f my_branch
git pull Origin master
git submodule update --init
これら二つの関数(git rm --cached、 git checkout -f another-branch)は私にはうまくいきませんでした。
代わりに、Gitがあなたに指示したように、私はファイルを(Eclipseでは)物理的に削除しました。 分岐を切り替える前に、それらを移動または削除してください。
それから私はそれを追加/コミットしました。
それから私は引っ張ってそれはうまくいった!
私も同様の問題に直面していて、私は上に掲載したすべての解決策を試してみましたが、うまくいきませんでした
この問題は、i がdevelop
ブランチの my onMusicUpdateListener.Java
からOnMusicUpdateListener.Java
に名前変更されたときに発生しました。
これでmaster
はonMusicUpdateListener.Java
を持ち、develop
はOnMusicUpdateListener.Java
と同じファイルを持ちました
今私はマスターに切り替えたときはいつでもそれは私にエラーを与えた
The following untracked working tree files would be overwritten by checkout
そしてそれはaborted
です。
これを解決するために、私は強制的にchecked out
master
branch にし、それから私のonMusicUpdateListener.Java
をOnMusicUpdateListener.Java
にcommitted
it、そしてmerged
それをdevelop
branchに変更します。
それから私は私のdevelop
ブランチをmerging
に更新してmaster
にしました。これですべてが正常に戻り問題は解決しました。
私の場合、git rm --cached
は機能しませんでした。しかし、私はgit rebase
でそれを得ました
ファイルを削除せずに移動します
ファイルの削除を回避する1つの方法は、代わりにそれらを移動することです。例えば:
cd "`git rev-parse --show-toplevel`"
git checkout 2>&1 | while read f; do [ ! -e "$f" ] || mv "$f" "$f".bak; done
これは許可の問題になる可能性があります。
所有権を変更する
Sudo chown -v -R usr-name:group-name folder-name
同じ名前で大文字小文字が異なる2つのファイルが問題になる可能性があります。
これらのファイルの1つを削除するか、名前を変更することができます。例:
Pdf.html.twig (The GOOD one)
pdf.html.twig (The one I deleted)
ファイルの名前をローカルで変更してからpull
を実行すると、そのエラーメッセージが表示されます。
これは簡単に解決できます、gitは両方のブランチに同じファイルがあると言っているので、マスターブランチから特定のファイルを削除しなければなりません。そしてマージすることができます。
git merge "your branch"
それがあなたのために働くことを願っています、私はちょうど私のエラーを解決しました。私のエラーは次のとおりです:
エラー:次の追跡されていない作業ツリーファイルはマージによって上書きされます: .vs/slnx.sqlite マージする前にそれらを移動または削除してください。
これでうまくいきました!私の場合、.vs/slnx.sqliteはビジュアルスタジオによって生成されたので、削除する前に閉じる必要がありました。
ほとんどの回答では、ファイルを削除または削除することを検討しています。これが簡単な方法です。しかし時々あなたはローカルファイルを取り除きたくないでしょう。しかし戦略とマージするので、gitもこれに対する解決策を持っています。
git merge --strategy=ours master
私の場合は、このエラーが発生していました。人気のあるオープンソースのCMSを使用していて、問題の原因となっていたディレクトリが、CMSが書き込むアップロードディレクトリだったためです。
それで、それはあなたが持っていないけれどもあなたがバージョン管理から得ることができないファイルがあるということです。
私はライブサイトから私のローカルにすべてのファイルをつかみます、そして私はこれが問題を解決することを願ってリポジトリにこれをチェックインします。
フォルダ名に「/」または特別な記号が付いていないか確認してから、そのフォルダの名前を変更します。その後、リポジトリを別の場所にクローンするだけです。
ファイルを削除するか名前を変更するだけです。
例えば
$ git pull
Enter passphrase for key '/c/Users/PC983/.ssh/id_rsa':
error: Your local changes to the following files would be overwritten by merge:
ajax/productPrice.php
Please commit your changes or stash them before you merge.
error: The following untracked working tree files would be overwritten by merge:
ajax/product.php
Please move or remove them before you merge.
Aborting
Updating a04cbe7a..6aa8ead5
私は/ delete ajax/product.php および ajax/produtPrice.php の名前を変更する必要がありました。
心配しないで、git pullすると元に戻ります。一部の変更を失う可能性があるため、削除するのではなく名前を変更することをお勧めします。
これでも解決しない場合は、ブランチ全体を削除してからもう一度作成してからgit pull Origin remotebranch
を実行します
この問題を解決するには、 appname/gen/ から .gitignore fileを削除します。
変更されたファイルを保存し、後で変更された内容を使用するためにブランチをチェックアウトしようとしたとき、およびリベースしようとしたときにこのエラーが発生しました。
git stash
私はただファイルシステムに行ってファイルを直接削除し、それからgitチェックアウトを続けてもうまくいきました。
私は何度も問題を起こしました、そしてそれは開発者が削除、プッシュ、再追加、プッシュまたはそのようなことをしていることに関連しているかもしれません。