同様の問題がありましたが、対象のファイル編成に一致するように作業をリベースすることで解決しました。
あなたが変更と言うoriginal.txt
あなたのブランチ(上local
分岐)が、masterブランチに、original.txt
別のものにコピーされている、と言いますcopy.txt
。このコピーは、commitという名前のコミットで行われましたCP
。
あなたは、すべてのローカルの変更、コミット適用するA
と、B
上で行われたの下に、original.txt
新しいファイルに、copy.txt
。
---- X -----CP------ (master)
\
\--A---B--- (local)
move
を使用して、変更の開始点に使い捨てブランチを作成しますgit branch move X
。つまり、マージするコミットの前のmove
ブランチであるcommit X
にブランチを置きます。ほとんどの場合、これは変更を実装するために分岐したコミットです。ユーザー@digory dooが以下に書いたように、あなたはgit merge-base master local
を見つけるために行うことができますX
。
---- X (move)-----CP----- (master)
\
\--A---B--- (local)
このブランチで、次の名前変更コマンドを発行します。
git mv original.txt copy.txt
これにより、ファイルの名前が変更されます。copy.txt
この時点ではまだツリーに存在していないことに注意してください。
変更をコミットします(このコミットに名前を付けますMV
)。
/--MV (move)
/
---- X -----CP----- (master)
\
\--A---B--- (local)
これで、上に作業をリベースできますmove
。
git rebase move local
これは問題なく動作するはずで、変更はcopy.txt
ローカルブランチに適用されます。
/--MV (move)---A'---B'--- (local)
/
---- X -----CP----- (master)
ここでMV
、移動操作はCP
メインブランチでのコミット時のコピー操作と競合する可能性があるため、メインブランチの履歴で必ずしもコミットする必要はありません。
次のように、移動操作を破棄して、作業を再度リベースするだけです。
git rebase move local --onto CP
... 他のブランチで導入されCP
たコミットcopy.txt
です。これにより、すべての変更copy.txt
がCP
コミットに基づいてリベースされます。さて、あなたのlocal
ブランチは、正確に、あなたは常に変更されているかのようcopy.txt
ではなくoriginal.txt
、あなたが他の人との合併を続行することができます。
/--A''---B''-- (local)
/
-----X-------CP----- (master)
変更が適用されるCP
か、そうでなければcopy.txt
存在せず、変更が再び適用されることが重要ですoriginal.txt
。
これが明確であることを願っています。この答えは遅くなりますが、これは他の人に役立つかもしれません。