硬重置后推送 git 分支

  • 本文关键字:git 分支 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 次提交((如果我错了,请纠正我(

那么如何推送硬重置所做的更改呢?

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

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

git push -f
git push --force  # Equivalent

但是,请注意,上面的命令以"强制模式"推送所有分支。如果要通过仅推送一个分支来更安全地执行此操作,请使用以下语法:

git push origin +master

加号表示"覆盖",并且由于您指定了分支名称,因此只会强制推送master

这两种方法都涵盖了"还原"和"用不同的历史覆盖"两种情况。


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

硬重置会删除特定提交后的所有 Git 历史记录

硬重置不会从 Git 的本地存储(该.git目录(中删除任何提交,而只会将当前分支(头(指向目标提交,并签出任何更改的文件。

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

最新更新