現在、2つのブランチに取り組んでいます。ソフトウェアの更新のため、フォルダ構造を完全に変更する必要がありました。したがって、ファイルを両方のブランチに移動します。さて、作業ブランチをマスターブランチにマージするようになりました。
問題は、ファイルが1つのブランチ(added by them
またはadded by us
)によってのみ追加されたことを通知するマージ競合があることです。問題は、ファイルがbothブランチによって追加されていることです。
たとえば、textures/texture1.png
にテクスチャがあります。 masterブランチはそれを正しい場所に移動しました(以前はmisc/textures/texture1.png
の前でした)。作業ブランチはそれをまったく同じ場所に移動し、後で編集しました。このファイルのマージの競合は次のように述べています。
added by us: textures/texture1.png
重要なのは、これがnot必要なファイルであることです。他のブランチのファイルが欲しい!
私がする時
git checkout --theirs textures/texture1.png
私は得る
error: path 'textures/texture1.png' does not have their veresion
しかし、このファイルしますが存在します!最近追加しました!そして、それは私が欲しいファイルです
これらの競合を解決するにはどうすればよいですか?
(必要に応じて詳細情報!)
a--b--c--M--d--f--E--g--h--i <<< master
\
\
x--M'--y--z <<< you
あなたの状況は上記のように見えますか(ここで、MとM 'は移動するコミットで、Eはテクスチャを編集するコミットです)。 z/iとgitをマージしようとすると、本当に満足できません。
あなたは一時的なブランチでMとM 'をマージしようとするかもしれません
a--b--c---M--d--f--E--g--h--i <<< master
\ \
\ X <<< helper
\ /
x--M'--y--z <<< you
ヘルパー( "X")をマスター( "z")およびマスター( "i")とマージします。
a--b--c---M--d--f--E--g--h--i <<< master
\ \ \
\ X-----XX---------XXX <<< helper
\ / /
x--M'--y--z <<< you
こうすることで、競合は作成されてすぐに解決されます。紛争は時間とともに増大する傾向があるため、多くの場合、これはより簡単です。
あなたはいつでも試すことができます
git mergetool
これによりGUIが開き、適切なリンクをクリックするだけで目的の変更を選択できます。手動で変更する必要がある場合があります。しかし、あなたのケースでは、ファイル画像を選択する必要があります。
競合を解決するときは、git checkout
ファイルを取得したい場所から正しいtree-ish(ブランチ名、タグ、コミットのsha1 ...)を示します。
git checkout theirBranchYouAreMerging -- textures/texture1.png
すべての「それら」の変更が必要ない場合は、部分的にキャンセルできます。そのためには、git reset -p
インデックスから望ましくない変更を選択的に削除し、次にgit checkout
を作業ディレクトリからも削除するには:
git checkout theirBranch -- some/file.txt
git reset -p -- some/file.txt
git checkout -- some/file.txt