web-dev-qa-db-ja.com

コミットされていない変更があるため、VSのTFS / GITをマスターに切り替えることができません

Visualstudio.comでVS 2013ソリューションのGITリポジトリをセットアップしました。 TFS(GITモード)の使用に慣れている間、リポジトリは非常にうまく機能しました。

その後、ブランチに慣れることにしたので、マスターからブランチを作成しました。このブランチでかなりの数の変更を加えました。時間の経過とともに変更をコミットし、ローカルコミットをvisualstudio.comリポジトリにプッシュするための同期を実行しました。これはすべて機能します。

私が抱えている問題は、何とかマスターブランチに戻る機能を失ったことです。新しく作成したブランチをマスターにマージできません。マスターに関係することをしようとするたびに、VSで次のエラーが発生します。

コミットされていない変更があるため、マスターに切り替えることができません。ブランチを切り替える前に、変更をコミットまたは取り消します。詳細については、[出力]ウィンドウを参照してください。

出力ウィンドウに「詳細」が含まれることはありません...

このメッセージは「コミットされていない変更」とはどのようなものですか?私はmasterブランチに入ることができないので、その変更をコミットする方法がありません(そうするつもりもありませんか?)。そして、私が現在いる(他の)ブランチはコミットされ、同期されています。

私は本当にTFS、GIT、およびソース管理を学んでいます。この問題から安全に回復するにはどうすればよいですか?

32
rwkiii

わかりました。rwkiiiと同じ問題を自分で抱えていました。これはVisual Studioのバグであり、簡単に修正できるものではありません。症状は次のとおりです。

Visual Studioでは、ブランチのマージ/切り替えなどはできないと述べています。コミットされていない変更があるため-すべての変更haveがコミットされていることを除き、これは問題ありません。

コミットされていない変更があるため、マスターに切り替えることができません。ブランチを切り替える前に、変更をコミットまたは取り消します。詳細については、[出力]ウィンドウを参照してください。

こちら より明確にするためのスクリーンショット。

出力ウィンドウを見ると、空のように見えるかもしれませんが、「Show output from」を「Source Control-Git」に変更する必要があります。これにより、Visual Studioが考えているファイルが変更されます。

Make sure "Source Control - Git" is selected

今、私がそれを試みたものでなかったそれを修正します(あなたがする必要はありません):

  • Visual Studioの再起動
  • マシンを再起動する
  • プロジェクトの切り替え
  • 外部gitツールを使用する(すべて「変更なし」と言われた)
  • git reset
  • ファイルに任意の変更を加えてコミットします。コミットは大丈夫、VSはまだ変更があると考えています

最後に、ディスクからファイルを削除してdeleteし、Team Explorerウィンドウからその変更を「元に戻す」必要がありました。

Click "undo" to restore the file and your ability to switch branches

最も理想的な解決策ではありませんが、解決するようです。

47
Kushan

この問題を解決するには、gitコマンドプロンプトを使用しました。私はそれが最良の方法または唯一の方法であることを保証することはできませんが、Visual Studio 2013で私のために働いた。

[チームエクスプローラーの変更]で、[ コマンドプロンプトを開く ]を選択します。

コマンドプロンプトで次を入力します。

git status

変更のために開いているファイルが一覧表示されます。

これらのファイルをコピーして(念のため)、コマンドプロンプトで作業ディレクトリの変更を破棄できます。

git checkout-mysubdir\myfile.ext

Visual Studioでブランチを変更しようとしないでください、それでも動作しません!

代わりに、プロンプトで問題のブランチに切り替えます。

git checkout branchname

Visual Studioに戻ると、プロジェクトをリロードするように求められます。その後、ブランチはコマンドラインから選択したブランチに正しく更新されます。

hth

29
Baron

ファイルを削除したり、新しい変更を加えたりすることなく、同様の問題を解決しました。

BranchAで変更をコミットし、MasterとマージしてGit bashでプッシュした後、VSでプロジェクトを開いてTeam Explorerを調べたときに、Masterブランチに変更があることが示されました。 Git bashを使用してステータスを確認するときに変更は表示されませんでしたが、VS出力に10個のファイルがリストされました。すべてのファイルの差分に変更はありませんでした。この時点でコミットの修正を試みましたが、以前のコミットを修正することはできません(最終的にこれが私の問題を修正するので、これについては以下を参照してください)。

VSでBranchAに切り替えようとしましたが、コミットされていない変更のため切り替えられないというメッセージが表示されました。 Git bashを介してBranchAに切り替えます。ステータスに変更はありません。 VS Team Explorerを更新して、BranchAに追加し、マスターよりもさらに14個のファイルの変更を表示しますが、すべてのファイルの差分に変更はありませんでした。

チームエクスプローラーのBranchAで、[アクション]-> [前のコミットの修正]をクリックしました。今回はそれを起こさせ、すべての変更をクリアしました。その後、保留中のコミットが表示されましたが、Git bashでステータスを確認すると保留中のものは何も表示されなかったため、チームエクスプローラーでホームに戻って戻って、保留中のコミットメッセージをクリアしました。

