硬重置后推送git分支

时间:2020-06-24 08:36:36

标签: git github

我是git的初学者,所以请原谅我愚蠢的话。

好的,所以我有一个本地分支,在该分支中,我已硬重置为某个提交。现在,当我执行git status时,它表明-

On branch product
Your branch is behind 'origin/product' by 3 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean

这就是为什么我不能按下分支的原因,因为我首先必须拉出更改。

现在,我确实知道为什么会这样((因为硬重置会删除该特定提交之后的所有git历史记录,而远程分支确实具有那些提交,因此它告诉我Origin / product分支比3个提交领先) )(如果我输入错了,请纠正我)

那我该如何推送硬重置所做的更改?

1 个答案:

答案 0 :(得分:1)

Git尝试在适用的情况下保留历史记录,因此使用默认设置,它不会在推送时“还原”分支。

要用本地分支的尖端(头部)强制覆盖远程分支,传统方法是使用“强制推送”:

git push -f
git push --force  # Equivalent

但是,请注意,上面的命令以“强制模式”将分支 all 推送。如果您想通过仅推送一个分支来更安全地进行操作,请使用以下语法:

git push origin +master

加号表示“覆盖”,并且您已指定分支名称,将仅强制使用master

这两种方法都涵盖“还原”和“使用不同历史记录进行覆盖”这两种情况。


顺便说一下,这种理解是(部分)错误的:

硬重置在特定提交后删除所有git历史记录

硬重置不会不会从Git的本地存储(.git目录)中删除任何提交,但只会将当前分支(头)指向目标提交,并检出所有文件改变了。

您的提交将保留在Git存储中,直到GC为止。验证它们仍然存在(并且完好无损!)的最简单方法是检查git reflog的输出。如果需要,您还可以使用类似于git checkout/reset 'HEAD@{1}'的命令将它们重新检查。