[英]How to move commits to another branch?
我想将我最后几次提交从master转移到他们自己的分支中。
我电脑上的树看起来像这样:
W (some branch)
/
X1--X2--X3--X4--Y--Z1--Z2 (master)
我希望它看起来像:
W (some branch)
/
X1--X2--X3--X4 (master)
\
Y--Z1--Z2 (my new branch)
但是,GitHub上的树看起来像:
W (some branch)
/
X1--X2--X3--X4--Y (master)
这就是我所看到的将最后提交移动到另一个分支的解决方案:
git checkout master
git branch my_new_branch
git reset <commit_id>
我的问题是:在将提交移动到新分支后,我是否能成功推送到GitHub?如果是这样,它还需要做除了这三个命令之外的其他操作吗?
(我假设<commit_id>
是X4
的对象名...)
这些命令确实会让你最终得到你想要的东西。 (你可能想使用git reset --hard
来保持工作树和索引与你重置的提交一样,但是像往常一样,在使用该命令之前要非常小心git status
是干净的。)
如果你之后尝试将master推送到GitHub,它会告诉你所有内容都已经是最新的,因为GitHub上的master
是一个提前提交。 你可以强制推送,以便在GitHub上重置master,但是这会重写公共历史记录,所以你应该这样做,如果(a)你是唯一一个从GitHub获取master
或(b)你可以让你的合作者知道是什么让他们不小心将Y
合并回来。如果没关系,你可以这样做:
git push --force origin master
...然后GitHub上的master
将与您的本地版本相同。
它应该工作,但你需要:
push -f origin master
(强制推送,如果其他人已经克隆你的回购,这将会造成麻烦) X4
sha1,表示将设置新分支)。 没有人提到你可以简单地将提交选择到另一个分支。 这样您的提交消息仍然适合您。
只需复制您要移动的提交的修订ID。 git log --oneline
比在前一次提交之上创建一个新分支并更改为它: git checkout -b "$newBranchName" HEAD~$n
(HEAD~ $ n代表第n次提交)或git checkout -b "$newBranchName" $formerRevsion
现在你只需要选择想要的提交: git cherry-pick $revision
旧提交仍将在另一个分支中,但您可以使用rebase修复它。 移回旧分支并使用rebase: git rebase -i HEAD~$n
只需删除樱桃挑选提交的提交行,您的分支就会被重新定位。 你必须使用git push -f
因为所有重新提交的提交的修订都已更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.