Git 恢复未按预期工作

2024-01-29

我遇到了问题git revert命令。我使用 Ubuntu 12.04 Linux 和 Git 版本 1.7.9.5。

  1. 我创建了一个全新的b_test_repo在我的本地电脑上,从远程跟踪它origin b_test_repo.
  2. 我在本地创建了一个文件(提交A)有两行文本并仅在本地成功提交master branch.

为了尝试git revert我又生成了 3 个提交,每个提交都添加了一行文本。所以我的master提交历史看起来像:

A - B - C - D

Where

  • A- 包含第 1 行和第 2 行的新文件
  • B- 添加了一行
  • C- 添加了一行
  • D- 添加了一行

在所有这些提交之后,文件包含 5 行:

line1
line2
line3
line4
line5

然后,我想恢复提交B,这将渲染文件而不需要line3,这是由 commit 添加的B:

git status
# On branch master
nothing to commit (working directory clean)

I type:

git revert -n master~2

恢复提交的效果B不提交更改,但会得到以下信息:

error: could not revert 1a13ad6... Adding one line
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

我很困惑为什么会遇到冲突,即为什么 Git 在确定文件中需要更改的内容时遇到问题。

我在这里缺少什么?请赐教!


删除该行将与更高版本产生冲突,这将改变same line.

正如“当 git revert 中止并显示错误消息时,我该怎么办? https://stackoverflow.com/a/6084535/6309",你需要解决合并、添加和提交。

恢复该提交的一种更简单的方法是交互式变基:

git rebase -i <SHA1 commit a>

然后你放弃提交b.
但这仅在您尚未将分支推送到上游回购 https://stackoverflow.com/a/2749166/6309,因为它确实重写了提交的历史记录。

如果你已经推送了,那么git revert是正确的方法,以便生成新的提交取消b(并将新提交推送到上游存储库)。


详细信息:您的示例生成以下合并冲突:

C:\Users\VonC\prog\git\tests\18779372\r1>git lg

* 10b9953  - (HEAD)
* 07fff99  - c
* 3d888c4  - b
* 8c7155f  - a

(git lg is an 幻想的别名git log https://gist.github.com/VonC/972690#file-gitconfig-L9)

如果存在冲突,我更喜欢同时看到源(他们的)和目的地(我们的)and合并或恢复之前的原始部分:

git config merge.conflictstyle diff3

然后恢复:

git revert -n master~2

那会给出:

line1
line2
<<<<<<< HEAD
line3
line4
line5
||||||| 3d888c4... b
line3
=======
>>>>>>> parent of 3d888c4... b

这样,你就会看到什么git revert做:一个merge之间:

  • 提交的父级b(这显然不包含b修改)
  • and HEAD

合并不能决定做什么section从第三行开始:

  • 该部分不存在于a (the === >>>>部分:“他们的”一方)
  • 它被修改为b(原始部分之间|||| and ====, 像之前一样revert,只需line3)
  • 它是also修改于HEAD (the <<<< ||||部分,加上line4 and line5, 虽然line3看起来没有变化)

如果从 commit 开始,合并冲突会更加明显a as:

line1
line2
line3
line4
line5

并最终提交d as:

line1
line2
line3b
line4c
line5d

(commit b add 'd' 到第 3 行,提交c adds 'c' 到第 4 行,提交d adds 'd' 到第 5 行)

然后恢复会给你:

git config merge.conflictstyle diff3
git revert -n master~2

cat afile.txt

line1
line2
<<<<<<< HEAD
line3b
line4c
line5d
||||||| 4ddccc1... b
line3b
line4
line5
=======
line3
line4
line5
>>>>>>> parent of 4ddccc1... b

这是从第 3 行开始的部分:

  • equals line3 -line4 -line5在“他们的”中=== >>>,它是b,或提交a)
  • equals line3b-line4 -line5提交中b(原部分||| ===,合并/恢复之前)
  • equals line3b-line4c-line5d in HEAD 'ours' <<< |||

三个不同的内容,合并者无法知道要做什么。

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

