3

私は初めてでgit、リベースを理解しようとしています。私の経験はClearcase.
だからまず、rebase が merge とまったく同じかどうかがわかりません。同じことに対して2つの手順があるのはなぜですか?
また、私はgit-branchingからこの部分を読んでいます。
ここにあります:
ここに画像の説明を入力

次に、次のように述べています。

$ git rebase --onto master server client
これは基本的に、「クライアント ブランチをチェックアウトし、クライアント ブランチ
とサーバー ブランチの共通の祖先からパッチを見つけ出し、それらをマスターに再生する」ことを意味します。少し複雑です。しかし、図 3-32 に示す結果は、非常に優れています。

したがって、このコマンドは、共通の祖先を除くサーバーおよびクライアントブランチの共通の祖先のにすべてのコミットを取得することを意味すると思います。ということで、次の写真で終わります。

ここに画像の説明を入力

次に、次のように述べています。

これで master ブランチを早送りできます (図 3-33 を参照):
$ git checkout master
$ git merge client

ここに画像の説明を入力

この例は私には間違っているようです。
2 番目の図では、「移動」C8C9、結果としてrebase. 次に、マージします。
しかしC8出てきてC3C3コードはmasterブランチに存在しません。
ただし、rebase新しいC8ieC8'が前にありmaster、実際にはmasterチェーン内の以前のようになっています。
しかし、これはどのように機能するのでしょうか? の一部ではないため、が失敗C8に依存している場合。 たとえば、クライアントが使用する機能がある場合、それはブランチには存在しません。したがって、の後に、で定義された関数に依存関係がありますC3rebaseC3branch
C3mainrebaseC8'C3には存在しませんmain。したがって、コードはコンパイルされません。
ワークフローの説明を手伝ってくれる人はいますか?rebaseチュートリアルのこの部分について私が言ってgit-scmいること(間違っている)は正しいですか?

4

1 に答える 1

1

いいえ、同じではありません。rebase は、リベースしたブランチの後に、リベースされたブランチのコミットを並べます。

基本マージは、マージの新しいコミット結果を作成します。

マージが明らかな場合、リベースは並列ブランチが多すぎることを回避すると言えます。ただし、マージが複雑な場合 (同じファイルでの作業など) は、マージの方が優れています。 これは、再マージ時に git が次のように差分を再計算するためです。

a = b + 差分 a c= b + 差分 c

マージは d = a + c リベースは cbis = a + diff cbis です

diff c はおそらく読みやすいですが、diff cplus は複雑かもしれません。

また、差分が単純な場合は (リベースのように) 行内でマージしようとし、そうでない場合はマージを作成する早送りオプションもあります。初心者にはこれが一番かも

于 2013-05-23T22:26:45.757 に答える