大抵、はい、しかし正確にはそうではありません。
まず、git rebase
が実装される3つの方法があります。対話型のものと-m
のものは、文字通りgit cherry-pick
を実行します。非インタラクティブ非マージ1は内部でデフォルトでgit format-patch | git am
を使用します。これにより、git cherry-pick
とは異なる結果が生じることがあります。
第2に、すべてのコミットが選択されるわけではありません。特に、git rebase
は、一般に次のものを排除します。
- マージするコミット。
- "空"のコミット(差分なしのコミット)。そして
- は、Git決定がであり、すでに cherry-pickedであるとします。
はそれだけで気にしないように、文字通り(結局それらをコピーしないが、代わりにがマージを再実行)-p
を使用している場合を除き、コピーすることはできませんマージします。 Empty-diffコミットはgit format-patch
を介してコピーすることはできません。そして、一般的に正しいとは言えませんので、デフォルトでは破棄します。 -k
(空のままにする)を追加すると、非インタラクティブ・リベースを使用してもgit cherry-pick
となります。 copy empty-diffはコミットします。
最後に、オプションによっては、「フォークポイント」コードを使用して、コピー先のコミットの一部を破棄することができます。 --no-fork-point
を使用すると、このオプションは無効になり、デフォルトではの一部のリベースでは無効になりますが、デフォルトでは無効になります。詳細はthe git rebase
documentationに記載されています。
git rebase -m
またはgit rebase -i
を実行していない限り、表示される違いは、おそらくgit format-patch | git am
が原因です。 git am
がであるときに、git apply -3
が実行されたときに異なる方法で適用される特定のコミットを識別できる場合には便利です(コミットが発生することはまれです(人工的な例を構築する時間がない、 実の例がおそらくより価値があります)。
この決定を行うために、Gitはあなたが手動で実行することができgit patch-id
を、使用しています。 git cherry
またはgit rev-list
を使ってGitに自動的に実行させることができます。
git rev-list --cherry-pick --right-only --no-merges upstream...HEAD
(対称差セレクタを呼び出し、3個のドットを、注意してください):リベースコードは(時には--reverse --topo-order
を使用して、git format-patch
に、これらの引数、またはその同等物を通過させることによって)git rev-list
を使用します。
[参考](https://stackoverflow.com/q/11835948/720999)。 – kostix
あなたがチェリーピッキングとなるコミットのリストを確認しましたか?リベースするときに移植するリストと同じですか? 'git log --reverse feature^$(git merge-base feature master)'を実行して後者を取得します。 – kostix