我想将我承诺的最后几次提交移动到一个新的分支,并在提交之前将 master 带回。不幸的是,我的 Git-fu 不够强大,有什么帮助吗?8 Q" @( ]$ [/ i# Q- {9 W3 p9 X/ m
也就是说,我怎么能从这里开始 , ]8 U j' ]2 z6 H/ ^% q/ @master A - B - C - D - E到这个?4 M5 p5 H" [, q r( e
newbranch C - D - E master A - B 8 H3 p6 _3 e* v v" G3 A 解决方案: 1 P3 t, O8 o: x0 b1 C
转移到现有分支机构如果您想将提交移动到现有分支,如下所示: ) d# g5 v+ o& k8 R7 bgit checkout existingbranchgit merge mastergit checkout mastergit reset --hard HEAD~3 # Go back 3 commits. You *will* lose uncommitted work.git checkout existingbranch在执行此操作之前,您可以使用它git stash. 完成后,您可以使用以下命令检索隐藏的未提交编辑git stash pop8 {" w9 `& L0 ?! a. D
提交到新的分行警告:*这种方法是有效的,因为使用第一个命令创建一个新的分支:git branch newbranch。移动提交现有分支,实施前需要将变更合并到现有分支git reset --hard HEAD~3(请参阅以上内容移动到现有分支)。*如果不先合并更改,就会丢失。 8 m& b! i: ~* F6 L5 B除非涉及其他情况,否则可以通过分支和回滚轻松完成。$ I+ I) ~ ~5 }7 j
# Note: Any changes not committed will be lost.git branch newbranch # Create a new branch,saving the desired commitsgit reset --hard HEAD~3 # Move master back by 3 commits (Make sure you know how many commits you need to go back)git checkout newbranch # Go to the new branch that still has the desired commits Q1 {. Z' i l. v, b8 s# |
但一定要确定要返回多少次。或者,你可以取代它HEAD~三、简单提供要在主(/当前)分支恢复提交(或像origin/master例如: 7 V, D- W# J' M) t: ?
git reset --hard a1b2c3d4 0 Z4 H, S0 P" `9 e0 H
1 你只会* 丢失master 分支提交,但别担心,你会在 newbranch 有这些提交!& D. O; {: i4 t3 P, R! b; {- a) F, f 警告:对于 Git 2.0 和更高的版本,如果你稍后git rebase原始 ( master) 可能需要在分支上创建新的分支--no-fork-point变基期间使用显式选项,避免结转提交丢失。branch.autosetuprebase always一套使这种可能性更大。