将主分支恢复到以前的状态

时间:2012-01-05 12:04:05

标签: git branch

我有两个分支:主人和糖果

目前他们处于同一点。这个糖果是一个将要发布的副项目,但现在已被搁置。我想在创建bonbon分支之前将master分支恢复到一个点。但是我还想保留我在bonbon分支中所做的一些更改,并且将来可能需要合并回bonbon分支,所以我不想丢失这些更改。恢复主分支并选择所需更改的最佳方法是什么。

我试图重置分支,但是当我提交并推送更改失败时,我最终又将两个分支合并在一起了!我应该做一个硬推(编辑:我的意思是强制推动)?

2 个答案:

答案 0 :(得分:2)

至于问题的第一部分。如果与bonbon分支的合并只是顶级提交,那么您只需要将主分支重置为合并之前的状态。

git reset --hard HEAD~1

如果您有多个合并点,则必须执行交互式rebase

git rebase -i

现在用于将repo与远程同步。由于您刚刚覆盖了历史记录,因此git不仅允许您提交此状态。你必须强行推动。

git push --force

请注意,这将重写远程仓库的历史记录,任何使用此仓库的人都必须强制执行更改。

答案 1 :(得分:1)

我的猜测是,在master分支上重置分支你的意思是这样的:

git reset --hard some_ref_below_master

在这种情况下,推送将失败,因为默认情况下对特定分支的推送要求(远程分支与本地分支的合并)是快进的,即远程的ref是您本地参考的直接父母。

因此,除了强制推送之外别无选择 - 使用git push --forcegit push +localref:remoteref(如果远程引用具有相同的名称,则可以省略本地引用规范)。

例如:

git push remote +master # force local and remote master on the same commit
git push +foo:bar # force remote's bar ref to point to the same commit as local's foo