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“您编辑的块不适用” 的相关文章

  • Powershell 参数路径的值为 NULL

    我开发了一个 PS1 文件 它将负责基于服务器列表应用 SQL Server 补丁 因此 它将读取一个文本文件 其中包含我需要修补并应用修补程序的所有服务器 我决定使用 PARAM 作为 源文件夹 我将在其中获取服务器列表并记录输出 目标文
  • Spyder互动剧情:等待剧情关闭继续

    我使用 Spyder 在 Windows 上工作 使用 matplotlib 进行绘图 我的问题是我想要进行交互式绘图 或者有时绘制很多东西 并且我希望spyder等待我关闭图形以继续代码 与传统终端相同的方式 我试过 plt ion mp
  • Git - 无法推送 - “![远程拒绝] master -> master(工作目录有未暂存的更改)”

    我正在尝试为具有本地版本 临时版本和生产版本的 Wordpress 安装设置一个 简单 git 工作流程 我想做的就是在本地进行更改 然后从本地推送到登台 从本地推送到生产 起初我认为这将是一个简单的任务 我已经能够初始化存储库 添加两个远
  • 模拟标准输入 - python 3中的多行

    我是 python 新手 一直在使用 python 3 进行学习 我正在使用 python 的单元测试框架来测试我的代码 问题 我需要进行单元测试的函数以以下方式接受输入 def compare a b c input strip spli
  • 如何使用 asp.net 为 Web 应用程序创建补丁文件

    我想了解 VS 2010 中是否有可用的规定或使用某些第三方工具来为 Web 应用程序创建补丁 热修复 我不想发布副本并替换文件 dll 方法 而是使用 Web 设置来安装应用程序 以便仅更新原始应用程序中更改的文件并将其安装在虚拟目录中
  • 我可以用 git 拆分已经拆分的块吗?

    I ve recently discovered git s patch option to the add command and I must say it really is a fantastic feature I also di
  • 安装补丁 19 后,Oracle Forms 6i 在启动时崩溃并显示 0xC0000005 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 UPD 0xC0000005 是STATUS ACCESS VIOLATION 在 winnt h 中定义 这意味着应用程序尝试访问它无法
  • 使用 PHP 的交互式 shell

    是否可以单独使用 PHP 创建交互式 shell 我的意思是像数据库一样 Python https en wikipedia org wiki Python 28programming language 29等等 如果是的话 怎么样 是的
  • 使用不同的应用程序对 git 中的 diff 输出进行着色

    我想用cdiff https pypi python org pypi cdiff使用 git 时对差异输出进行着色 我可以通过 cdiff 传递 git 命令的输出 但我想知道是否可以不必这样做 具体来说 当我使用git log p 当我
  • 有没有办法让 python 在脚本中间变得交互式?

    我想做这样的事情 do lots of stuff to prepare a good environement become interactive wait for Ctrl D automatically clean up 用 pyt
  • 如何使用 git format-patch 将提交压缩到一个补丁中?

    我在一个分支上有 8 个提交 我想通过电子邮件发送给一些尚未了解 git 的人 到目前为止 我所做的一切要么给我 8 个补丁文件 要么开始为分支历史记录中的每个提交提供补丁文件 从一开始 我使用 git rebase interactive
  • 运行时静默更新应用程序

    我的应用程序最初将使用 Windows Installer 进行部署 我正在寻找的解决方案的主要特征包括 支持应用程序静默更新 运行 或自动重启 客户 易于维护和管理包装 过程 避免复杂的定制或 安装脚本 您对我如何实现这一目标有什么想法吗
  • 一般:如何更改 Android 核心 API 类?

    这只是一个一般性问题 供我参考 我知道如何创建标准的 Android 应用程序 但我想知道 这怎么可能 人们如何增强 Android 核心功能并深入挖掘系统 例如 假设我想调整下载管理器 http developer android com
  • 来自外部 .diff 文件的交互式补丁

    Linux 是否有命令或程序允许交互式地修补源代码 在屏幕上打印每个块并在将其应用到文件之前等待确认 就像是git add p 但是从另一个 diff 文件中进行更改 您始终可以在 shell ruby python 中编写脚本 逐行读取该
  • 从补丁文件中删除对特定文件的更改

    我有一个更改了许多文件的补丁文件 它意外地包含了对某些不应该更改的文件的更改 我可以手动从补丁中删除所有提及这些文件的内容 以生成正确的补丁文件 但这是一个繁琐的过程 如何以编程方式 标准 nix 工具 从补丁中删除所有提及文件的内容 注意
  • 为什么“git diff”在“git add”之后报告没有文件更改

    这是为什么git diff认为没有变化 即使git status将它们报告为modified git status On branch master Your branch is ahead of origin master by 2 co
  • git am:补丁格式检测失败

    我以前从未在 Git 中使用过补丁 我需要一些帮助 我正在尝试将补丁应用到 Git 存储库来测试 Wine 补丁 特别是这个补丁在这里 https bugs winehq org attachment cgi id 60752 所以我做了以
  • 如何在 Windows 上向 git 存储库添加符号链接?

    我使用 GitHub 的电子环境编译 OS X 的二进制文件 并希望将输出添加到 git 存储库 我试过 git add error readlink sulu app Contents Frameworks Electron Framew
  • 如何制作和应用SVN补丁?

    我想制作一个SVN类型的补丁文件httpd conf这样我就可以轻松地将其应用到其他主机上 If I do cd root diff Naur etc httpd conf httpd conf original etc httpd con
  • 自动修补程序(高效自动更新程序)

    我想要一个自动更新程序 可以检测修改的文件 通过比较客户端和服务器上的文件 并仅下载修改的文件 我还希望它能够给我生动的状态 在进程栏或其他东西上显示它 该场景是网络中有大约一千个客户端 它们使用相同的应用程序 如果应用程序有新版本可用 他

随机推荐