--no-ff topic 1. マージベース(共通祖先)を見つける 2. マージする各コミット に対し、それぞれマージ ベースからパッチを作る C base = git merge-base main topic p main = git diff C base main p topic = git diff C base topic p main p topic
--no-ff topic C base = git merge-base main topic p main = git diff C base main p topic = git diff C base topic p main p topic 1. マージベース(共通祖先)を見つける 2. マージする各コミット に対し、それぞれマージ ベースからパッチを作る 3. マージベースの tree に各パッチを当てる
base = git merge-base main topic p main = git diff C base main p topic = git diff C base topic p main p topic ※tree 1. マージベース(共通祖先)を見つける 2. マージする各コミット に対し、それぞれマージ ベースからパッチを作る 3. マージベースの tree に各パッチを当てる 3-way merge をもう少し詳しく
ベースからパッチを作る 3. マージベースの tree に各パッチを当てる git merge --no-ff topic C base = git merge-base main topic p main = git diff C base main p topic = git diff C base topic T base = C base ^{tree} p main p topic T base 3-way merge をもう少し詳しく
ベースからパッチを作る 3. マージベースの tree に各パッチを当てる git merge --no-ff topic C base = git merge-base main topic p main = git diff C base main p topic = git diff C base topic T base = C base ^{tree} p main p topic T base
main p topic T base 1. マージベース(共通祖先)を見つける 2. マージする各コミット に対し、それぞれマージ ベースからパッチを作る 3. マージベースの tree に各パッチを当てる C base = git merge-base main topic p main = git diff C base main p topic = git diff C base topic T base = C base ^{tree}
マージベース(共通祖先)を見つける 2. マージする各コミット に対し、それぞれマージ ベースからパッチを作る 3. マージベースの tree に各パッチを当てる p main p topic T merged T base C base = git merge-base main topic p main = git diff C base main p topic = git diff C base topic T base = C base ^{tree} T merged = T base + p main + p topic
マージベース(共通祖先)を見つける 2. マージする各コミット に対し、それぞれマージ ベースからパッチを作る 3. マージベースの tree に各パッチを当てる p main p topic T merged T base C base = git merge-base main topic p main = git diff C base main p topic = git diff C base topic T base = C base ^{tree} T merged = T base + p main + p topic git checkout T base -- . git apply --index p main p topic git write-tree
マージベース(共通祖先)を見つける 2. マージする各コミット に対し、それぞれマージ ベースからパッチを作る 3. マージベースの tree に各パッチを当てる p main p topic T merged T base C base = git merge-base main topic p main = git diff C base main p topic = git diff C base topic T base = C base ^{tree} T merged = T base + p main + p topic git checkout T base -- . git apply --index p main p topic T merged = $(git write-tree)
マージベース(共通祖先)を見つける 2. マージする各コミット に対し、それぞれマージ ベースからパッチを作る 3. マージベースの tree に各パッチを当てる 4. マージした各コミット を親コミットに、パッチを当 てた tree をルート tree にしたコミットを作る C base = git merge-base main topic p main = git diff C base main p topic = git diff C base topic T base = C base ^{tree} T merged = T base + p main + p topic main = C merged ^1 topic = C merged ^2 p main p topic T merged T base C merged
マージベース(共通祖先)を見つける 2. マージする各コミット に対し、それぞれマージ ベースからパッチを作る 3. マージベースの tree に各パッチを当てる 4. マージした各コミット を親コミットに、パッチを当 てた tree をルート tree にしたコミットを作る p main p topic T merged T base C base = git merge-base main topic p main = git diff C base main p topic = git diff C base topic T base = C base ^{tree} T merged = T base + p main + p topic = C merged ^{tree} main = C merged ^1 topic = C merged ^2 C merged
マージベース(共通祖先)を見つける 2. マージする各コミット に対し、それぞれマージ ベースからパッチを作る 3. マージベースの tree に各パッチを当てる 4. マージした各コミット を親コミットに、パッチを当 てた tree をルート tree にしたコミットを作る p main p topic T merged T base C base = git merge-base main topic p main = git diff C base main p topic = git diff C base topic T base = C base ^{tree} T merged = T base + p main + p topic = C merged ^{tree} main = C merged ^1 topic = C merged ^2 C merged git commit-tree -m “Merge branch ‘topic’” -p main -p topic T merged
cherry-pick main topic rebase 前 p 0 p 1 C’ 0 C’ 1 git apply --index p 1 git commit git apply --index p 0 git commit git cherry-pick C 0 git cherry-pick C 1 rebase 後
cherry-pick main topic rebase 前 p 0 p 1 C’ 0 C’ 1 git apply --index p 1 git commit git apply --index p 0 git commit git cherry-pick C 0 git cherry-pick C 1 rebase は reset と cherry-pick を駆使している rebase 後
cherry-pick main topic rebase 前 p 0 p 1 C’ 0 C’ 1 git apply --index p 1 git commit git apply --index p 0 git commit git cherry-pick C 0 git cherry-pick C 1 rebase は reset と cherry-pick を駆使している 編集可能にしたのが git rebase --interactive rebase 後
cherry-pick main topic rebase 前 p 0 p 1 C’ 0 C’ 1 git apply --index p 1 git commit git apply --index p 0 git commit git cherry-pick C 0 git cherry-pick C 1 rebase は reset と cherry-pick を駆使している 編集可能にしたのが git rebase --interactive rebase 後
cherry-pick main topic rebase 前 p 0 p 1 C’ 0 C’ 1 git apply --index p 1 git commit git apply --index p 0 git commit git cherry-pick C 0 git cherry-pick C 1 rebase は reset と cherry-pick を駆使している 編集可能にしたのが git rebase --interactive rebase 後