转自Ruby China:Git 如何忽略部分 commits,只 push 一部分 commits 呢?

A --- c1 ---c2

clone后,在本地提交了c3-7 5个commits, 但是最后只想提交 c6和c7到远程服务器, 这可以做到么? A----c1 --- c2 ---c3 ----c4 ---- c5 ---- c6 ---- c7

ery · #6 · 2015年06月02日

远程分支A C1 -- C2
本地分支A C1 -- C2 -- C3 -- C4 -- C5 -- C6 -- C7

创建新本地分支B(基于远程分支A)

git checkout -b B origin/A
远程分支A         C1 -- C2
本地分支A         C1 -- C2 -- C3 -- C4 -- C5 -- C6 -- C7
本地分支B (新分支) C1 -- C2

选择你想要的commit

git cherry-pick C6
git cherry-pick C7

注意 cherry-pick 后 CommitID会变化

C6 -> D6 C7 -> D7

远程分支A         C1 -- C2
本地分支A         C1 -- C2 -- C3 -- C4 -- C5 -- C6 -- C7
本地分支B (新分支) C1 -- C2 -- D6 -- D7

推送本地分支B 到 远程分支A

git push origin B:A
远程分支A         C1 -- C2 -- D6 -- D7
本地分支A         C1 -- C2 -- C3 -- C4 -- C5 -- C6 -- C7
本地分支B (新分支) C1 -- C2 -- D6 -- D7

删除分支B,让本地分支A和远程分支A保持一致

git checkout A
git branch -d B
git reset origin/A --hard
远程分支A C1 -- C2 -- D6 -- D7
本地分支A C1 -- C2 -- D6 -- D7