【问题标题】:Unable to push reverted file to repository after git resetgit reset 后无法将恢复的文件推送到存储库
【发布时间】:2017-02-08 08:16:11
【问题描述】:

注意 - 我刚开始了解 git reset 命令,所以我不确定它是否是我想做的正确命令,这很简单。

我想撤消上一次 git push 中所做的更改。 因此,我运行了以下重置命令以返回所需的提交哈希(在不需要的提交哈希之前的一个)-

git reset <last desired commit hash> <file name>

在此之后,文件本身(工作目录)没有任何更改。但是,git status 表明该文件已被修改。

 modified:   <filename>

现在在做git stash 时,工作目录文件被修改了。但是,我没有看到将更改推送到远程存储库的选项。 Git pull 也显示没有任何变化。

【问题讨论】:

  • (1) 它可能不是正确的命令,至少,不像使用的那样。 (2) 可能的重复包括stackoverflow.com/q/927358/1256452stackoverflow.com/q/2318777/1256452 (3) 推送中不进行更改;在工作树中进行更改,然后通过git addgit commit 作为新快照提交。
  • git stash 将隐藏您的更改,因此它们将无法推送。在git stash之前,文件上diff的结果是什么?
  • @thebluefox diff 在工作目录上使用 UI 工具在左侧显示所需的版本,在右侧显示不需要的版本。在采取了新的pull 之后,我终于做了以下事情 - git reset --hard git push -f 这已删除完全来自提交日志的不需要的提交。
  • @SandeepanNath 你得到了你期望的答案?? :))

标签: git git-reset


【解决方案1】:

你可以用这个解决你的方法中的疑虑。

  • git reset &lt;last desired commit hash&gt; &lt;file name&gt;。这会将您想要的文件(&lt;file name&gt;)恢复为&lt;last desired commit&gt; 指定的版本。而且您仍将留在当前分支中。

  • 如果您指定的文件在您拥有的版本和您恢复的版本之间有任何差异,那么在您执行之前的命令后不久就会出现这种文本。 Unstaged changes after reset: M <file name>

  • 您可以通过以下命令进行验证。 git diff &lt;file name&gt;。然后它将显示发生的变化。

  • git stash 将删除任何未暂存的提交。所以很明显在git stash之后你不能提交或推送,因为没有任何变化。 git pull 也不起作用。原因是您的本地分支不会落后于git reset 的提交。所以它在远程分支中有所有提交。所以git pull 没有新的提交。

  • 您可以尝试以下方法。做git stash apply。因此,您的文件将再次进入上次所需提交的状态。通过git diff &lt;file name&gt; 验证更改。然后提交并推送。

  • 如果在检查差异时没有出现预期的更改,则问题应该出在其他方面,而不是版本控制。 :))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-15
    • 2011-03-14
    • 1970-01-01
    • 2011-01-02
    • 2021-09-09
    • 2016-06-27
    • 2011-12-09
    相关资源
    最近更新 更多