web-dev-qa-db-ja.com

Visual Studio 2013は、Gitプルでのマージを提供しません

Visual Studio 2013 Update 4とgit(Visual Studio Onlineでホストされています)を使用しています。 2つのローカルコミットと2つのコミットがリモートブランチにあります。コミットするローカルの変更はありません:

Working directory clean

Visual Studioでプル(またはフェッチ)しようとすると、エラーが発生します。

エラーが発生しました。詳細メッセージ:1つの競合によりチェックアウトが妨げられる

An error occurred. Detailed message: 1 conflict prevents checkout

はい、競合があります。マージする必要があります。そして、 このページによると 競合を解決するために リンクが提供されるべきです。 しかし、VSには表示されません。

私はVSの外でマージを行うことができますが、それはポイントではありません。同時に、同じセットアップを実行している同僚は問題なくマージできます。 VSの何が問題になっていますか?

追伸構成が乱れている可能性のあるmsysgitがインストールされています。これによれば post 私のグローバル.gitconfigは次のようになります。

[user]
    mail = [email protected]
    name = trailmax
    email = [email protected]
[core]
    excludesfile = C:\\Users\\trailmax\\Documents\\gitignore_global.txt
    autocrlf = true
    editor = \"C:/Program Files (x86)/GitExtensions/GitExtensions.exe\" fileeditor
[diff]
    tool = vsdiffmerge    
[difftool "vsdiffmerge"]
    cmd = \"C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE\\vsdiffmerge.exe\" \"$LOCAL\" \"$REMOTE\" //t
    keepbackup = false
    trustexistcode = true
[merge]
    tool = vsdiffmerge
[mergetool]
    Prompt = true
[mergetool "vsdiffmerge"]
    cmd = \"C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE\\vsdiffmerge.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\" //m
    keepbackup = false
    trustexistcode = true
[credential]
35
trailmax

私の場合、 Resolve the conflicts オプションlocal changesがまだコミットされておらず、同期しようとしたためリモートで変更します。 ローカル変更をコミットし、同期を再試行するとすぐに、Resolve the conflictsリンクが表示されました。

ここでのポイントは次のとおりです:commit最初に変更を加えてから、同期を試みます。 mergeが開始され、Visual Studioにより各conflictsを通過できます。

enter image description here

55

ライネルの回答に示されているように、競合を解決するオプションがない場合、「エラーが発生しました。詳細メッセージ:1競合によりチェックアウトが妨げられます」という同じ問題が発生しました。

その理由は、プルされるファイルと同じファイルが追跡されていないためです。追跡されていないファイルを削除し、プルを再試行しました。

12
Karlo Medallo

同じ問題がありました。含める必要がある未追跡のファイルがあったことがわかりました。したがって、追跡されていないファイルの[変更]タブを確認してください。

6
azuneca

どちらのブランチにも「変更」(未追跡またはその他)がリストされていないため、他の回答は機能しませんでした。

私はコマンドラインに行くことにしました:

  1. クリック Sync 両方の枝に。
  2. 「マージ」したいブランチ(私の場合はマスター)に切り替えます。
  3. チームエクスプローラーのブランチの管理で、アクション->コマンドラインを開くを実行します。
  4. コマンドラインに「git merge BRANCH_NAME。 (私の作業ブランチ/マージ「から」)
  5. これで競合の解決ボタンが使用可能になりました。
4
Jess

プル中の競合が行末文字に関するものである場合:

git config --global core.autocrlf false

これにより、自動eol変換が回避されます。

詳しくは、「 なぜgitが未変更のファイルの各行が変更されたと考えるのか 」で、作業ツリーでその状況を検出する方法(git diff --Word-diff-regex=.)。

1
VonC