5

他の古いバージョン管理システムから、Git にはなかった履歴をさかのぼってコミットすることにしました。そこで、孤立したブランチ「newroot」を作成し、他のバージョン管理システムからコミットをインポートしました。次の質問は、Git のルート コミットの前にコミットを挿入しますか?

「newroot」ブランチは、「master」ブランチのルート コミットと完全に一致するファイルになりました。

次に、「master」ブランチを「newroot」孤立ブランチにリベースします。次のようにします。

git rebase --onto newroot --root master

問題は、すべてのマージの競合を解決するように求められることです。何年にもわたって何百もの合併があります。私はそれらを手動で解決することができません。これらのマージは過去に解決されているため、実際には必要ありません。リベースは実際には内容を変更しないため (同一のツリーをリベースしているため)、Git に正確に「マージを再生」させたいと考えています。

リベースが以前に使用されたものと同じ解像度を使用するように指定する方法はありますか?

ここで「レレレ」が役立つかもしれないと理解しました。しかし、最初にマージするときに、すでに有効にしておく必要がありましたよね? または、「rerere」キャッシュをさかのぼって再作成できますか?


自分の仕事に対する別の解決策を想像できます。実際にリベースせずに、どういうわけか Git に「newroot」ブランチと「master」ブランチを連結するように依頼する。しかし、それが可能かどうかはわかりません。

4

1 に答える 1

6

実際にリベースせずに、どういうわけか Git に「newroot」ブランチと「master」ブランチを連結するように依頼する。しかし、それが可能かどうかはわかりません。

これをグラフトポイントと呼び、filter-branchマスターヒス​​トリーを書き換えるためにが続きます。この投稿を例として、またはこの質問
を参照してください。

リベース側では、マスターブランチのコンテンツを使用して競合を解決するために、彼らのようなマージ戦略を試して使用できます (マスターがリベースされているため)

git rebase --merge -s recursive -X theirs --onto newroot --root master
于 2016-06-29T07:08:11.387 に答える