如何使用 Git 恢复

2023-12-06

How is git revert used?

这可能听起来像是一个重复的问题,但当人们问这个问题时,答案通常是,使用git reset as per 恢复到 Git 中 SHA 哈希的提交?.

然后当有人问如何使用时git reset人们回复说你应该使用git revert as per Git - 如何回滚.

在您不知不觉中,八个不同的人出现了,他们用自己独特的方式来拯救OP的屁股,所有这些都超出了您的想象。

因此,让我们尝试坚持要点并编写一份傻瓜指南git revert.

一个场景:你已经两次致力于掌握,但这很糟糕。你已经推动了别人的改变,但你却做出了不好的改变。

你想撤消它。这不是你可以自己在代码中手动撤消的东西,比如某个向导或包管理器在整个地方更改了大量的内容 - 你只想将它们全部恢复原样。

这就是源代码控制的意义所在。我确信这很容易。

好的,你将使用git revert,但是如何呢?

运行后git revert,之后还需要做其他事情吗?您是否必须提交所做的更改恢复或恢复直接提交到存储库还是什么?

显然,你需要再次推动并可能向团队宣布你的成功。


git revert 进行新的提交

git revert只是创建一个与现有提交相反的新提交。

它使文件保持相同的状态,就好像已恢复的提交从未存在过一样。例如,考虑以下简单示例:

$ cd /tmp/example
$ git init
Initialized empty Git repository in /tmp/example/.git/
$ echo "Initial text" > README.md
$ git add README.md
$ git commit -m "initial commit"
[master (root-commit) 3f7522e] initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md
$ echo "bad update" > README.md 
$ git commit -am "bad update"
[master a1b9870] bad update
 1 file changed, 1 insertion(+), 1 deletion(-)

在此示例中,提交历史记录有两次提交,最后一次是错误的。使用 git 恢复:

$ git revert HEAD
[master 1db4eeb] Revert "bad update"
 1 file changed, 1 insertion(+), 1 deletion(-)

日志中将有 3 个提交:

$ git log --oneline
1db4eeb Revert "bad update"
a1b9870 bad update
3f7522e initial commit

因此,所发生的事情有一致的历史记录,但文件就像错误的更新从未发生过一样:

cat README.md 
Initial text

要恢复的提交位于历史记录中的哪个位置并不重要(在上面的示例中,最后一次提交被恢复 - 任何提交都可以恢复)。

结束语

之后还需要做其他事情吗?

A git revert is just另一个提交,例如推送到远程,以便其他用户可以拉取/获取/合并更改,然后您就完成了。

您是否必须提交所做的更改恢复或恢复直接提交到存储库?

git revert is提交 - 假设您想要恢复单个提交,则没有额外的步骤。

显然,您需要再次推动并可能向团队宣布。

事实上 - 如果远程处于不稳定状态 - 与团队的其他成员沟通,他们需要拉动以获取修复(恢复提交)将是正确的做法:)。

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