Git 恢复未按预期工作 的相关文章

  • git在Windows和Linux之间切换后强制刷新索引

    我有一个Windows和Linux共享的磁盘分区 格式 NTFS 它包含一个 git 存储库 约 6 7 GB 如果我只使用Windows or 只使用Linux操作 git 存储库一切正常 但是每次切换系统的时候git status命令将
  • 节点项目的 Azure git 部署失败

    我正在尝试将我的项目部署到azure 它正在失败 这些是我采取的步骤 git init git config core longpaths true git add git commit m initial commit 所有这些都有效 我
  • 交互式变基后,本地 Git 分支已偏离原始分支

    我有一个本地分行 CRM ayrshireminis 其中有一些我已推送到原点的提交 origin CRM ayrshireminis 这个分支是从创建的develop大约一周前的一个分支 其他合作者已经在该分支上完成了一周的工作 我想做的
  • 有没有办法缓存 https 凭据以推送提交?

    我最近转而将我的存储库同步到 GitHub 上的 https 由于防火墙问题 并且每次都要求输入密码 有没有办法缓存凭据 而不是每次都进行身份验证git push 自 Git 1 7 9 2012 年发布 以来 Git 中有一个巧妙的机制可
  • git subtree pull -P 不管 总是合并冲突

    问题 即使我没有进行任何更改 每次尝试拉入子树时 我都会遇到合并冲突 我在做什么 In 子树仓库 Make some changes git commit am Changes made git push origin master In
  • Git 无效的修订范围 Symfony2 Composer 外部包

    RuntimeException Failed to execute git log 18efcf67d236d5bbf46ac67820250dffd0474b6e 94e2146f525fa1367e15646fa273e5b34f92
  • refname 不明确且拉取失败

    我运行了以下命令 因为我想将生产分支移回而不必先签出 git branch f production HEAD 1 现在 当我检查生产时 我收到以下警告 warning refname production is ambiguous 然后我
  • SSH 到 Openshift 服务器失败

    我正在 openshift 服务器上使用 jboss catridge 我希望与其他人共享此实例并添加其他用户的公钥 id rsa pub 当其他人尝试访问该实例时 他会收到以下错误 我在他的实例中尝试了同样的方法 但看到了同样的错误 与
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem
  • Git:显示分支之间的差异,忽略合并的提交

    我的存储库历史记录看起来像这样 x y z branch a b c d e master 我想获得 branch 完整历史记录的单个差异 即 像 git diff 输出 我不想要像 git log p 产生的一大堆差异 而不包括任何从 m
  • 如何将更改移出主分支

    基本问题 但这一直发生在我身上 进行更改working branch 切换到master git merge working branch git push cap deploy 到舞台 泡一杯新茶 然后我回来思考其他事情并开始做出一些改变
  • git Push over sshfs 失败,并显示“关闭 sha1 文件时出错:错误的文件描述符”

    我们使用 sshfs 通过 SSH 安装文件系统 并将其用作 git 存储库协作的远程存储 Mac OSX 10 6 6 到 RHEL 3 服务器 SSHFS 版本 2 2 MacFUSE SSHFS 2 2 0 MacFUSE 库版本 F
  • git reset 命令中的 ~1 是什么意思?

    git 重置 HEAD 1 我的印象是 1 的意思是 从 HEAD 开始 遵循 1 链接 并将 HEAD 标签设置为新的提交节点 我正期待着 git 重置 HEAD 2 跟随 2 个链接 然后设置 HEAD 标签 但是 如果我尝试它 我会收
  • Git - 创建拉取请求而不分叉

    使用 git 已经有一段时间了 关于 git pull request 有很多教程和解释 其动机是什么等等 我遇到两种情况 1 分叉 git 仓库 我查看了一些公共 git 存储库并决定我想要做出贡献 所以我 通过以下方式创建重复的存储库F
  • apt-get 无法在 ubuntu dockerfile 中工作

    我对 docker 相当陌生 正在尝试通过编写自己的镜像来学习 并且目前正在阅读 Docker 的实际操作 ISBN 1633430235 在我自己的代码和书中的示例 第 146 页 中 我想通过 dockerfile 安装 git My
  • 如何将工作树与提交进行比较?

    我在用着 git diff mycommit 用于比较我的工作树mycommit 但它似乎忽略当前索引中不存在的文件 您可以按如下方式重现它 git init echo A gt A txt git add git commit m A g
  • git 日志历史记录图,每次提交一行,彩色,带有日期

    我需要的格式如下 git log decorate graph oneline date order 但我也需要它 包含日期 短 具有相同的颜色 I tried git log decorate graph oneline date ord
  • `git Reset HEAD file` 是否也检查该文件?

    我错误地向 git 添加了一个目录 当我按照提示操作时here https stackoverflow com questions 348170 undo git add通过执行以下操作来撤消添加git reset HEAD
  • 创建一个空分支?

    我有一个包含项目的 git 存储库 我现在要对这个项目进行大规模的修改 如何为这次大修创建一个空白的新分支 然后当完成时 如何将这个分支切换到master 使用 checkout orphan 命令 git checkout orphan
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件

