8

ブランチをマスターにマージしたいというgitの問題がありますが、ファイルにローカルな変更があると思われるため、マージを拒否しています。ステータスを実行しても変更は表示されず、ファイルを比較しても何も生成されません。ターミナル出力は次のとおりです。

$ git checkout ProductsAndContents
Switched to branch 'ProductsAndContents'

$ git status
# On branch ProductsAndContents
nothing to commit (working directory clean)

$ git checkout master
Switched to branch 'master'

$ git status
# On branch master
nothing to commit (working directory clean)

$ 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

どんな助けや提案も大歓迎です!

4

4 に答える 4

3

最初の質問に対するAndrewMyersのコメントのおかげで、問題を解決するための設定を発見しcore.trustctimeましfalseた。

git config core.trustctime false

iノードの変更時間の不一致についての何か。これは、リポジトリが、使用しているファイルシステムとは異なるファイルシステムを備えたマシンのファイル共有に置かれているためだと思います。

すべての提案をありがとう!

于 2013-03-04T15:05:43.890 に答える
1

さて、あなたが仕事を失うことはないと確信しているなら、以下を試してください:

rm tests/unit/src/models/BrandTests.js
git checkout -- tests/unit/src/models/BrandTests.js

これにより、変更があったと思わせるメカニズムがリセットされます。それが機能しない場合は、可能性のある他の人がいます。

于 2013-03-01T20:27:08.670 に答える
1

これがあなたのシナリオだと思います:

$ 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

于 2013-03-01T22:37:12.087 に答える
-2

各ブランチにコミットするものがないからといって、それらが同じであるとは限りません。を使用して2つのファイルの違いを表示することに興味があります

git diff

を使用して、リポジトリにコミットされたリビジョンに戻すことができます

git checkout -- tests/unit/src/models/BrandTests.js
于 2013-03-01T18:23:07.373 に答える