经典案例" 从这里开始" ...就像所有事情的方式一样,解体已经降临到我们的Git,树的样子像这样的东西:
A-B-C-D master
\
E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T... exciting new stuff
虽然不幸的事实是它会更好地反映出这样的事情:
P-Q failed idea
/
A-B-C-D K-L-M-N-O U-V... master
\ / \ /
\ / R-S-T oh god fix it fix it arghh
\ /
E-F-G-H-I-J exciting new stuff
为便于注释,请使用数字:
P-Q Branch 2
/
A-B-C-D K-L-M-N-O U-V... master
\ / \ /
\ / R-S-T Branch 3
\ /
E-F-G-H-I-J Branch 1
我发现的最近的事情就是这个问题:
How do I move recent (but not latest) commits to a new branch
但我还不清楚最终答案实际上最终会让我想要尝试并看到。
如果有帮助,项目规模很小,而且没有多人积极参与,所以假设我们可以摆脱顽皮的行为,例如"改变历史"。如果这会产生影响,那么它们都生活在github服务器上,因此我们希望最终得到该服务器上反映的更改,而不仅仅是本地服务器。
修改
好的,我会尝试对我想做的事情更加清楚。
我真的应该说:PQ是一个有效回滚的死胡同,所以处理你觉得最好!这个项目遭受了混乱的恐慌和混乱,值得整个Dilbert条带,因此Git树和我自己的心理健康受到了严重影响。
起点当前树如下所示:
A-B-C-D master
\
E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T... exciting new stuff
第1步我想结束这个:
A-B-C-D K-L-M-N-O-P-Q-R-S-T... master
\ /
E-F-G-H-I-J Branch 1
第2步我希望这样做:
P-Q Branch 2
/
A-B-C-D K-L-M-N-O-R-S-T... master
\ /
E-F-G-H-I-J Branch 1
我认为,如果我能够完成这些工作而不会将宇宙劈成两半,我就可以从那里完成其余工作。
答案 0 :(得分:2)
为了澄清,我将分支命名为令人兴奋的
第1步
这
A-B-C-D master
\
E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T... exciting
到
A-B-C-D K-L-M-N-O-P-Q-R-S-T... master
\ /
E-F-G-H-I-J exciting
你可以做到
$ git checkout master
$ git cherry-pick K
$ git cherry-pick L
$ git cherry-pick M
$ git cherry-pick N
$ git cherry-pick O
$ git cherry-pick P
$ git cherry-pick Q
$ git cherry-pick R
$ git cherry-pick S
$ git cherry-pick T
这看起来相当丑陋所有单独的樱桃选择,可能有一个更清洁的方式,但我不知道它从头顶。
挑选一切你想要掌握的东西
$ git checkout exciting
$ git reset --hard HEAD^^^^^^^^^^ # Reset back 10 commits, HEAD~10 would also work
第2步
来自
A-B-C-D K-L-M-N-O-P-Q-R-S-T... master
\ /
E-F-G-H-I-J exciting
到
P-Q Branch 2
/
A-B-C-D K-L-M-N-O-R-S-T... master
\ /
E-F-G-H-I-J exciting
你可以做到
$ git checkout -b branch2 Q # make new branch2 at commit Q
$ git checkout master
$ git rebase HEAD~8 --interactive # 8 may not be the correct number. Pick big enough number so that P and Q are included
在弹出的编辑器中,删除代表提交P和Q的行,将其从master
的历史记录中删除。他们仍然住在branch2
要将其推送到远程,您将不得不重写大部分历史记录,需要git push --force
才能生效。 确保您在本地拥有的repo状态是您在遥控器上所需的状态,并且该遥控器不包含您在本地没有的提交。否则他们将会迷路。