A --- c1 ---c2
clone 后,在本地提交了 c3-7 5 个 commits, 但是最后只想提交 c6 和 c7 到远程服务器,这可以做到么? A----c1 --- c2 \---c3 ----c4 ---- c5 ---- c6 ---- c7
先git rebase -i head~7,然后将 c6,c7 移到 c1,c2 之前变成 A---c6---c7---c1---c2---c3---c4---c5,然后再 check out 新的 branch,到 c7,然后推送到远程
git rebase -i head~7
如果交互式 rebase 有困难的话,简单一点也更好理解:
另外那个分支不要了可以删掉,或者留着 reset --hard 到 c5,这样随时可以 merge 或 cherrypick 到 master
如果没有提交到远程的话,先 git reset --soft c2, 将所有的 commit 回滚,但是保留代码,然后重新 commit 就可以了
基于你远程分支 开一个新的分支, 然后 把你想要的 commit 一个一个的 cherry-pick 到新分支。 最后 psuh 本地新分支,到远程分支
#4 楼 @ery 本地新分支,最后删除?本质上是把远程分支上的部分 commit 删除掉么?
远程分支A C1 -- C2 本地分支A C1 -- C2 -- C3 -- C4 -- C5 -- C6 -- C7
git checkout -b B origin/A
远程分支A C1 -- C2 本地分支A C1 -- C2 -- C3 -- C4 -- C5 -- C6 -- C7 本地分支B (新分支) C1 -- C2
git cherry-pick C6 git cherry-pick C7
C6 -> D6 C7 -> D7
远程分支A C1 -- C2 本地分支A C1 -- C2 -- C3 -- C4 -- C5 -- C6 -- C7 本地分支B (新分支) C1 -- C2 -- D6 -- D7
git push origin B:A
远程分支A C1 -- C2 -- D6 -- D7 本地分支A C1 -- C2 -- C3 -- C4 -- C5 -- C6 -- C7 本地分支B (新分支) C1 -- C2 -- D6 -- D7
git checkout A git branch -d B git reset origin/A --hard
远程分支A C1 -- C2 -- D6 -- D7 本地分支A C1 -- C2 -- D6 -- D7