簡単な答え:
- git cherry-pick はより「低レベル」です
- そのため、git rebase をエミュレートできます。
上記の回答は良いです。相互関係を示すために例を挙げたかっただけです。
「git rebase」をこの一連のアクションに置き換えることはお勧めしません。これは単に「概念実証」であり、物事がどのように機能するかを理解するのに役立つことを願っています。
次のおもちゃのリポジトリがあるとします。
$ git log --graph --decorate --all --oneline
* 558be99 (test_branch_1) Test commit #7
* 21883bb Test commit #6
| * 7254931 (HEAD -> master) Test commit #5
| * 79fd6cb Test commit #4
| * 48c9b78 Test commit #3
| * da8a50f Test commit #2
|/
* f2fa606 Test commit #1
たとえば、test_branch_1 に含めたい master にいくつかの非常に重要な変更 (コミット #2 から #5) があるとします。通常、ブランチに切り替えて「git rebase master」を実行します。しかし、「git cherry-pick」しか装備していないふりをしているので、次のようにします。
$ git checkout 7254931 # Switch to master (7254931 <-- master <-- HEAD)
$ git cherry-pick 21883bb^..558be99 # Apply a range of commits (first commit is included, hence "^")
これらすべての操作の後、コミット グラフは次のようになります。
* dd0d3b4 (HEAD) Test commit #7
* 8ccc132 Test commit #6
* 7254931 (master) Test commit #5
* 79fd6cb Test commit #4
* 48c9b78 Test commit #3
* da8a50f Test commit #2
| * 558be99 (test_branch_1) Test commit #7
| * 21883bb Test commit #6
|/
* f2fa606 Test commit #1
ご覧のとおり、コミット #6 と #7 は 7254931 (マスターのヒント コミット) に対して適用されました。HEAD は移動され、基本的にリベースされたブランチの先端であるコミットを指しています。あとは、古いブランチ ポインタを削除して、新しいブランチ ポインタを作成するだけです。
$ git branch -D test_branch_1
$ git checkout -b test_branch_1 dd0d3b4
test_branch_1は現在、最新のマスター位置からルート化されています。終わり!