如何撤消 Git 中最近的本地提交?

2023-11-25

我不小心提交了错误的文件Git,但尚未将提交推送到服务器。

我如何撤消这些提交local存储库?


撤消提交并重做

$ git commit -m "Something terribly misguided" # (0: Your Accident)
$ git reset HEAD~                              # (1)
[ edit files as necessary ]                    # (2)
$ git add .                                    # (3)
$ git commit -c ORIG_HEAD                      # (4)
  1. git reset是负责的命令undo。它将撤消您的最后一次提交保持工作树(磁盘上文件的状态)不变。您需要再次添加它们,然后才能再次提交它们。
  2. 进行更正工作树 files.
  3. git add您想要包含在新提交中的任何内容。
  4. 提交更改,重用旧的提交消息。reset将旧头复制到.git/ORIG_HEAD; commit with -c ORIG_HEAD将打开一个编辑器,其中最初包含旧提交的日志消息并允许您对其进行编辑。如果您不需要编辑消息,您可以使用-C option.

或者,编辑先前的提交(或仅编辑其提交消息), commit --amend会将当前索引中的更改添加到先前的提交中。

删除(而不是恢复)已推送到服务器的提交,重写历史git push origin main --force[-with-lease]是必要的。It's 几乎总是使用是个坏主意--force;更喜欢--force-with-lease相反,如中所述git 手册:

如果您[重写历史]已经发表,您应该了解重写历史的含义。


进一步阅读

您可以使用git reflog确定 SHA-1对于您想要恢复的提交。获得此值后,请使用如上所述的命令序列。