チームエクスプローラーでマスターに切り替えられ、それ以上の変更も表示されません。すべては順調です。

3
javovo

コミットされていない変更とは、1つ以上のファイルを変更したことを意味します既にgitに追加されているで、これらの変更はコミットまたはgit stashで「保存」されていません。

ブランチ間を切り替えると、コミットされていない変更が許可されません(gitに追加されていない新しいファイルでも問題ありません)。

私自身が PoshGit Powershellを使用しているため、Visual Studioとgitの統合方法に慣れていません

続行する方法は次のとおりです。

  • 変更を元に戻す
  • 変更をコミットする
  • または 変更を隠しておく (「中断されたワークフロー」セクションを参照)。
2
Asser

こんにちはこれは私のためにトリックをしました...

コマンドプロンプトチームエクスプローラー>非同期コミット>アクション>コマンドプロンプトを使用してみてください

git checkout branchNameを実行します

2
Jen

1:git bashを開く

2:gitリポジトリを指す

3:コマンド「git status」を使用してブランチのステータスを確認します

他のブランチの変更を再利用できる場合は、「git stash save」を使用します(これにより、変更がローカルに保存されます。競合エラーが発生する可能性があります。現時点では無視できます)。 gitステータス結果のファイルで、「git add <file path>」を使用して変更を保持したい

4:ローカルの変更を保存したら、コマンド「git reset --merge」を使用します

これにより、ローカルブランチが元のチェックアウトにリセットされます。ブランチを切り替える準備ができました。VisualStudio Teamで競合ファイルが表示される場合がありますExplorer> changes、そのファイルを保持しない場合変更を右クリックして[変更を元に戻す]を選択するか、「git add <file path >」を使用して、このファイルを他の保存済みファイルに追加します。

5:これでgitブランチの切り替え準備ができました。「git checkout <branch path>」と入力してください

6:保存された変更をポップするには、「git stash pop」を使用します。これにより、現在のブランチに保存された変更がマージされます。

2
Satendra Jindal

私のために働いた一つのことは:-
1)チェックアウトするブランチを右クリックします。
2)[リセット]オプションをクリックします。
3)[変更の削除]をクリックします(--hard)
4)ブランチを右クリックして、チェックアウトを選択します

1
RAX

Slnアイテムが変更済みとしてマークされているが、ソリューションエクスプローラーにそのように表示されないことに何度か気付きました。他の人が示唆したように私がやったことは、コマンドプロンプトで、

git status (this should show you culprit files)

次に、個々のファイルを追加します。または私が個人的に行うことは実行されます:

git add -A 

これにより、変更されたすべてのファイルがチームエクスプローラーで適切に表示され、必要に応じて元に戻す/削除できます。このアプローチに問題はありませんでした。

1
WiseGuy

常に変更から除外する必要がある特定のファイルがあるため、この問題に定期的に遭遇しますが、いつかは変更されます。

エラーメッセージが表示されたときに機能するのは次のとおりです。

  1. VSでOutputウィンドウを見て、問題の原因となっているファイルを確認します。
  2. Git bashでgit update-index --no-assume-unchanged TheNameOfTheFileCausingTheIssueを実行します
  3. VS チェックアウトを元に戻すこのファイルで
  4. VSでブランチの管理のブランチを変更します。

これはあなたの状況ではうまくいくかもしれないし、うまくいかないかもしれませんが、誰かを正しい方向に導くために追加しました。 実行する前にgitコマンドを理解してください!

1
Dib

すでにファイルをコミットした後に、ファイル名を小文字から大文字に変更した後にこの問題が発生しました。ファイルの名前を変更して(最後に「1」を追加しただけです)、その変更をコミットして修正しました。その後、ブランチを切り替えることができました。

上記のように、問題のあるファイルの名前を確認するために、出力ウィンドウで「出力を次から表示」コンボを「ソース管理-Git」に変更する必要がありました。ソリューションのエクスプローラー/ファイルシステム上の名前が大文字になっている場所では、大文字は大文字ではありません。

0
tomRedox

最終的には、エクスプローラーからリポジトリを削除し、Visual Studio内から削除をコミットするように登録されたときに「すべての変更を元に戻す」を選択して、問題を解決しました。リポジトリを復元すると、Visual Studioはgitと連携して期待どおりに機能しました。

0
TheFastCat

問題は、比較では大文字と小文字が区別されるため、一部のファイルへのプルパスの後、リポジトリデータベースの同等のパスと一致しない場合があることです。

たとえば、リポジトリには「MyLibrary\ABC\Folder\MyFile.cs」を、ディスクには「MyLibrary\Abc\Folder\MyFile.cs」を含めることができます。 「git status」に変更は検出されませんが、Visual Studioはブランチスイッチをブロックします。

その場合、ディスクからMyFile.csだけを削除しても問題は解決しません。ABCディレクトリを削除してから、Visual Studioの変更を取り消して、正しい名前でフォルダー構造を再作成する必要があります。

0
Michael Logutov