87

次のような状況があります。

  • (Y) をメイン リポジトリ (X) から作成しましたclone。Y に取り組んでいる人が多かったため、何もしませんでしたが、srebaseだけでしたmergepush( ) Y を Xに配達したいときはrebase、物事を素晴らしくきれいにするためにa を実行したいと考えています。

問題は、実行時に、前の手順rebaseで既に行ったすべてのマージを行うように求められることです。merge実際にマージをやり直すことを意味するもののほかに、これに対する解決策はありますか?

競合するマージは既に解決しているので、かなり簡単だと思っていました。

4

5 に答える 5

141

git merge --squash大量の作業と多くのマージの後にリベースする私の好みの方法です(この回答を参照してください)。作業中のブランチが呼び出されmy-branch、そこからリベースしたい場合masterは、次のようにします。

git checkout my-branch
git branch -m my-branch-old
git checkout master
git checkout -b my-branch
git merge --squash my-branch-old
git commit
于 2013-06-17T06:25:29.317 に答える
86

「クリーンな」履歴を取得するためのリベースは過大評価されています。履歴を保持したい場合の最善の方法は、リベースではなくマージを行うことです。そうすれば、リビジョンに戻る必要がある場合でも、開発中にテストしたものとまったく同じです。これにより、以前に解決されたマージの競合に関する問題も解決されます。

履歴を保存することを気にしない場合は、マスターから新しいブランチを作成してチェックアウトし、git read-tree -u -m dev作業ツリーを更新してdevブランチに一致させることができます。次に、すべてを 1 つの大きなコミットにコミットし、通常どおりマスターにマージできます。

于 2011-06-06T22:16:33.177 に答える
14

2 つの注意事項:

  • 新しくフェッチされたコミットの上に、自分の (まだプッシュされていない) 作業を何度でもリベースできます。
  • この種の状況で行われる をアクティブ化git rerereしていれば、(リベース中の) マージの競合を回避できます。
    http://git-scm.com/images/rerere2.png で詳細を参照してくださいgit rerere
于 2011-06-06T07:24:04.803 に答える