2

現在、私はこの複雑なマージされたコミットツリーを持っています:

*   36cd4ff merge commit to rebase 12 (master,origin/master,HEAD)
|\  
| *   f8d22cf merge commit to rebase 11
| |\  
| | *   4381ba4 merge commit to rebase 10
| | |\  
| | | * c81227f commit to rebase 9
| * | | d16e5ca commit to rebase 8
* | | | c277df7 good 7
* | | | e712ceb good 6
|/ / /  
* | | 80e3baa good 5
* | | 1559030 good 4
|/ /  
* | e8bf45c good 3
* | 4ca2d92 good 2
|/
* d43f5ac good 1

私はそのようなものが欲しいです(クリーンな履歴をgit push --force)で書き換えます:

* 36cd4ff merge commit to rebase 12
* f8d22cf merge commit to rebase 11
* 4381ba4 merge commit to rebase 10
* c81227f commit to rebase 9
* d16e5ca commit to rebase 8
|
* c277df7 good 7
* e712ceb good 6
* 80e3baa good 5
* 1559030 good 4
* e8bf45c good 3
* 4ca2d92 good 2
* d43f5ac good 1

git rebase -i HEAD〜6を実行すると、これらのコミットのみが表示されます。

pick 80e3baa good 5
pick e712ceb good 6
pick c277df7 good 7
pick d16e5ca commit to rebase 8
pick c81227f commit to rebase 9
pick 4381ba4 merge commit to rebase 10

これらのコミットはどこに行ったのですか?

* f8d22cf merge commit to rebase 11
* f8d22cf merge commit to rebase 11

これまでに機能した唯一の「解決策」は、リポジトリのクローンを作成し c277df7 good 7、ソースリポジトリからファイルをコピーして、コミットを実行することから始めました。

4

1 に答える 1

0

リベースする場合は、すべてのマージ競合をリベースで解決します。したがって、個別のマージコミットは必要ありません。まず、すべてのマージコミットを元に戻してから、次のことを試してください。

「good7」まではまっすぐなコミットラインがあり、その後は各コミットをツリーの一番上に配置する必要があります(ベースとして7があります)

リベース7の上にリベース8を置きます:

git rebase c277df7 d16e5ca

次に、9を8に置きます。

git rebase d16e5ca c81227f 

途中ですべてのマージ競合を解決します(他のコミットを実行するか、コミットを修正する必要がある場合があります)

何かをする前に、フォルダーのコピーを作成してリポジトリのバックアップを作成することをお勧めします(git reflogを使用してすべてを巻き戻すこともできますが、コピーの方が簡単な場合もあります)。

幸運を

編集:「merge-commits」を失いたくない場合は、rebase d16e5ca 36cd4ffを実行することで、コミット8の上に「merge-commit-branch」全体をリベースできます(もちろん、最初のリベース後)

于 2013-01-29T12:05:11.207 に答える