11

機能ブランチを別の機能ブランチにリベースしたところ(すべてをマスターのヘッドにリベースする準備として)、かなりの数のトリッキーなマージ解決が含まれていました。

リベースはコミットとしてどこかに自動的に保存されますか?

それらの変更はどこにありますか?gitk、またはで何も表示されませんgit log --oneline

(リベース後にブランチをマージして戻す場合も同じ質問です。)

4

3 に答える 3

10

Rebaseは、コミットを別のブランチの上に移動しています。移動されたコミットによってマージの競合が発生した場合、このコミットはマージの解決を反映するように変更されます。

リベースの目的は、コミットをリベース先のブランチへの変更であるかのように見せることです。したがって、最も論理的な方法は、これらのコミットにマージの競合を組み込むことです。したがって、追加のコミットは必要ありません。

マージは、分岐したブランチをマージする明示的なアクションであるため、異なります。各ブランチのコミットは変更されません。競合の解決は、マージコミットに反映されます。

于 2010-04-22T09:47:32.240 に答える
6

はい、リベースとマージが成功するとコミットされます。解決が必要な競合があることをコミットすることはありませんが、リベース(またはマージ)の出力は、これが発生したことと、それを解決する方法を示します。

リベースの場合は、インデックス内の競合を解決してから、を解決する必要がありますgit rebase --continue

マージの場合、コミット(git commit)を行う必要がありますが、それがマージであるという事実が記憶され、編集するための適切なデフォルトのコミットメッセージが提供されます。

于 2010-04-22T09:37:01.947 に答える
2

昔(2006年、1.5.3以前とそのユーザーマニュアル)は、次のようgit rebaseに提示されていました:

チェリーピッキングの特殊なケースは、ブランチ全体を新しい「ベース」コミットに移動する場合です。
これはによって行われgit-rebaseます。
移動するブランチ(デフォルトHEAD)と移動先(デフォルトなし)を指定し、次のようにします。

  • git cherry-picksそのブランチからのすべてのパッチ、
  • ターゲットの上にそれを適用し、
  • refs/heads/<branch>ポインタを新しく作成されたコミットに移動します。

したがって、定義上、コミットが行われます(コミットを行う必要はありません)

リベースの特殊なケースは、作業を分割し、コミットを移動(および再作成)する場合です。
同じチュートリアルから(リベース後にそれ以上コミットする必要がないことの例として):

現在のHEAD、「dev」と呼ばれるブランチで2つの機能の開発を混同したとします。

x-x-x-x  (master)
       \ 
        -f1a-f1b-f1c-f2a-f2b-f2c (dev, HEAD)

それらを「dev1」と「dev2」に分割します。HEADそれがマスターからの分岐であると仮定すると、どちらかを調べることができます

git log master..HEAD

または、コミットの生のリストを取得します

git rev-list master..HEAD

いずれにせよ、必要なコミットのリストを見つけて、dev1そのブランチを作成するとします。

git checkout -b dev1 master
for i in `cat commit_list`; do
    git-cherry-pick $i
done

        -f1a'-f1b'-f1c' (dev1, HEAD)
       /
x-x-x-x  (master)
       \ 
        -f1a-f1b-f1c-f2a-f2b-f2c (dev)

編集したリストの残りの半分を使用してdev2ブランチを生成できますが、何かを忘れたかどうかわからない場合、または単にその手動作業を実行したくない場合は、git-rebaseを使用して実行できますあなたのために。

git checkout -b dev2 dev    # Create dev2 branch
git-rebase --onto master dev1   # Subreact dev1 and rebase

devこれにより、含まれているパッチと含まれていないパッチがすべて検索されdev1、マスターの上に適用され、結果が呼び出されますdev2

        -f1a'-f1b'-f1c' (dev1, HEAD)
       /
x-x-x-x  (master)
       \ 
        -f2a-f2b-f2c (dev2, HEAD)
于 2010-04-22T11:08:18.780 に答える