git status
を実行すると、nothing to commit, working directory clean
と表示されます
そして、git pull --rebase
を実行します。
First, rewinding head to replay your work on top of it...
error: The following untracked working tree files would be overwritten by checkout:
includes/resources/moduledata/12/_Fr4_02_Invention_IPA_SR_la-Fête.pdf
Please move or remove them before you can switch branches.
Aborting
could not detach HEAD
git pull Origin master
を実行したときの同様のエラー
* branch master -> FETCH_HEAD
error: The following untracked working tree files would be overwritten by merge:
includes/resources/moduledata/12/_Fr4_02_Invention_IPA_SR_la-Fête.pdf
Please move or remove them before you can merge.
Aborting
私の.gitignore
ファイル:
→ cat .gitignore
.htaccess
bower_components/
このファイルは常に表示され、ファイルシステムから削除すると、gitはこのファイルを削除したと表示しますが、他のメッセージでは追跡されていないことを示します。どのようにして、追跡と追跡を同時に解除できますか?
レポの全体像がなければ、以下は何よりも推測にすぎませんが、状況を説明するかもしれません。あなたの履歴が次のように見えるとしましょう:
A -- C [Origin/master]
\
B [HEAD, master]
あなたが書く:
このファイルは常に表示されており、ファイルシステムから削除すると、gitはこのファイルを削除したと表示しますが、他のメッセージでは追跡されていないと表示されます。
私はあなたが走ったかもしれないと推測しています
git rm --cached <file-in-question>
コミットB
;でその削除をコミットしました。そのため、ファイルはローカルリポジトリで追跡されなくなりますが、作業ツリーには引き続き存在します。
それまでの間、上流ブランチはコラボレーターの1人からコミットC
を受け取りました。この場合、<file-in-question>
はバージョン管理からnot削除されました。影響を与えようとしているもの
git pull --rebase
このようなものです:
A -- C [Origin/master]
\
B' [HEAD, master]
ただし、メッセージにあるように、
[...]追跡されていない作業ツリー[ファイル]は、チェックアウトによって上書きされます。
確かに、コミットC
(その上でB
を再生するため)を巻き戻すと、<file-in-question>
(コミットC
から)のリビジョンがチェックアウトされます。同じ名前の追跡されていないファイルが既に存在する作業ツリー。その追跡されていないファイルの内容は価値があるかもしれません。そのファイルを別のバージョンで上書きしたくない場合があります。そのため、Gitは追跡を停止し、何が間違っているのかを通知します。
編集:状況を再現する小さな例です...
cd ~/Desktop
mkdir test
cd test
git init
touch README.md
git add README.md
git commit -m "add README"
# simulate a remote branch moving ahead by one commit
# (that doesn't remove the README)
git checkout -b Origin_master
printf "This is a README.\n" > README.md
git add README.md
git commit -m "add description in README"
# remove the README and create a new commit on master
git checkout master
git rm --cached README.md
git commit -m "remove README"
# simulate an attempt to rebase master to its "upstream" branch, Origin_master
git rebase --onto Origin_master master
その最後のコマンドは次を出力します:
First, rewinding head to replay your work on top of it...
error: The following untracked working tree files would be overwritten by checkout:
README.md
Please move or remove them before you can switch branches.
Aborting
could not detach HEAD
実行することをお勧めします
git fetch
git log --stat Origin/master..master -- <file-in-question>
そのようなことが起こったかどうかを確認します。
これは、ファイル名の大文字と小文字の変更が原因で発生することもあります。私は同じ問題を抱えていましたが、これが私にとってそれを解決したものです。
git config core.ignorecase true
MacまたはPCに当てはまります。
代替ソリューション: 次の追跡されていない作業ツリーファイルは、チェックアウトによって上書きされます
追跡されていないファイルをすべて削除する(注意):
git clean -d -fx ""