我有两个分支:主人和糖果
目前他们处于同一点。这个糖果是一个将要发布的副项目,但现在已被搁置。我想在创建bonbon分支之前将master分支恢复到一个点。但是我还想保留我在bonbon分支中所做的一些更改,并且将来可能需要合并回bonbon分支,所以我不想丢失这些更改。恢复主分支并选择所需更改的最佳方法是什么。
我试图重置分支,但是当我提交并推送更改失败时,我最终又将两个分支合并在一起了!我应该做一个硬推(编辑:我的意思是强制推动)?
答案 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 --force
或git 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