HEAD~是相同的HEAD~1。文章git 中的 HEAD 是什么?如果您想取消提交多个提交,这很有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何撤消 Git 中最近的本地提交? 的相关文章

  • 如果我想将分支合并到主干上,“svn merge --reintegrate”和不重新集成的 svn merge 有什么区别

    In the svn book http svnbook red bean com en 1 7 svn ref svn html svn ref svn sw reintegrate它说merge s reintegrate是 将源 UR
  • Mercurial日志接口

    我一直在浏览 hginit com 上的教程 但我发现了一个相当不方便的方面hg log特征 基本上 当我输入它时 我会在顶部看到最新的更改 在底部看到最旧的更改 但这很烦人 因为大多数时候 您希望看到最新的修订版 所以 假设我有 100
  • Git 将开发分支与生产版本的主分支合并

    我正在使用 Git 进行代码版本控制 我有一个开发分支 我正在其中进行所有肮脏的开发 每次我向世界发布生产版本时 我都想将其放在我的 master 分支下 问题是 每当我合并开发和 master 时 master 都会收到所有开发历史记录
  • 在单独的终端屏幕上显示 git diff 和 git log 输出

    设置新的开发环境后 我遇到了一个奇怪的 git 行为 我不记得过去见过 我习惯于git diff and git log在终端中创建一个新屏幕并在其中显示其输出 什么less默认情况下 我用它作为我的寻呼机 然后我可以退出并返回到之前的终端
  • Git Add - 致命:添加文件失败

    我的 git cmd exe 窗口如下所示 git add NextFolder error unable to create temporary file No such file or directory error NextFolde
  • 将存储库移至另一台计算机

    我已将存储库从计算机 A 移至计算机 B 我已验证等待推送的提交仍在 B 上 但整个存储库 每个文件 均未暂存 我不想添加它们并将它们作为提交推送 因为从复制存储库到粘贴它 我没有更改每个文件 当我移动存储库时 它只有等待推送的提交 而不是
  • Gitolite 与 LDAP 不工作

    我是 gitolite 的新手 我正在尝试用 gitolite 进行一个非常简单的测试 我已经设置了名为 test repo 的存储库 请注意 除了下面所述之外 我没有修改任何其他内容 我可以在 gitweb 中看到这个仓库 这是仓库配置
  • 使用 git filter-branch 然后 git push --force 清除大文件后,远程(Gitlab)上的 Git 存储库大小仍然很大

    我已按照 Gitlab 文档中有关 使用 Git 减少存储库大小 的说明进行操作 通过从历史记录中清除大文件 https docs gitlab com ee user project repository reducing the rep
  • Django 和 VirtualEnv 开发/部署最佳实践

    只是好奇人们如何结合 virtualenv 部署 Django 项目 更具体地说 如何使生产虚拟环境与开发计算机正确同步 我使用 git 进行 scm 但 git 存储库中没有 virtualenv 我应该这样做 还是最好使用 pip fr
  • Azure Devops Pipeline YAML 中的 Git 标记名称

    Summary 如何获取 Azure Devops Pipeline YAML 文件中当前 git 标签的名称 我想做什么 我正在 Azure Devops 中设置构建管道 创建新的 git 标签时会触发管道 然后我想构建 docker 镜
  • “git merge --squash”的正确用例是什么?

    有些人喜欢git merge squash由于以下原因 压缩到单个提交使您有机会清理混乱的 WIP 提交 并为您要合并的更改提供良好的理由 https coderwall com p qkrmjq git merge squash http
  • Git 身份验证 - 以新用户身份拉取

    以下命令集可以正常工作 mkdir carboncake cd carboncake git init git remote add origin email protected cdn cgi l email protection rep
  • 仅将单个文件放入 git 子模块/存储库中

    我在 git 源代码存储库中有一个特定文件 其中包含生产设置 密码 我想限制此文件 以便只有制作团队的成员才能看到它 但是 我想控制它的变化 我考虑过在 git 中使用子模块 然后限制对新存储库的访问 然而 git 似乎需要子模块的整个子目
  • 相当于 svnblame/gitblame 的clearcase?

    在 Rational Software 的 Clearcase 中 有一个cleartool子命令或其他命令行工具 相当于blameSVN 中的命令还是 git 中的命令 最接近的一个是cleartool annotate https ww
  • 从 Eclipse 的历史视图中删除 ORIG_HEAD 和 FETCH_HEAD

    我最近开始使用 Eclipse Kepler 和 EGit 插件 这些分支不是我习惯的 有没有办法永久阻止这些分支的创建 我尝试手动删除它们 但它不起作用 并且我不想在下次获取或变基时保留它们 据我从对您问题的评论中了解到 您只希望这些参考
  • 警告:引用名称“xxx”不明确

    我想知道为什么我收到 refname is ambigeous 的警告 这是否意味着名称以该字符串开头的分支不超过两个 但这里没有 Thanks git checkout B03799 warning refname B03799 is a
  • git 从存储中删除文件

    我有一个藏匿处 里面有一堆文件 但由于文件冲突 我无法应用我的存储 我已经在我的存储中发现了有问题的文件 我想将其删除 如何从存储中删除单个文件而不破坏整个文件 存储是一次提交 或者实际上是两次甚至有时是三次提交 并且您无法更改提交 那么
  • 如何使用 git-tfs 清理损坏的历史记录

    我不确定我是如何进入这种状态的 但我的 tfs 默认远程分支中有一些 TFS 中不存在的提交 所以我想摆脱它们 所以我的历史是这样的 A B C D tfs default 但提交 B 和 C 实际上并不是 TFS 中的变更集 因此 当我签
  • Jenkins groovy - 如何从最新提交中检索标签?

    从中获取最新提交branchName 我们运行下面的代码 treeMapData git branch branchName credentialsId credential url gitLabServer projectName rep
  • Git rebase --继续而不打开编辑器

    调用时git rebase continue在正常的变基冲突之后 编辑器 GIT EDITOR 打开并要求修改提交消息 因为提交消息可能包含前导 所以这可能会失败 export GIT EDITOR true git rebase cont

