当前位置: 首页 > 知识库问答 >
问题:

如何在不丢失更改的情况下取消提交上一次未推送的git提交

严言
2023-03-14

有没有一种方法可以恢复提交,使我的本地副本保留在提交中所做的更改,但它们在我的工作副本中变成未提交的更改?回滚提交会将您带到上一次提交——我希望保留所做的更改,但是我将它们提交到了错误的分支。

这没有被推动,只是被promise。

共有3个答案

漆雕誉
2023-03-14

对于这种情况:“这没有被推送,只是提交。”-如果您使用IntelliJ(或另一个JetBrains IDE)并且您还没有推送更改,您可以进行下一步操作。

  1. 转到版本控制窗口(Alt 9/命令 9)- “日志”选项卡。
  2. 右键单击上一个提交之前的提交。
  3. 将当前分支重置为此处
  4. 拾取软 (!!!)
  5. 按对话窗口底部的重置按钮。

做。

这将“取消提交”您的更改,并将您的git状态返回到最后一次本地提交之前的状态。您不会丢失所做的任何更改。

穆宾白
2023-03-14

如果您推送了更改,您可以撤消它并将文件移回阶段,而无需使用其他分支。

git show HEAD > patch
git revert HEAD
git apply patch

它将创建一个包含最后分支更改的补丁文件。然后它恢复更改。最后,将补丁文件应用到工作树。

华泽语
2023-03-14

有很多方法可以做到这一点,例如:

如果您尚未公开推送提交:

git reset HEAD~1 --soft   

就这样,您的提交更改将在您的工作目录中,而最后一次提交将从您的当前分支中删除。参见git重置人员

如果你真的公开推了(在一个叫做‘master’的分支上):

git checkout -b MyCommit //save your commit in a separate branch just in case (so you don't have to dig it from reflog in case you screw up :) )

还原、正常提交和推送

git checkout master
git revert a8172f36 #hash of the commit you want to destroy
# this introduces a new commit (say, it's hash is 86b48ba) which removes changes, introduced in the commit in question (but those changes are still visible in the history)
git push origin master

现在,如果您希望将这些更改作为工作副本中的本地更改(“以便您的本地副本保留该提交中所做的更改”)-只需使用<code>--no commit

git revert --no-commit 86b48ba (hash of the revert commit).

我举了一个小例子:https://github.com/Isantipov/git-revert/commits/master

 类似资料:
  • 有没有一种方法可以修改提交,而不弹出(或您的)来修改提交消息,而只是简单地重用前面的消息?

  • 在本文章教程中,我们将演示如何查看 Git 存储库的文件和提交文件记录,并对存储库中的文件作修改和提交。 注意:在开始学习本教程之前,先克隆一个存储库,有关如何克隆存储库,请参考: http://www.yiibai.com/git/git_clone_operation.html 在上一步中,我们已经修改了 main.py 文件中的代码,在代码中定义了两个变量并提交代码,但是要再次添加和修改ma

  • 我正在尝试撤消自上次提交以来的所有更改。看过这篇文章后,我尝试了<code>git reset--hard。我回答说,头现在在18c3773…但当我查看我的本地源时,所有文件仍然在那里。我错过了什么?

  • 我在java中有一个函数,在这个函数中我试图获取未读的消息。例如,如果我在broker中有偏移量为0、1、2的消息,这些消息已经被使用者读取,并且如果我关闭我的使用者一个小时。那时我产生的信息偏移量为3,4,5。之后,当我的消费者启动时,它应该从偏移量3读取消息,而不是从0读取消息。但是,它要么读取所有的消息,要么读取启动Kafka Consumer后产生的消息。我想读那些未读或未提交的消息 我尝

  • 类似于: 超出Github远程推送包大小 失败消息: 背景: > 根据答案创建了一个脚本https://stackoverflow.com/a/51468389/1079483 添加令牌到url方便: $git远程设置url源https://:@github。com/path/to/repo。吉特 运行推送;几个小时后抛出上述错误?

  • 问题内容: 我在应用程序中使用Struts2框架,在JSP页面上有一个按钮。那是 现在,我希望此按钮的行为与常规HTML按钮类型相同,不应提交表单并在事件上执行脚本功能。该函数使用Ajax提交表单。 但是发生的事情是Struts2将其转换为 我的表格已提交。 1)如果我使用HTML按钮标记,它将使GUI混乱。我表单的主题是Ajax。 这是带有脚本的标签 我的标签是关注者: 任何人都有用Struts