如何使用 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 恢复 的相关文章

  • 如何仅隐藏一些未提交的更改?

    我正在对 Git 存储库进行重大更改 并意识到某些更改需要向后移植到错误修复分支 我不想签入我的所有更改master因为它们还没有经过充分的测试和准备 但我确实想提取其中一些更改并将它们提交到错误修复分支 然后按原样返回到 master 我
  • 如何仅对最新合并后的提交进行变基?

    考虑以下场景 我从master那里检查了一个分支 我做了一些承诺 我合并了更新的master 我做了更多的承诺 现在我想要从第 4 点开始变基提交 以便从第 2 点开始的提交不受影响 所以如果我最初有 1 2 x x x x x x x m
  • git 忽略行结尾

    我知道已经有人问过类似的问题 但我仍然无法让它发挥作用 我的项目在使用不同操作系统的人之间共享 而我使用的是 OSX 另外 并不是每个人都使用 git 有时我最终不得不提交其他人的更改 有时 git 会突然说有待处理的更改 查看文件 它们看
  • git 查找胖提交

    是否可以获取有关每次提交中的更改浪费了多少空间的信息 以便我可以找到添加了大文件或大量文件的提交 这一切都是为了尝试减少 git repo 的大小 变基并可能过滤提交 你可以这样做 git ls tree r t l full name H
  • Git 合并删除文件

    这是第二次发生这种情况 当我进行合并时 我后来意识到正在合并的分支中的一些文件不再位于正在合并的分支中 最新的例子是我们有一个功能分支 我一直在合并主开发分支中的更改 合并后我们丢失了很多文件 并且它们现在不存在于功能分支中 为什么会出现这
  • IntelliJ Git 集成 - git --version 空输出

    我目前正在尝试使用 IntelliJ 2016 2 的 Git 集成 但每当我将其指向可执行文件时 我都会遇到以下问题 这在技术上并不会阻止集成工作 但它确实会导致更新索引等问题 我正在运行 Windows 7 完全全新安装 但我在以前的
  • git apply 不对文件进行任何更改

    我必须对我的存储库应用补丁并正在运行 git apply directory PWD xxxxx patch 由于我不会详细讨论的原因 我无法使用git am在这种情况下 我需要使用目录标志 吉特告诉我 gt git apply direc
  • 在 Windows 上从源代码构建 PhantomJS-2

    我正在尝试基于这些在 Windows 8 1 x64 上从源代码构建 PhantomJS 2 的开发版本指示 https github com ariya phantomjs wiki PhantomJS 2 但是我收到以下错误 mingw
  • 使用 Git 部署时压缩 JS/CSS 文件

    我对 git 有点陌生 另外 这是我第一个自动化部署过程的项目 到目前为止 能够做到这一点真是太幸福了git push dev并上传文件 复制配置文件等 现在 当我推送到我的开发服务器时 我想缩小 JS CSS 文件 我正在考虑在服务器上安
  • 无法从 Git 扩展向 GitHub 进行身份验证?

    我只是在 Visual Studio 2010 中设置 Git 扩展 但无法真正使其工作 我无法进行身份验证 在 Git Extensions 中 如果我选择 Plugins gt GitHub 我可以添加用户 密码 API 令牌并选择 S
  • 我可以将我的heroku git repo导入bitbucket吗?如何?

    我的笔记本电脑坏了 我需要从另一台计算机上编码 我正在使用 Heroku 我想将最新版本的代码从 Heroku 获取到另一台机器 据我了解 强烈建议使用 GitHub 或 BitBucket 获取适当的远程存储库 我决定尝试一下 BitBu
  • 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 存储库

    假设我有一个看起来像这样的设置 phd code phd figures phd thesis 由于历史原因 这些都有自己的 git 存储库 但我想将它们合并为一个 以稍微简化事情 例如 现在我可能会进行两组更改 并且必须执行类似的操作 c
  • 仅将单个文件放入 git 子模块/存储库中

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

    我正在读什么git filter repo可以做 因为我想用它做一个小实验 我有这个存储库 我只想从中获取一个目录的历史记录 比如说 master 但我不想为主人工作 我想创建一个新分支 例如filter repo test然后让git f
  • 名称和电子邮件在 Git 的每用户配置文件中设置,但 Git 仍使用默认生成的名称和电子邮件

    标题已经说了 但我会更彻底地解释一下 我已使用以下命令按照建议配置了用户名和电子邮件 git config global user name git config global user email 我可以通过执行以下操作来验证这是设置的g
  • git update-index --no-assume-unchanged 不起作用

    我设置了assume unchanged咬了几个文件 现在我想取消它们 但这不起作用 gt git update index no assume unchanged Gemfile gt git ls files v grep Gemfil
  • 如何将一个文件存储库上传到 Gist,并保留历史记录?

    我的计算机上有一个包含单个文件的 Git 存储库coins py 我如何才能将其作为 Github 上的要点来保存历史 这其实很简单 您可以将现有历史记录移动到 Gist 存储库中 就像将其移动到任何其他存储库中一样 创建要点 只需输入一些
  • Jenkins groovy - 如何从最新提交中检索标签?

    从中获取最新提交branchName 我们运行下面的代码 treeMapData git branch branchName credentialsId credential url gitLabServer projectName rep

随机推荐

  • 如何将预构建的共享库链接到 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人们回复说