由于@ torek的回答,现在已经解决了
我需要在新添加的上方添加更多行,以便Git可以向上移动diff'ed块,我的意思是:
+a
+b
+c
+
+["foo", "bar", "baz"].map do |i|
+ i
+end
+
["foo", "bar", "baz"].map do |i|
i.upcase
end
Run Code Online (Sandbox Code Playgroud)
注意:我尝试使用单个换行符而不是
a\nb\nc\n它也可以使用
我在Mac OSX上使用Git 2.9
这是一个简化的测试用例:
$ mkdir git-highlight && cd git-highlight
$ touch foo.rb
Run Code Online (Sandbox Code Playgroud)
我添加并提交以下内容:
["foo", "bar", "baz"].map do |i|
i.upcase
end
Run Code Online (Sandbox Code Playgroud)
现在我修改文件以具有以下内容:
["foo", "bar", "baz"].map do |i|
i
end
["foo", "bar", "baz"].map do |i|
i.upcase
end
Run Code Online (Sandbox Code Playgroud)
如果我要运行,git diff或者git diff --compaction-heuristic我得到以下意外输出:
diff --git a/foo.rb b/foo.rb
index 9056b22..f0d289a …Run Code Online (Sandbox Code Playgroud) 我想在我的全局git配置文件中使用'--compaction-heuristic'选项.它是git log命令的一个选项:
--compaction启发式
--no压实启发式
这些是为了帮助调试和调整实验启发式(默认情况下是关闭的),它会移动块边界以尝试使得生成的补丁更容易阅读.
该混帐配置文件建议增加配置设置这样的例子:
git config --global core.editor emacs
git log文档中似乎没有任何内容说明这个配置值应该是什么 - 所以它是什么以及我在哪里可以找到解释该行格式的规范:
git config --global [魔术在这里启用压缩 - 启发式]
无论如何,此git功能现已被删除
据我了解,当您git add创建文件时,它只是在将文件添加到存储库之前暂存该文件,但为什么我可以在提交之前看到它已添加到 git 存储库中?
例如,如果我创建一个新的 git 存储库并创建一个名为的新文件foo并将内容“hello world”添加到其中,然后,我会在该文件夹内的子目录git add foo中看到一个新项目。我什至可以使用命令查看文件内新文件的内容。objects.gitobjectsgit cat-file -p
文件夹中到底添加了什么.git/objects?从技术上讲,暂存文件有什么作用?git add比如对文件运行a 后会发生哪些步骤?如果我知道步骤,也许我会更好地理解它。
我经常使用git add -p somefile交互式暂存给定文件中的部分。但是,如果文件有更复杂的更改,则默认差异会出错,交互式补丁命令提供的大块也会出错。
该git diff命令有许多选项可以改进或自定义 diff 输出,包括非常有用的--anchored=<text>,但是有什么方法可以从中获得更好的大块头git add -p吗?