git add --interactive“您编辑的块不适用”

2023-11-27

我正在尝试使用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(使用前将#替换为@)

git add --interactive“您编辑的块不适用” 的相关文章

  • 如何可视化或格式化差异/补丁文件? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个补丁文件 统一差异 就像输出svn diff git diff or diff u 我想查看它
  • Windows 上的 git bash shell “您编辑的块不适用”(续)

    不久前 我问这个问题 https stackoverflow com questions 41917746 git bash shell on windows your edited hunk does not apply noredire
  • 应用补丁时“1 行添加空格错误”是什么意思?

    我正在编辑克隆的远程存储库的一些 Markdown 文件 并且想要测试从一个分支到另一个分支的创建和应用补丁 但是 每次我进行任何更改时 我都会收到以下消息git apply 0001 b patch 16 trailing whitesp
  • 按顺序卸载补丁时 Windows Installer 出现“错误 1308。未找到源文件”场景

    我需要使用 Patch Design 和 Installshield 2012 创建的一系列可卸载补丁 前两个补丁在卸载时工作正常 但是 当且仅当已应用补丁 1 和 或补丁 2 时卸载第三个补丁时 才会产生错误 MSI c 48 C4 19
  • 让 Git 对我的更改视而不见的更好方法

    有没有一些更简洁的方法让 Git 忽略我的一些更改并且从不提交它们 git 属性 config to be deviated xml filter qqq git 配置 filter qqq clean perl ne print unle
  • Pandas 在 Windows 终端中绘图

    我有一个简单的熊猫数据框 尝试从 IPython 的 Windows 10 终端会话进行绘图给出了以下结果 In 4 df pd DataFrame Y 1 3 5 7 9 X 0 2 4 6 8 In 5 df Out 5 X Y 0 0
  • 如何将 git 补丁从一个存储库应用到另一个存储库?

    我有两个存储库 一个是库的主存储库 另一个是使用该库的项目 如果我对从属项目中进行修复 我想要一种简单的方法来将该补丁应用回上游 该文件在每个存储库中的位置都不同 主要仓库 www playdar org static playdar js
  • 在已部署的 Grails 应用程序上创建补丁的简单方法

    我在我的客户端服务器计算机上的 tomcat6 上部署了 grails 应用程序 但该应用程序仍然需要许多修复 因此客户端计算机上发现的每个错误或缺少功能 我创建一个补丁并通过 ftp 上的 tar gz 文件交付给客户端这将替换部署的文件
  • 如何 git add 仅匹配模式的行?

    我正在使用 git 跟踪一些配置文件 我通常会进行互动git add p但我正在寻找一种方法来自动添加与模式匹配的所有新 修改 删除行 否则 我将花费很长时间来完成所有交互式拆分和添加 git add有文件名的模式匹配 但我找不到有关内容的
  • 哪些 R 函数不适合编程使用?

    一些函数如browser仅在交互使用时才有意义 人们普遍认为subset功能只能交互使用 https stackoverflow com q 9860090 134830 相似地 sapply不适合编程使用 因为它不能简化零长度输入的结果
  • 使用 Docker Compose 的交互式 shell

    有没有办法仅使用 Docker Compose 在容器中启动交互式 shell 我在 docker compose yml 中尝试过类似的操作 myapp image alpine latest entrypoint bin sh 当我使用
  • 使用散景滑块滑动图像

    我试图在滑块的帮助下无缝地传达大量科学数据 我从 Bokeh 开始 对 javascript 几乎一无所知 我尝试设置第一种方法来滑动两个图像 但我无法刷新图像 假设我的文件夹中有 1 png 和 2 png from bokeh io i
  • 如何用mock修补模块的内部函数?

    我所说的 内部函数 是指从定义它的同一模块内调用的函数 我正在使用mock http www voidspace org uk python mock 图书馆 特别是patch http www voidspace org uk pytho
  • 点击Leaflet地图上的点即可在Shiny中生成ggplot

    我正在尝试使用 R 中的 Shiny 创建一个 Leaflet 地图 它允许用户单击任何标记来生成表示该特定站点的信息 温度 的相应图 我合并了这个问题的代码 单击传单地图中的点作为闪亮绘图的输入 https stackoverflow c
  • 为什么“git diff”在“git add”之后报告没有文件更改

    这是为什么git diff认为没有变化 即使git status将它们报告为modified git status On branch master Your branch is ahead of origin master by 2 co
  • 如何启动 VBS 的交互式控制台?

    与这个问题非常相似 如何启动 Perl 的交互式控制台 https stackoverflow com questions 73667 how can i start an interactive console for perl 我只是希
  • 如何制作和应用SVN补丁?

    我想制作一个SVN类型的补丁文件httpd conf这样我就可以轻松地将其应用到其他主机上 If I do cd root diff Naur etc httpd conf httpd conf original etc httpd con
  • (Tcl/Expect) 退出后清屏

    我想在退出我的 半 交互式期望脚本后清除屏幕 在本地计算机上 我可以在脚本中做到这一点吗 这是我尝试过的 但失败了 usr bin expect f set env TERM vt100 spawn ssh Y username domai
  • 补丁 - 为什么相对补丁目标名称不起作用?

    我已经从模块导入了一个类 但是当我尝试修补类名而不使用模块作为前缀时 出现类型错误 TypeError Need a valid target to patch You supplied MyClass 例如 以下代码给出了上述错误 imp
  • 如何应用 .diff 文件

    我有一个 diff 类型文件 看起来像爆炸了 diff git a res User lua b res User lua index db8c2cc 4d2af0f 100644 a res User lua b res User lua

随机推荐