gpt4 book ai didi

Git 工具用于从暂存中删除仅包含空白更改的行

转载 作者:IT王子 更新时间:2023-10-29 01:01:17 25 4
gpt4 key购买 nike

删除尾随空格的 Gist 是,如果每个人都这样做,那么您最终会得到一个最小的差异,即。它仅包含代码更改,不包含空格更改。

但是,当与不这样做的其他人一起工作时,使用您的编辑器或预提交 Hook 删除所有尾随空格会导致甚至更糟差异。你正在做与你的意图相反的事情。

所以我想问一下,在我提交之前是否有一个工具可以手动运行,从暂存中取消暂存行,这些行仅在空白处发生变化。

还有一个好处是更改暂存行以删除代码更改行的尾随空格。

还有一个好处是不要对 Markdown 文件执行此操作(因为尾随空格在 Markdown 中有意义)。

我在这里问是因为我完全打算编写这个工具,如果它还不存在的话。

最佳答案

以下内容将帮助您完成大部分工作:

$ clean=`git diff --cached -b`; \  git apply --cached <(git diff --cached -R); \  echo "$clean" | git apply --cached -; \  clean=

对于 1.7.0 之前的 git 版本,如果一个或多个文件有全空白更改,它将失败。例如

$ git diff --cached -bdiff --git a/file1 b/file1index b2bd1a5..3b18e51 100644diff --git a/file2 b/file2new file mode 100644index 0000000..092bfb9--- /dev/null+++ b/file2[...]

空的增量(上面的 file1,确实应该被抑制)使 git-apply 不开心:

fatal: patch with only garbage at line 3

更新: git 的 1.7.0 版本 fixes this issue .

假设我们的存储库处于以下状态:

$ git diff --cacheddiff --git a/foo b/fooindex 3b18e51..a75018e 100644--- a/foo+++ b/foo@@ -1 +1,2 @@-hello world+hello  world+howdy also

然后我们可以运行上面的命令来 fork 索引和工作树:

$ git diff --cacheddiff --git a/foo b/fooindex 3b18e51..1715a9b 100644--- a/foo+++ b/foo@@ -1 +1,2 @@ hello world+howdy also$ git diff diff --git a/foo b/fooindex 1715a9b..a75018e 100644--- a/foo+++ b/foo@@ -1,2 +1,2 @@-hello world+hello  world howdy also

如果所有更改都是空白,您会看到

error: No changes

我怀疑修复索引并在工作树中留下不需要的更改会让大多数用户感到惊讶甚至激怒,但这就是问题所要求的行为。

关于Git 工具用于从暂存中删除仅包含空白更改的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com