- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在学习 git。我有以下场景:
1) 一个名为 test.txt 的文件文件的初始内容:
one line
我提交包含此内容的文件。
2) 我在文件中添加了一个新行现在文件的内容是:
one line
two line
我提交这个内容的文件
3)我在文件中添加了一个新行现在文件的内容是:
one line
two line
three line
我提交包含此内容的文件。
现在我想恢复第二次提交。所以我文件的内容应该是
one line
three line
但是当我运行时:git revert commitid_2
我收到以下错误消息:
error: could not revert 4d417ed... two 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'
当我打开 test.txt 文件时:我看到内容被以下内容替换:
<<<<<<< HEAD
one line
two line
three line
=======
one line
>>>>>>> parent of 4d417ed... two line
这是什么意思?我如何才能单独恢复提交 2 所做的更改,同时保持提交 1 和提交 3 所做的更改不变?
最佳答案
这是git revert
确实如此,简化了(希望不要过于简单化)。你给它一个提交 ID,或者一个解析为提交 ID 的名称——在这种情况下,显然是 4d417ed
— 并通过 diff
找出该提交中发生的变化- 将提交中的文件与之前提交中的文件 merge 。即:
git diff 4d417ed^ 4d417ed
差异显示:
diff --git a/test.txt b/test.txt
index [something]..[something] 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1,2 @@
one line
+two line
(index
和模式并不那么重要;关键是它以“统一差异”显示旧版本和新版本)。统一差异显示(只有)添加行上方有一行,下方没有行。
在统一差异中,每个更改的两边都有额外的“上下文”行。这是一个更典型的统一差异 block ,我将一行代码向上移动了几行:
@@ -12,9 +12,9 @@ class Peer(object):
def _renew(self):
self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self._sock.bind(self._local_addr)
self._sock.setblocking(False)
- self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self._state = 'bound'
def is_open(self):
看看+
之前怎么有三行, 和 -
之后的三行?对于 test.txt
但是,由于没有“之后”上下文行,因此文件必须在添加的行之后结束。缺少三行“之后”上下文意味着“文件在这里结束”。 (而且,单一的“之前”行告诉 git——冗余地,从行号可以明显看出——文件在更改“之前”只有一行。)
无论如何,因为你正在做一个 revert
, git 现在尝试使用上面显示的更改“反向修补”文件的当前版本。
为了做一个“前向补丁”,git 希望文件看起来像“之前”的版本——也就是说,它会使用行号和上下文行,找到最接近给定行号的行完全相同的上下文,并将它们更改为看起来像“之后”。要反转补丁,git 期望它看起来像“之后”,并将其更改为看起来像“之前”。但是文件的当前版本在 two line
行之后有“额外内容” .也就是说,上下文不匹配。如果文件在 two line
行之后结束, git 会知道该怎么做:删除行 two line
.但是 git 不知道该怎么做,所以它留下了修改后的文件,带有冲突标记,供您手动解决。
如果你设置merge.conflictstyle
至 diff3
, git 会在你的 test.txt
中留下这个文件:
one line
<<<<<<< HEAD
two line
three line
||||||| 4d417ed... add a line
two line
=======
>>>>>>> parent of 4d417ed... add a line
有些人觉得这更容易阅读(尽管在这种情况下它并没有多大帮助)。
(旁白:我不确定您为什么不想读取文件:
one line
three line
中间也没有空行。但这是一个完全不同的问题。)
关于git - 在 Git 中尝试还原时发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20388382/
下面的代码旨在在首次打开工作簿时运行。 Sub Auto_Open() Dim LastRow As Integer LastRow = Sheet6.UsedRange.Rows.Count Act
当我尝试操作我的代码时,除了弹出调试错误外,它执行得很好。错误信息在这里。 我的完整代码在这里。 #include using namespace std; class String { publi
The invocation of the constructor on type 'WpfApplication1.MainWindow' that matches the specified bi
我正在使用 BaseAdapter: public class MyAdapter extends BaseAdapter{ private final LayoutInflater mInflate
我想做网页抓取。我写了代码 var connection = require('./mysqlConnection'); var c = new Crawler({ maxConnections
我的系统中发生 Java 堆空间错误。我尝试了很多来自 Stack Overflow 的解决方案,但没有任何效果。当我工作时 当按下 OK 然后 (我的项目没有错误) 我的 eclipse.ini 是
环境: i5 750 DDR3 4GWin7 专业版 x64 sp1 DXSDK 9.0c 2010 年 6 月 GeForce GT240(驱动程序 275.33)512MB MSVC 2008 s
这段代码是我写的。 import socket host = 'localhost' port = 3794 s = socket.socket(socket.AF_INET, socket.SOCK
我正在尝试引用 UTC 时间间隔获取本地日期时间,我正在执行下面的代码。 var dtString =DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss
我有一个非常简单的 C# 问题,它从库中加载 Windows WPF 窗口。这是代码: public partial class App : Application { public App(
我目前正在使用带有导航组件的底部导航,它工作正常但是当我们点击导航项 fragment 正在加载然后闪烁正在发生,即使当前选择的项目也会发生闪烁。它在加载 fragment 时发生。我的应用程序屏幕背
我是新来的 kotlin , 当我开始 Null Safety 时,我对下面的情况感到困惑. There's some data inconsistency with regard to initia
我有一个框,其中包含同时发生的两个独立的 css 转换。 当转换发生时,图标下方的标题和段落文本移动位置 参见 JS Fiddle:http://jsfiddle.net/Lsnbpt8r/ 这是我的
在为黑莓 10 构建电话间隙应用程序时,我遇到了异常情况。 [BUILD] Populating application source [BUILD] Parsing config.xml [
这个问题在这里已经有了答案: How to properly stop the Thread in Java? (8 个回答) 3年前关闭。 我看过How to properly stop the T
我试图弄清楚发生 fatal error 时如何刷新页面。基本上我正在访问图像 api 并将图像复制到我的服务器。我还每次都创建照片的缩略图版本。我会每隔一段时间收到一条错误消息,指出我的脚本试图分配
我正在尝试使用断言函数检查元素是否在屏幕上。我在我的测试应用程序 (AndroidDriver) 中使用 Appium 和 Java。我期望的是,如果元素在屏幕上,则返回 1;如果不在屏幕上,则返回
我正在开发图像上传系统。我使用 CommonsMultipartResolver 设置 maxUploadSize。当我尝试上传超过最大尺寸的图像文件时,会发生 MaxUploadSizeExcced
我有以下代码和@ComponentScan(basePackages = "com.project.shopping"),包结构为 com.project.shopping.Controller co
我尝试运行此程序作为测试,但收到错误“发生了 JNI 错误,请检查您的安装并重试”,然后是“发生了 Java 异常”。关于如何解决这个问题有什么想法吗? package java; public cl
我是一名优秀的程序员,十分优秀!