【问题标题】:Pushing git branch after hard reset硬重置后推送git分支
【发布时间】:2020-10-14 11:19:00
【问题描述】:

我是 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 github


    【解决方案1】:

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

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

    git push -f
    git push --force  # Equivalent
    

    但是,请注意,上述命令会将您的分支所有推送到“强制模式”。如果您想通过只推送一个分支来更安全地执行此操作,请使用以下语法:

    git push origin +master
    

    加号表示“覆盖”,当你指定了分支名称时,只有master会被强制推送。

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


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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-08-13
      • 2017-02-23
      • 2021-06-21
      • 2018-06-21
      • 2019-08-10
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多