これがあなたのシナリオだと思います:
$ git checkout ProductsAndContents
Switched to branch 'ProductsAndContents'
ブランチProductsAndContents
にはファイルが含まれているtests/unit/src/models/BrandTests.js
ため、上記でファイルcheckout
を作成したり、要求された特定のコミットで最新の状態になっていることを確認したりします。
$ git status
# On branch ProductsAndContents
nothing to commit (working directory clean)
変更を加えておらず、クリーンな作業ディレクトリから始めたので、これは良いことです。
$ git checkout master
Switched to branch 'master'
これにより、最新のコミットに含まれるすべてのファイルmaster
が作業ディレクトリで最新のものになります。ただし、に含まれていないファイルmaster
や無視されたファイルは削除または更新されません。ここではmaster
、何らかの理由で現在問題のファイルが含まれていないと想定しています。
$ git status
# On branch master
nothing to commit (working directory clean)
繰り返しますが、変更は加えていません。問題のファイルが追跡されていないファイルとしてここで言及されていないという事実は、おそらくそれが無視されていることを意味します(in.gitignore
またはinのいずれか.git/info/exclude
)。master
ファイルが含まれていないため、ファイルが存在するかどうかは関係ありません。
$ git merge ProductsAndContents
error: Your local changes to the following files would be overwritten by merge:
tests/unit/src/models/BrandTests.js
Please, commit your changes or stash them before you can merge.
Aborting
ここで、他のブランチにマージしようとすると、master
現在はないファイルを導入する必要がありますが、通常は問題ありません。ただし、そのファイルは作業ディレクトリに存在しgit
、リポジトリに保存されているかどうかわからないものをゴミ箱に入れたくありません。他の場所で提案されているように、(安全であることがわかっていると仮定して)そのファイルを削除して、マージを再試行することができます。
あなたが提供した情報では、それがあなたがここに持っているものであるとは100%確信していません。ただし、次の2つのコマンドを実行して、その状態を確認できます。
git ls-files master -- tests/unit/src/models/BrandTests.js
git ls-files ProductsAndContents -- tests/unit/src/models/BrandTests.js
私の推測が正しければ、最初のコマンドはファイルが存在することを示しませんが、2番目のコマンドはそれを示します。次に、それが無視されているかどうかを確認します(の場合.gitignore
、2つのブランチのそれぞれに存在するバージョンを確認する必要がある場合があります)。.git/info/exclude
.gitignore