随机推荐

  • Jetpack Compose 使用 CoroutineScope 滚动 LazyColumn 结果错误 A MonotonicFrameClock 在此 CoroutineContext 中不可用

    退房这个例子 https developer android com codelabs jetpack compose layouts 5使用状态和协程滚动列表 Composable fun ScrollingList val listSi
  • 使用一次更新设置多列

    如何在mysql中使用更新查询设置表的多列 只需添加参数 用逗号分隔 UPDATE tablename SET column1 value1 column2 value2 也可以看看 mySQL 更新手册 http dev mysql co
  • 如何在 VS2010 Express 中使静态库独立于发布/调试?

    我正在编写一个应用程序并链接 SDL 和 OpenGL 在我的代码中 我有以下几行 pragma comment lib sdl lib pragma comment lib sdlmain lib pragma comment lib o
  • 根据方法参数生成唯一的缓存键

    我有一个基本的存储库框架 它最终执行查询并将结果映射回对象 例如 public SomeEntity Get id return base GetItem
  • 如何在 iOS 中正确变形文本?

    我拼命地想改变smallLabel into a bigLabel By morphing 我的意思是转换一个标签的以下属性以匹配另一个标签的相应属性 并具有平滑的动画 字体大小 字体粗细 框架 即边界和位置 所需的效果应该类似于使用大标题
  • 在 2.6 上合并 n 字典并添加值的最快方法[重复]

    这个问题在这里已经有答案了 我有一个字典列表 我想将其组合成一个字典 并添加列表中每个字典中的值 例如 ds 1 1 2 0 3 0 1 2 2 1 3 0 1 3 2 2 3 1 4 5 最终结果应该是一个字典 merged 1 6 2
  • PHP:$_POST 全局变量的总长度是多少?

    我想知道是否有人知道全球邮政的总长度 例如 POST formInput hello world how long can I be 我正在创建一个网站 有人会在其中输入未知数量的字符textarea 因此可能是一个 Word 文档的 2
  • 重定向 ip6tables 中的端口

    如何使用 ip6tables 将一个端口重定向到另一个本地端口 例如像这样的东西 ip6tables t nat A 预路由 j 重定向 p tcp dport 443 to ports 8443 嗯 这是一个老问题 但因为我需要做同样的事
  • Android 模拟 Espresso 测试的 Dagger2 注入依赖项

    我注入了严重的依赖项 dagger2 应用 我想经营一个浓缩咖啡测试无需测试浏览整个应用程序并登录到应用程序 我想开始我的 teleActivity 并模拟登录管理器 然而 在任何 test 函数中 当我们调用 onCreate 时 我们已
  • 如何在 Python 中使用 PCA/SVD 进行特征选择和识别?

    我正在跟进Python 中的主成分分析 https stackoverflow com questions 1730600 principal component analysis in python在Python下使用PCA 但我很难确定
  • 上传文件到android市场时出错

    当我在 Android 市场上传我的应用程序时 它显示以下错误 文件无效 错误 转储失败 因为找不到 AndroidManifest xml 当我解压 apk 文件时 AndroidManifest xml 文件就在那里 有什么问题 在an
  • C#.NET 中的 JPEG 2000 支持

    NET 似乎无法使用 GDI 库打开 JP2 Jpeg 2000 文件 我在谷歌上搜索过 但找不到任何库或示例代码来执行此操作 有人有什么想法吗 我真的不想花钱让图书馆来做这件事 除非我必须 似乎我们可以使用自由图像 http freeim
  • PHP:在 for () 循环中创建函数

    有谁知道我如何编写一个函数 该函数能够使用变量的内容作为其名称来创建其他函数 这是我在 php 中讨论的一个基本示例 function nodefunctioncreator for i 1 i lt 10 i newfunctionnam
  • 在 Ruby 中递归列出目录的单行代码?

    在 Ruby 中获取目录 不包括文件 数组的最快 最优化的单行方法是什么 包含文件怎么样 Dir glob for directories Dir glob for all files 代替Dir glob foo 你也可以写Dir foo
  • Python 支持短路吗?

    Python 支持布尔表达式中的短路吗 是的 两个and and or运算符短路 参见the docs http docs python org library stdtypes html highlight short 20circuit
  • 当我指定凭据时,为什么我的 Http 客户端会发出 2 个请求?

    我创建了 RESTful Web 服务 WCF 在其中检查每个请求的凭据 我的一个客户是 Android 应用程序 服务器端的一切似乎都很棒 我收到请求 如果它有正确的标头 我会处理它 等等 现在我创建了使用此服务的客户端应用程序 这就是我
  • java jprogressbar 在繁重操作期间挂起

    我正在编写一个 java 程序 在调用大量使用 CPU 的方法之前 我会显示一个带有 JProgressBar 的框架 虽然我在调用方法之前显示它 但直到方法结束才显示 JProgressBar 进度条 还 没有以任何方式与该方法交互 这就
  • 如何将汉字一一拆分?

    如果没有特殊字符 如空白 等 在名字和姓氏之间 那么下面如何拆分汉字呢 use strict use warnings use Data Dumper my fh DATA my fname 小三 my lname 张 while my n
  • 监控浏览器控制台中的所有 JavaScript 事件

    是否可以监听所有的javascript事件 我试图猜测 AJAX 请求修改 DOM 后是否会触发事件 With firebug http getfirebug com wiki index php Command Line API moni
  • Git 恢复未按预期工作

    我遇到了问题git revert命令 我使用 Ubuntu 12 04 Linux 和 Git 版本 1 7 9 5 我创建了一个全新的b test repo在我的本地电脑上 从远程跟踪它origin b test repo 我在本地创建了