随机推荐

  • 如何将桌面图标设置为C# Windows窗体[重复]

    这个问题在这里已经有答案了 我已经调试了 C WinForm exe 将其复制到桌面并想将其分发给其他人 如何为此 exe 设置 ico 以便桌面图标自动出现在计算机上 该计算机也会下载它 而无需进行任何调整 在 Visual Studio
  • 根据列对二维 int 数组进行排序的过程

    我之前拥有的数组以及排序后我们想要的数组 Before Box Weight Priority 1 50 5 2 30 8 3 90 6 4 20 7 5 80 9 After Box Weight Priority 3 90 6 5 80
  • 我如何知道故障转储的 CLR 版本?

    我有一个 NET 应用程序崩溃的小型转储 有没有办法使用 Windbg 或其他工具了解故障机器 生成故障转储 的 CLR 版本 例如 mscorwks dll 的版本 在 WinDbg 中 最简单的方法是使用 eeversion命令 但如果
  • Callable 基类无效?

    有人可以解释为什么继承自非参数化和参数化Callable from typing import Callable from typing import NoReturn from typing import TypeVar T TypeVa
  • 将选项传递给 chrome 驱动程序 selenium

    我正在尝试禁用 chrome 控制台的输出 如果我通过 start maximized 选项 它就可以正常工作 我可能命令错误 DesiredCapabilities capabilities DesiredCapabilities chr
  • 无法更新到 com.google.gms:google-services:4.2.0

    启动时谷歌服务版本 是classpath com google gms google services 4 1 0 但是当我将其更改为4 2 0错误发生在Sync Project with Gradle files 我的顶级等级 Top l
  • PHP:通过 Parent::method() 与 $this->method() 从子类调用方法的差异

    假设我有一个家长班 class parentClass public function myMethod echo parent myMethod was called 和下面的子班 class childClass extends par
  • pyinstaller 失败并出现错误

    我正在使用 pyinstaller 编译当前的程序 它似乎无法处理所有需要的文件 它本身运行良好 并且无需绘图也可以编译和运行 似乎无法找到文件 default schema json 我什至无法在驱动器上的任何位置找到该文件 回溯 最近一
  • 将浮点数转换为字符串

    如何在不使用库函数的情况下将 C C 中的浮点整数转换为字符串sprintf 我正在寻找一个功能 例如char ftoa float num 转换num到一个字符串并返回它 ftoa 3 1415 应该返回 3 1415 根据 Sophy
  • 从一个数据库表复制到另一个 C#

    使用 C vs2005 我需要将表从一个数据库复制到另一个数据库 两个数据库引擎都是 SQL Server 2005 对于远程数据库 源 我只有对存储过程的执行访问权限才能获取我需要在本地带来的数据 我对本地数据库有更多的控制权 因为它由需
  • 如何在 MonoTouch 中将 NSHttpCookie 转换为 System.Net.Cookie?

    我有一个 MonoTouch iPhone 应用程序 它通过 Azure 访问控制服务进行联合登录 登录是通过嵌入式 UIWebView 浏览器完成的 登录完成后 我想将 cookie 传输到我的应用程序中 我可以访问 NSHttpCook
  • 如何使用 Django 后台任务初始化重复任务?

    我正在开发一个 Django 应用程序 它从 dropbox 读取 csv 文件 解析数据并将其存储在数据库中 为此 我需要后台任务来检查文件是否被修改或更改 更新 然后更新数据库 我试过了 Celery 但无法使用 django 配置它
  • CP 求解器可以在特定点初始化吗?

    我正在使用 CP Sat 求解器来优化我正在制定的时间表 然而 现在这个问题需要很长时间才能解决 是否可以使用旧结果作为求解器的种子 作为起点 以减少找到最佳结果所需的时间 看看这个解决方案提示示例 https github com goo
  • 如何在 OSX El Capitan 上运行 Haskell

    我昨天刚刚升级到 Mac OSX El Capitan 发现我用来在终端上运行 Haskell 的方法不再起作用了 我曾经通过输入在终端上运行 Haskellcd the path where my hs file is in 然后输入gh
  • 为什么 C# 对 ushort 上的模运算发出错误“无法隐式地将 int 转换为 ushort”?

    在另一个帖子中 有人问为什么要添加两个ushort值在 C 中引发错误 例如 ushort x 4 ushort y 23 ushort z x y ERROR cannot implicitly convert int to ushort
  • Scala 解析器标记分隔符问题

    我正在尝试为下面的命令定义语法 object ParserWorkshop def main args Array String ChoiceParser todo link todo to database ChoiceParser to
  • 在 Linq 查询中调用类方法

    我有一个名为 GetAge DateTimebirthDay 的方法 我想在 Linq 查询中通过传递生日来使用此方法 并根据返回的年龄值需要执行一些逻辑 我想要以下 LINQ 格式的查询 from customer in contetx
  • 迭代@IntDef、@StringDef或任何@Def类中的值

    考虑这个类 public class MyClassOfMystery public static final int NO FLAGS 0 public static final int FIRST FLAG 1 public stati
  • Galaxy S4 上的浮动触摸

    三星 Galaxy S4 有 浮动触摸 功能 即使没有触摸屏幕也可以检测到手指 我想在按钮上触发一个事件 btn1 当手指经过时将其悬停 我尝试使用OnHoverListener but onHover当MotionEvent is Mot
  • 如何撤消 Git 中最近的本地提交?

    我不小心提交了错误的文件Git 但尚未将提交推送到服务器 我如何撤消这些提交local存储库 撤消提交并重做 git commit m Something terribly misguided 0 Your Accident git res