2012-01-03 13 views
37

私はローカルに2つのブランチ、masterBerislavを持っています。後者は現在アクティブで、私はすべての変更をコミットしました。私はmasterにチェックアウトしようとすると、私は次のメッセージが出ます:すべての変更がコミットされたにもかかわらず、Gitはチェックアウトマスターの変更をコミットまたは隠すように求めますか?

error: Your local changes to the following files would be overwritten by checkout: [list of files changed in the active branch] Please, commit your changes or stash them before you can switch branches. Aborting

をしかし、他のすべては、私が試した - commitstatusmerge - (クリーン作業ディレクトリ)コミットする何もないことを私に伝えます。私のmaster支部に行くためには何が必要ですか?

編集:私はgit stashをしようとすると、私は取得しています:上記のエラーに記載されているすべてのファイルの

error: feeding unmodified [file path] to diffcore

+0

http://stackoverflow.com/questions/6337122/git-branches-behaving-strangelyて、http:// stackoverflow.com/questions/6638937/switching-branches-in-git-when-will-i-get-you-have-local-changes-cannot-switc答えはhttp://stackoverflow.com/questions/で、役立つかもしれません7463392/switch-a-branch-after-aborting-current-changes-in-gitを可能な代替手段として使用する – VonC

+6

'git status'の出力は何ですか? – manojlds

+0

+1 to manojlds。これはこの問題を解決するのに有益な情報です。 –

答えて

41

今日も同様の問題が発生しました。 git statusは、チェックアウトが不平を言っていたファイルをリストしていませんでした。私はした:

git checkout -- path/to/file 

そして、それはファイルへの変更を元に戻します。

アン現在の作業ディレクトリ上のすべてのunstaged変更を元に戻すためにも、簡単な方法[1]

git checkout -- . 

[1] - 注意して - あなたが作業していた他のunstaged変更を失うことになります(もしあれば)。ランニングgit stashが上がらないときに表示さ

git stash 
git stash pop 

「エラー」:あなたは何をしているかわからない場合は、このような単純なあなたは

+0

これは私に大きな時間を助けました。 '' 'git checkout -f branch''は動作しませんでしたが、これはやっていました。 – rurp

+0

これは時々助けになりません。実際のケースでは、ファイルの行末がCRLFからLFに変更されました.gitattributesには '* .sh text eol = lf'が含まれていますが、' git checkout - .'は新しいCRレス版で置き換えられませんでした –

1

あなたが他の枝に追跡され、あなたの作業コピーの人跡未踏のファイルを、持っているようです。他のブランチをチェックアウトすることを拒否します。なぜなら、現在トラッキングされていないローカルファイルは、別のブランチのファイルによって上書きされるからです。これらのファイルは、このブランチ

  • のために関連している場合は、今

    • 彼らは
  • +0

    もう一つのオプションは、ファイルを隠しファイルに保存して、いつかそれらを将来復元することです( 'git stash pop') – Grizzly

    +0

    問題は、リストされたファイルが追跡されていて、現在のブランチが最新のものとして報告されています。この問題は、マスターをチェックアウトしようとしているときにのみ表示されます。 –

    +0

    @BerislavLopacレポに汚れ/クリーンなフィルターがありますか?(http://progit.org/book/ch7-2.html)?またはアクティブなcrlf置換設定(http://stackoverflow.com/a/2825829/311635)? – Rudi

    10

    を必要とされていない場合は、それらのファイルを削除し、あなたの現在のブランチにそれらのファイルを追加することができます

    は、問題のあるファイルを移動します他の場所に次に、問題のファイルをツリーから削除します。もう一度引っ張ってください。違反したファイルの変更を、あなたが引っ張ったファイルにdiffしてください。ハック、それは動作します。

    +0

    これは私の問題を解決しました。ありがとうございました! – Kirill

    +1

    これはうまくいった唯一の解決策でした –

    +3

    これはgitが使いにくいという評判を得るようなものです。 –

    39

    :)上で作業していたファイルのバックアップを保ちます心配することは何もない。ファイルにコミットされていない変更がないことを認識しているだけです。

    +0

    ありがとう、これはトリックでした。 – nerdoc

    1

    @JohnHamminkと非常によく似ていますが、ここに入ります。

    ソリューション

    1. 別のディレクトリにファイルを削除します。
    2. 変更をコミットします(2つのファイルを削除したばかりである可能性があります)。
    3. ファイルを再度ディレクトリに追加します。
    4. (あなたがコミットされている唯一のファイルを見ることができるはずです)コミットします。

    私の場合、これはファイルの名前が変更されただけなので、ケースに変更されました。例えばfooViewModelからfooViewModelへのfooViewModel。 Gitは、同じファイルが実際には2つの別々のファイルであると考え続けました。

    私は、これはUnixはケースの窓は本当にしばらく敏感であることとは何かを持っていると思います。

    希望します。

    +0

    私は別の場所にファイルを移動し、私は支店を変更することができました。 –

    12

    私は新しいクローンで同様の問題がありました。私はおそらく--force(-f)フラグ

    git checkout --force some_branch 
    

    ないあなたが変更を行っているレポ上の問題を解決する最善の方法でチェックアウトを余儀なくさが、私の場合は私が私HADN確信していました変更を加えずに、ブランチを切り替えるだけでした。

    +1

    これは私のために働いた唯一の答えです。 –

    +0

    私のために同じもの。私はすべてのオプションを試してみましたが、これはうまくいきました。ありがとう@Adam Bowen –

    0

    私は同じ問題を抱えていたが、これは(Linux上)私の問題を解決しました:

    git config --global core.autocrlf input 
    
    関連する問題