2013-03-01 14 views
7

ブランチをマスターにマージしたいところにgitの問題がありますが、ファイルにローカルな変更があると思ってマージを拒否しています。状態が変化していないことを示し、ファイルを比較すると何も生成されません。端末の出力は次のとおりです。変更されていないファイルへの変更のために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 

何か助けや提案が大歓迎です!

+1

あなたはどうにかそのファイルを '.git/info/exclude'ファイルまたは' .gitignore'ファイルに入れましたか? –

+2

[この回答](http://stackoverflow.com/a/12167041/166732)の設定オプションは役に立ちますか? – asm

+0

こんにちはAndrew、 'core.trustctime'をfalseに設定したようです。私に正しい方向を教えていただきありがとうございます:) –

答えて

3

私の最初の質問に対するAndrew Myersのコメントのおかげで、私はcore.trustctimeからfalseという設定が問題を解決したことを発見しました。

git config core.trustctime false 

不一致のinode変更時間についてです。私はこれを推測しているのは、レポが私が使用しているファイルシステムとは異なるファイルシステムを持つマシン上のファイル共有にあるからです。

ありがとうございました!

-2

各ブランチにコミットするものがないということは、それらが同じであることを意味するものではありません。あなたが勝った確信していた場合、私は、あなたが

git checkout -- tests/unit/src/models/BrandTests.js 
+3

'マージする前に変更をコミットしてください.'ブランチ間のコミットされた差分ではなくコミットされていない変更を意味します –

+0

本当にコミットするための変更はありません。前述したように、diffingはゼロ出力を生成します。私はうんざりしている。 –

1

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

git diff 

を使用して2つのファイルの違いを見ることに興味があります次のように試してみてください。

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

変更があったと思われるメカニズムをリセットする必要があります。それがうまくいかない場合は、他の人にそれを持たせてください。

+0

提案してくれてありがとうTrev!私はそれを試みたが、残念ながらそれはまだ同じエラーを与える。だから奇妙な... –

+0

私もこれに遭遇しましたが、 'git stash'はファイルを修正したものとして見ることを拒否します。手動でバックアップしてチェックアウトし、変更を手動で比較しました。 –

+0

@PaulLammertsma 'stash'は別のコミットだけで、独自のハッシュを持っていることを忘れないでください。他のコミットと同じように操作できます。他にも多くのオプションがあります。私はちょうど上記が最も速いことを発見した。 –

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) 

この場合も、変更はありません。問題のファイルがここでは未追跡のファイルとして言及されていないという事実は、おそらく無視されることを意味する(.gitignoreまたは.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.git/info/excludeをチェックして無視されているか確認してください(.gitignoreの場合は、2つのブランチのそれぞれに存在するバージョンを確認する必要があります)。

+0

ありがとう!残念ながら、ファイルは両方のブランチにあり、.gitignoreや.git/info/excludeにはありません。出力は次のとおりです: $ git ls-files master-tests/unit/src/models/BrandTests.js tests/unit/src/models/BrandTests.js $ git ls-files ProductsAndContents - tests/unit/src/models/BrandTests.js tests/unit/src/models/BrandTests.js –

関連する問題