我是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个提交领先) )(如果我输入错了,请纠正我)
那我该如何推送硬重置所做的更改?
答案 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}'
的命令将它们重新检查。