即我怎么去
主:ABCDEFG
至
大师:ABEFG \ 特点:CD
显然,现在很明显 CD 应该在功能分支中,因为该更改现在已延迟。
这与我在这里和这里看到的其他问题略有不同
从HEAD
(G) 开始master
:
git branch feature D # Create new branch at D.
git rebase -i B # Use interactive rebase to remove C D from master.
这个答案假设您要么没有推动master,要么您是唯一从事该项目的人(在这种情况下,这并不重要)。如果您推送了master并且其他人提取了您的更改,您需要与他们沟通以确保他们适当地更新他们的存储库。
# Assuming you're on master
git branch <feature> <D> # Create a branch named <feature> at commit <D>
git rebase --onto <B> <D> master # Transplant branch
Git rebase文档对做什么有很好的图形解释rebase --onto
。
如果你想rebase
完全避免,你应该能够做到
git branch <feature> <D> # Create a branch named <feature> at commit <D>
git revert <D> # undo D
git revert <C> # undo C
这将导致这样的历史
A-B-C-D-E-F-G-!D-!C
^ ^
feature master
签出master的任何人都会看到代码,就好像提交C和D从未发生过一样,您的历史记录中只会有几次还原。这是从已推送的分支中支持更改的首选方式。