2

私は奇妙な苦境に陥っています.開発者にブランチ全体で「git pull --rebase」を複数回実行してもらい、損傷を修復しようとしています. グラフはもともと次のようになっていました。

[master]
A--B (origin/master)
___\________________________
[branch]
     \
      C--D--E (origin/branch)

不完全なマージの後、グラフは次のようになります。

[master]
A--B---------------H--I (origin/master)
    \             /
     C--D--E--F--G
____________\_______________ 
[branch]     \
              J--K--L (origin/branch)

コミット F と G は実際にはマスターに属していますが、C、D、および E はブランチに属しています。

グラフを元に戻すための最善の策は何ですか? Commit I はすでに他のブランチやローカル リポジトリにプルされています。個々のコミットを元に戻す唯一のオプションはありますか? 上のグラフは簡略化したものです。誤ってマージされたコミットが 40 件以上あります。

F と G を B にリベースするなど、いくつかのことを試しましたが、H' と I' が作成され、既にプル/マージされた古い H と I を処理する方法がわかりません。

アップデート

マスター上の特定のコミットを git revert して、それらをブランチにパックするチェリーピックしたいだけの場合、どのようにコミットをブランチに「追加」しますか? この場合、C と D を選んで J の親にするにはどうすればよいでしょうか。

4

1 に答える 1

1

CharlesBの提案は+1。FとGをBにリベースすると、問題が解決するようです。また、HとIを最後までリベースする必要があるかもしれません。オリジンにするには-f(force)を押す必要がありますが、オリジンが必要になったら、ユーザーがプルすると、リポジトリも自動的に修正する必要があります。

Gitでは、元のノードは常に存在しますが(git gcがしばらくの間放棄されていることを検出するまで)、新しいF、G、H、およびIノードチェーンの終わりにマスターラベルを使用すると、正しい系統。

于 2013-01-05T18:56:34.153 に答える