如何使用 Git 恢复 的相关文章

  • 如何为 github 中两个分支之间的单个文件生成差异

    我需要为单个文件生成一个 diff 以显示两个版本之间的差异 这实际上是 github 中的标签 然后我想通过电子邮件将此差异发送给某人 因此差异的 github URL 将是理想的选择 github 比较视图将允许我对所有更改的文件执行此
  • git 分叉是如何工作的?

    所以我登录了 github 并 fork 了一个项目 每次原始存储库更新时 我的分叉存储库都会更新吗 或者我应该每次都从原始存储库进行分叉 这样我就不会错过对原始存储库所做的任何新更改 分叉是存储库的副本 分叉存储库允许您自由地尝试更改 而
  • 是否应该在 git 中跟踪 .history 文件夹中的文件[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 每当我进行更改时 history 文件夹中的某些文件在我的状态中都会显示为未跟踪 我将如何控制它 即 make 是自动添加或不添加这些内容 而不
  • 您对版本控制进行到什么程度了? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 签出现有的远程分支

    我见过不同的方法来检查现有的远程分支 假设我的朋友推送了新分支 bigbug 并且我想签出并将我的本地工作副本切换到该分支 我有以下选项 1 git checkout b bigbug origin bigbug 2 git checkou
  • .gitignore 文件夹内容[重复]

    这个问题在这里已经有答案了 可能的重复 在 Windows 上忽略 Git 存储库中的目录 https stackoverflow com questions 343646 ignoring directories in git repos
  • 如何让 git 和 copSSH 在正确的目录中查找密钥?

    我刚刚安装了 Windows 版 copSSH 当我启动它时 我得到一个目录C copSSH home Nick ssh其中有我的酒吧和私钥 当我通过 Cygwin bash 窗口访问此目录时 使用 ssh 用户 主机 我很高兴地登录了 但
  • git for-each-ref - 按年龄过滤结果

    我正在使用以下命令here https stackoverflow com a 39251131 5812876 git for each ref format color cyan authordate format m d Y I M
  • 合并之间的 git rebase 会导致完全不相关的文件发生冲突

    我有一个大型 Git 存储库 几个月前引入了一个错误 我想bisect它 首先引入一个过去的提交 存储库 然后重播合并 做rebase到新的 commit 如下图所示 据我了解 由于合并 Git 似乎无法正常工作 预期的 但我想更好地了解为
  • EGit(Eclipse git 插件)可以使用 SSH 密钥代替用户名和密码吗?

    我需要提交的 git 中央存储库是使用 SSH 密钥配置的 我的用户名是jmglov 但是当我执行 git 操作时 例如git clone 我使用这个配置 jmglov kitiara cat git config remote origi
  • Git 中的合并冲突是由什么构成的?

    git 如何确定特定合并存在冲突以及冲突是什么 我的猜测是这样的 如果正在合并的两个提交有一个共同的父提交 并且如果它们都更改了父提交的 X 行 那就是冲突 让我的理解变得复杂的是 更改 X 行 可能意味着用几行新行替换它 但这仍然显示为一
  • 如何将普通的 Git 存储库转换为裸存储库?

    如何将 普通 Git 存储库转换为裸存储库 主要区别似乎是 在普通的 Git 存储库中 你有一个 git存储库内的文件夹 包含构成工作副本的所有相关数据和所有其他文件 在裸露的 Git 存储库中 没有工作副本和文件夹 我们称之为repo g
  • 返回到存储库中的特定修订后提交并推送更改?

    我们需要及时返回到某个特定的提交 一些意外的改变是为了掌握 尝试恢复它挖得太深 所以 master 的状态很糟糕 现在我们希望master回到66ada4cc61d62afc 根据git 恢复到某个提交 https stackoverflo
  • git Branch -d :致命 - 无法查找 HEAD 的提交对象

    假设我在一个裸存储库 远程 中 如果我尝试使用以下命令删除分支git branch d
  • gitlab 上的权限被拒绝(公钥)

    我的问题是我无法从 GitLab 推送或获取 不过 我可以克隆 通过 HTTP 或通过 SSH 当我尝试推送时出现此错误 权限被拒绝 公钥 致命 无法从远程存储库读取 从我看过的所有线程中 这是我所做的 在我的计算机上设置 SSH 密钥并将
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • git checkout 到分支需要很长时间

    我使用的是 Ubuntu 17 10 并且使用 git 版本 2 14 1 每当我从 master 创建一个分支并尝试签出它 或从它签出到 master 时 都会花费大量时间 大约几分钟 有时接近 10 分钟 确实 我有几 GB 的数据 但
  • 无法从我的电脑上使用 traefik 后面的 gitlab 进行 git 克隆

    这是我的 gitlab 和 traefik 配置 version 3 7 services gitlab web image gitlab gitlab ce latest restart always hostname gitlab ro
  • Git 扩展 - 无法在 Windows 上推送到网络驱动器中的 git bare 存储库

    我正在 Windows 上学习 git 我已经安装了 Git 扩展 版本 2 47 3 并使用了它 我在我的 C 单元中创建了一个裸存储库 作为中央存储库 并在硬盘中的其他任何位置创建了个人存储库 我对硬盘中的这两个存储库进行提交 推送和拉
  • 是否可以在 git 存储库之外添加和提交文件?

    我们的文本文件分布在系统的各个角落 我们计划将这些文件中所做的所有修改添加到 git 存储库中 每次对这些文件进行修改都是由脚本进行的 因此 我们计划向该脚本添加新命令 以将文件添加到 git 存储库 但是 这些修改是同时进行的 我们可以为

随机推荐

  • 如何将预构建的共享库链接到 Android NDK 项目?

    这里我用的是这个Android mk文件输入jni folder LOCAL PATH call my dir include CLEAR VARS LOCAL PATH call my dir include CLEAR VARS Her
  • 如何使用 awk/sed 选择可能多次出现的两个标记模式之间的行

    Using awk or sed如何选择两个不同标记图案之间出现的线条 可能有多个部分标有这些图案 例如 假设该文件包含 abc def1 ghi1 jkl1 mno abc def2 ghi2 jkl2 mno pqr stu 起始模式是
  • 核心数据将属性从整数 16 更改为整数 32

    我有一个非常严重的问题 该应用程序已上线 但不幸的是它在 iOS 5 上失败 我需要发布更新 问题是少数实体的 ID 列是整数 16 但我需要更改为整数 32 这显然是我的错误 该模型是很久以前创建的 并且只是被重用 令我惊讶的是 现在 在
  • 在 Junit-4.11 中找不到类

    我在 Mac 上配置了 Junit 4 11 编译为javac没有错误 但是当我运行时java I got Could not find class HelloWorldTest 这是我的HelloWorld java and HelloW
  • 如果从外部 svg-sprite 文件使用,则 svg 中的遮罩标记将被忽略

    我正在尝试在我的项目中使用 svg sprite 并且效果很好 除非您使用的是mask精灵中的标签 公共 精灵 svg
  • 如何在 Visual C++ 下编译 WinCrypt.h?

    我有一个沼泽标准的 Visual Studio Express Visual C 环境 安装在沼泽标准的 Windows 7 机器上 我想简单地编译 include WinCrypt h 来自 Windows SDK 而不会出现错误 有人可
  • JS通过变量调用对象属性

    当我有一个对象并且我想引用其中的属性时 我可以使用例如 objectName propertyName 当我有一个 子属性 时我可以使用 objectName propertyName propertyName 但是如何使用这种语法的变量呢
  • 将操作按钮添加到一个片段的操作栏

    我的应用程序有三个选项卡 我使用寻呼机在选项卡之间切换 每个选项卡都有自己的片段 我使用 OptionsMenu 方法将 设置 和 帮助 操作按钮添加到主活动的操作栏中 我现在想向操作栏添加一个新的操作按钮 但仅适用于第一个选项卡和第一个片
  • asp.net core 3.0 - 如何增加空闲超时

    这是使用 asp net core 3 0 的网站 我用CookieAuthentication并设置cookie过期时间如下 services AddAuthentication CookieAuthenticationDefaults
  • Selenium 中是否可以通过部分 id 匹配来定位元素

    我正在尝试使用生成的 id 来查找元素 其中 ID 的某些部分是已知的 例如 id page x002e x0023 default create firstname 其中最后 3 个单词 default create firstname
  • Jqgrid 以 inlineNav 样式添加新的空白行

    我想创建Add Edit Save And Delete我的 JqGrid 下方的按钮
  • 使用Angularjs的$http时读取响应头

    我在用 http进行 api 调用 发送一些自定义标头 例如X Foo 但是我还不知道如何阅读它们 在 的里面 http success function data status headers config 功能 headers是一个应该
  • 使用 Zxing 的 Android 条码扫描器

    我想将Zxing集成到android项目中 我是初学者 我已经看到这里描述的方式http bit ly nBszrL不鼓励 最好的方法是通过意图 如这篇文章所述http bit ly o29Uma PS 我不想要扫码机安装在我的设备上 我已
  • Ruby 中的三重单引号与三重双引号

    为什么你可能会使用 代替 as in 艰难地学习 Ruby 第 10 章学习练习 Ruby 中没有三引号 Two String并置的文字被解析为单个文字String文字 所以 Hello World gt HelloWorld 是相同的 H
  • R 中的轴标签:p(Y=y | theta = some)

    我已经搜索遍了 但找不到具有条件符号的代码 如 p a b 我使用的代码 通用 R 代码 而不是 ggplot 是 ylab bquote Pr Y y theta mytheta n n 这给了我一个标签 Pr Y y 0 2 n 10
  • 安装Anaconda后无法安装Python模块

    新注意 我无法通过 binstar 或 anaconda 安装 为什么我不能在 anaconda 之外的 python 中安装 当我不通过连续启动器专门 lunch 时 有没有办法让我的计算机停止使用 python 的 anaconda 安
  • SQL:ORDER BY 两列混合,不基于优先级

    我正在使用 mySQL 我必须按姓氏对联系人姓名进行排序 但如果没有姓氏 我会按名字排序 这看起来像 ORDER BY lastname lastname firstname 然而 这使得带有姓氏的出现在顶部 我想要的行为是将名字和姓氏混合
  • 示例函数中的替换是什么意思? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 当我尝试从数据框中随机选择每组中的 10 个样本时 我试图弄清楚样本函数的工作原理 我有一个 5 列和 7000 行的数据框 我将数据集分成大约 200 个组 然后我想从每组
  • 在 UIButton 的选择器上传递参数

    我有一个detailDisclousurea 的标注上的按钮MKAnnotation 当按下此按钮时 我需要调用一个传递标识参数的方法annotation那叫它 怎么可能呢 这是我的注释视图 MKAnnotationView mapView
  • 如何使用 Git 恢复

    How is git revert used 这可能听起来像是一个重复的问题 但当人们问这个问题时 答案通常是 使用git reset as per 恢复到 Git 中 SHA 哈希的提交 然后当有人问如何使用时git reset人们回复说