我是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个提交))(plz如我错了请纠正我)
那么我该如何推送硬重置所做的更改?
Git尝试在适用的情况下保留历史记录,因此使用默认设置时,它不会在推送时“还原”分支。
为了用本地分支的尖端(头部)强制覆盖远程分支,传统方法是使用“强制推送”:
git push -f
git push --force # Equivalent
但是,请注意,上面的命令将所有分支推入“强制模式”。如果要通过仅推送一个分支来更安全地执行此操作,请使用以下语法:
git push origin +master
加号表示“覆盖”,并且您已经指定了分支名称,master
将仅强制按下该名称。
两种方法都涵盖“还原”和“使用不同历史记录进行覆盖”的两种情况。
顺便说一句,这种理解是(部分)错误的:
硬重置会删除该特定提交后的所有git历史记录
硬复位也不会删除从Git的本地存储(任何提交.git
的目录),但只出任何文件改为指向当前的分支(头)在目标提交和检查。
您的提交将保留在Git存储中,直到GC为止。验证它们仍然存在(并且完好无损!)的最简单方法是检查的输出git reflog
。您也可以使用与所需命令类似的命令将其检回git checkout/reset 'HEAD@{1}'
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句