数人の友人と私はGitHubを介してプロジェクトに取り組んでいます。私たちは皆同じブランチを共有していますが、それは良いアイデアかもしれませんし、そうでないかもしれません。
コードの一部を編集し、変更をコミットしました。 GitHubにプッシュコミットしました(Visual Studio 2013で作業しており、組み込みのGitツールです)が、このエラーが発生しました:
「新しいリモート変更があります。プッシュする前にそれらをプルする必要があります。」
だから私はリモートの変更をプルしようとしましたが、このエラーが発生します:
「エラーが発生しました。詳細メッセージ:エラーはlibgit2によって発生しました。カテゴリ= 21(MergeConflict)。9つのコミットされていない変更はマージによって上書きされます。」
私は自分の変更をプッシュしてから最初のブランチにマージできるようにブランチを変更しようとしましたが、このエラーが発生しました:
「コミットされていない変更があるため、マスターに切り替えることはできません。ブランチを切り替える前に変更をコミットまたは取り消します。詳細については、出力ウィンドウを参照してください。」
どうすればよいかわからないが、変更を友人にメールで送信し、変更をプッシュしてもらうこともある。ただし、ローカルコミットがどうなるかはわかりません。
問題は解決しました。すべてのコミットの同期を確認した後、git bashを開き、リモートコミットをプルしました。数回試行した後、Visual Studioに戻り、マージが登録されたことを発見しました。競合するファイルをすべて解決し、プロジェクトをプッシュすることができました。
答えてくれたみんなに感謝します!
ばかげているように、私はコマンドラインに行っただけで、うまくいきました。
すべてうまくいきました。
Visual Studio内で同じことをしても、機能しませんでした。図を移動します。
Visual Studio Gitプロバイダー(VS 2013、VS2015)を使用する場合、この状況は、ローカルコミットhasが実行されましたが、サーバーからプルしてマージしようとすると、エラーメッセージ:
「コミットされていない変更はマージによって上書きされます」
が引き続き表示され、プルアクションがキャンセルされます。
これは、ローカルでntracked Filesがローカルコミットの一部ではなく、リモートプルの一部であるために発生する可能性があります。マージ解決ではこのシナリオを処理できません。
通常これは、T4テンプレート出力などのファイルが1つのワークステーションのコミットに含まれるが、他のワークステーションには含まれない場合に発生します。
さらに、これはVisual Studio 2015で発生する可能性がありますMVC6プロジェクトで書き込み)、wwwrootフォルダー内のファイルが1つのワークステーションのコミットに含まれているが、別のワークステーションには含まれていない場合(これは、同じサーバーリポジトリを操作しようとするワークステーション上で.gitignoreファイルが異なるためです) 。
解決するには:
a)[チームエクスプローラー]> [変更]ダイアログを表示します。
b)サーバーブランチに実際に存在する追跡されていないファイルがコミットに含まれることを確認します。これを行うには、右クリックして[追加]を選択します。または、それらを上書きする場合は、[削除]を選択できます。注意してください。
c)コミットを実行し、次にプルを実行し、必要なマージ競合解決を実行します。
d)プッシュを実行して、リモートリポジトリを更新します。
今、あなたは本質的にgit merge
ブランチにコミットされていない変更を加えます(プルはフェッチ+マージのみです)。 Gitは、そのような操作がブランチのコミットされていない変更を上書きすると不満を言っています。
プル操作を続行するには、このコミットされていない変更を作業ディレクトリから削除する必要があります。これを行うにはいくつかの方法があります
Gitが初めての場合は、おそらくオプション#1から始めます。
Visual Studio 2013は、GIT UIとしての成熟度に欠けているようです。すべての変更をローカルにコミットした後でも、同様の問題に遭遇しました。 Visual Studio 2013のプッシュアンドプルで発生するエラーについては、Git Bashを使用してgit pullコマンドを実行することをお勧めします。コマンドラインのpullコマンドはVS UIよりもはるかに強力であり、いくつかの問題を克服します。
Walter Schultzへの応答として、バージョン管理でバイナリおよびアセンブリファイル(dllおよびexe)を保持しようとしているように見えるため、エラーが発生しています。バイナリファイルは編集もマージもできないため、バージョン管理に含めるべきではありません。
これらのファイルをGITリポジトリから除外するには、.gitignoreファイルを作成し、次のアイテムを含めることができます。
--- begin .gitignore file ----------------
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.sln.docstates
*.cache
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
x64/
build/
bld/
[Bb]in/
[Oo]bj/
Dev/
bin/
--- end gitignore file ----------------
.gitignoreファイルを作成したら、ローカルリポジトリに移動し、/ Bin /フォルダー内のすべてのファイルと、追跡したくないその他のファイルを削除します。
次に、ローカルにプッシュしてコードをサーバーリポジトリに同期します。
お役に立てれば。
私にも同じことが起こっていました。すべての変更をコミットし、ブランチを切り替えようとすると同じエラーが発生しました。
「Excluded Changes」の下に残した「無視」することを選択したファイルが1つあることに気付きました。明らかに、VS2013はこの除外を適切に処理していません。
何度も試してみた後、簡単な解決策を思いつきました。
変更をコミット解除しませんでしたが、開発のためにマージを実行するときに同じエラーが発生しました。私は試した:
その後、マージを再試行して開発しましたが、エラーは表示されなくなりました。ただし、いくつかの競合を解決する必要がありました。 2番目のコマンドだけが本当に関連していることを想像できますが、ここで何が起こっているのかわからないので、すべてのステップを文書化します。
私はVS 2015でこの問題を抱えていましたが、それを修正した唯一のことはVSを再起動することでした。上記の他の状況はいずれも当てはまりませんでした。
コマンドラインツールをダウンロードする必要があり、そこからmasterブランチをチェックアウトできました(VSでもチェックアウトしました)。次に、git pullを実行しましたが、リモートブランチとローカルブランチのマージとの競合による追加のエラーが発生しました。この問題を解決した競合を修正し、コミットしてから同期しました。
ソリューションをロードせずにVS 2013でgitアドインを実行する必要がありました。
私の問題は、VSがWindowsアプリケーションプロジェクトをロードしたときにapplication.vshost.exeを開始したため、一部の操作を実行するためにgitアドインをブロックしたことです。
VS studioテンプレートの.gitignoreを既に使用していましたが、それは別のものです。
私が作成した新しいMVCプロジェクトにも同様の問題があり、マージの新しいブランチには1か月前に作成したプロジェクトがないというエラーが発生します。上記のエラーを含むプロジェクトにNice作業プロジェクトの.gitattributeファイルを追加し、問題を修正しました。これで、問題なくマージできます。
マスターに.gitignoreを追加してコミットするだけです。
これをコマンドライン「git merge {branch name}」から実行すると、より具体的なエラーが発生しました。 「.gitignoreでの競合のマージ」