我想将我已承诺掌握的最后几个提交移动到新的分支,并在做出这些提交之前将master重新带回去。不幸的是,我的Git-fu还不够强大,有什么帮助吗?
即我该如何去
master A - B - C - D - E
对此吗?
newbranch C - D - E
/
master A - B
如果要将提交移至现有分支,则它将如下所示:
git checkout existingbranch
git merge master
git checkout master
git reset --hard HEAD~3 # Go back 3 commits. You *will* lose uncommitted work.
git checkout existingbranch
警告:此方法有效,因为您要使用第一个命令创建新分支:git branch newbranch
。如果要将提交移动到现有分支,则需要在执行之前将所做的更改合并到现有分支中git reset --hard HEAD~3
(请参见上方的“移动到现有分支”)。如果您不先合并更改,它们将丢失。
除非涉及其他情况,否则可以通过分支和回滚轻松完成。
# Note: Any changes not committed will be lost.
git branch newbranch # Create a new branch, saving the desired commits
git 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
但是,请确保要返回多少次提交。或者,您可以代替HEAD~3
,仅提供要在主(/当前)分支上“还原回”的提交(或引用,例如origin / master),例如:
git reset --hard a1b2c3d4
* 1您只会从master分支“丢失”提交,但是不用担心,您将在newbranch中拥有这些提交!
警告:在Git 2.0版及更高版本中,如果您git rebase
在原始(master
)分支上以后再使用新分支,则--no-fork-point
在变基过程中可能需要一个显式选项,以避免丢失遗留的提交。拥有branch.autosetuprebase always
一套使这个可能性比较大。有关详细信息,请参见John Mellor的答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句