我正在尝试使用git add --interactive
有选择地向我的索引添加一些更改,但我不断收到“您编辑的大块不适用。再次编辑...”消息。即使我选择 e 选项,我也会收到此消息,并立即保存/关闭我的编辑器。换句话说,如果根本不编辑该块,该补丁就不会应用。
这是我正在使用的确切示例(我正在尝试组合一个小演示):
原始文件:
first change
second change off branch
third change off branch
second change
third change
fourth change
新文件:
Change supporting feature 1
first change
second change off branch
third change off branch
second change
third change
fourth change
bug fix 1
change supporting feature 1
我试图展示如何使用git add --interactive
仅将“bug fix 1”行添加到索引中。在文件上运行交互式添加,我选择补丁模式。它向我展示了
diff --git a/newfile b/newfile
index 6d501a3..8b81ae9 100644
--- a/newfile
+++ b/newfile
@@ -1,6 +1,9 @@
+Change supporting feature 1
first change
second change off branch
third change off branch
second change
third change
fourth change
+bug fix 1
+change supporting feature 1
我用分裂来回应,然后用“不”来应用第一个块。第二个大块头,我尝试编辑。我最初尝试删除底线 - 但没有成功。完全让这个大块头单独呆着也是行不通的,我不明白为什么。
这是像在这个 git-add 帖子?
手动编辑大块非常强大,但如果您以前从未这样做过,也会有点复杂。
要记住的最重要的一点是:除了存在的任何其他缩进之外,差异始终缩进一个字符。
该角色可以是:
- 一个空格(表示未更改的行),
- a
-
表明该行已被删除,
- or a
+
表明该行已添加。
没有其他的。它必须是空格、- 或 +。任何其他的,你都会得到错误
(更改的行没有字符,因为这些是通过删除旧行并将更改的行添加为新行来处理的)。
由于您已经在您最喜欢的文本编辑器中打开了 diff(您确实将 Git 配置为使用您最喜欢的文本编辑器,对吧?),您可以做任何您想做的事情 - 只要您确保生成的 diff 干净地应用即可。
这就是窍门。如果您以前从未这样做过,Git 会告诉您“您编辑的块不适用。再次编辑吗?”很多时候,你会开始恨自己无法解决这个问题,尽管它看起来很简单(或者 Git,因为它无法弄清楚你想要什么)。
经常让我绊倒的一件事是我忘记了单字符缩进。
我会用 - 标记一行以将其删除,但在大多数文本编辑器中会插入一个-
,它不会覆盖之前存在的空间。这意味着您要向整行添加额外的空格,这又意味着 diff 算法无法找到/匹配原始文件中的行,这又意味着 Git 会对您大喊大叫.
另一件事是差异仍然必须有意义。 “感”是指可以干净地涂抹。确切地说,如何创建合理的差异似乎有点黑暗艺术(至少对我来说是这样),但你应该始终记住原始文件的样子,然后相应地规划你的 -s 和 +s。如果你经常编辑你的帅哥,你最终会掌握它的窍门。
另请参阅此提交 git add -p.
奥托玛拉·洛克尼's answer指的是华金·温德米勒博客文章“有选择地选择要使用 git 提交的更改(或者我要编辑你的大块)"
Git 想要做的不是计算行数,而是在应用所述编辑过的块之前合并重叠的块(当编辑块时)。
那是2018年中期讨论过,并且会避免这样的情况:
如果您分割了一个大块,请编辑第一个子块,将
删除的尾随上下文行然后如果您尝试暂存
第二个子块,它会失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)