同様の問題がありましたが、対象のファイル編成に一致するように作業をリベースすることで解決しました。
あなたが変更と言う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。
これが明確であることを願っています。この答えは遅くなりますが、これは他の人に役立つかもしれません。