2009-12-08 4 views
8

は、私はその後、私のレポでファイルに変更を加えたファイルがマージされていないと信じているので、同じようgit statusに表示するgitのを強制したい:gitにファイルが結合されていないと思うようにするにはどうすればいいですか?

私の質問の全体だ
# Unmerged paths: 
# (use "git reset HEAD <file>..." to unstage) 
# (use "git add <file>..." to mark resolution) 
# 
#  both modified:  lib/delayed/recipes.rb 
# 

。それが最初に聞かれることは分かっているので、理由の説明をお読みください。

Pistonのバグがありますが、今日では見落としやすいインデックスにマージ競合が残っています。

方法Gitのレポとpiston update作品は次のとおりです。

  • クローン新しい一時的なGitのレポ最後に一時レポは、我々が見たコミット
  • アウトにリモートレポ(.piston.ymlに保存されています).piston.ymlが
  • が一時レポに私たちの地元のレポのファイルをコピー最後に更新されたに新しいブランチで私たちの地元のレポは、()コミット
  • チェックアウトは
  • 一時内のすべての変更をコミットリモートリポジトリの変更
  • と私たちの地元の変更をマージするために一時レポでのレポ(これらは、我々はこのvendoredプロジェクトを最後に更新時点の当社現地変更されている)
  • 実行git merge masterは(!)、マージの競合を無視して、すべてのコピー私たちの地元のレポに一時レポからファイル
  • は戻って私たちのオリジナルの出発点
  • に私たちの地元のレポ
  • チェックアウトローカルレポに(私たちの新しい一時ブランチ内)これらのファイルをコミットローカルリポジトリへの一時ブランチをマージ(いずれかを追加しますそれ以上の変更)

マージ競合のあるファイルを一時ブランチにコミットすることによってこの問題を解決することを期待しますが、最後に(git merge --squashを実行した後で)マージ競合が発生したファイルについてgitに伝えたい一時レポ。

+0

「選択的にマージ状態を再作成する方法」を参照してください。 Gitメーリングリストのスレッド:http://thread.gmane.org/gmane.comp.version-control.git/135059 –

答えて

12

マージの競合があるGitファイルでは、インデックスには通常3つのバージョンがあり、作業領域にはdiff3 -E/rcsmergeの競合マーカーを持つバージョンがあります。インデックスのバージョンは、共通の祖先のステージ1、「私たちの」バージョンのステージ2、および「彼らの」バージョンのステージ3です。結合されていないファイルの場合、ステージ0にバージョンはありません(git update-index --unresolveを使用して、ステージ0を削除して結合解除状態を復元できます)。

あなたは、あなたが地域のバージョンを作業からスクラッチ/からのファイルのバージョンを生成する場合は、インデックス、またはgit hash-object -w <file>に入れたい(ファイルバージョン)ブロブのSHA-1の識別子を取得するためにgit ls-files --stageまたはgit ls-tree <commit>を使用する必要があります。次に、git update-index --index-infoを使用して高次のステージをインデックスファイルに入れます(この後にはgit update-index --unresolve、インデックスよりステージ0を削除するには上位のステージを詰める前にgit update-index --force-remove)。 git checkout --conflict=merge -- <file>を使用して作業領域にマージマーカーを含むファイルを再生成することができます。 (お役に立てば幸いです)

HTH


を参照:Gitのメーリングリスト上 "How to selectively recreate merge state?" スレッド。

+0

マージ競合を起こした2つのファイルバージョンは別のレポにあり、3番目のバージョンがマージされている可能性があります今のところ。それは問題ではないですか? (私はまだあなたの応答を完全に理解していないと告白しますが) – ScottJ

+0

私は理解し始めています。私はタコのマージのように見えるように設定しなければならないと思う?共通の祖先とベンダーの変更に加えてローカルの変更をマージします。これは、私が予想していたより複雑な方法です、そして、私はもうそれ以上のことを考えていません。しかし、答えをありがとう。 – ScottJ

+0

タコはありません:マージはGitの3-wayマージであるため、3つのバージョンが必要です。私はあとで例を考えようとします。 –

関連する問題