138

如何创建适合在坩埚中查看的补丁?

git diff branch master --no-prefix > patch

这仅生成 3 行上下文。所以我做了以下

git diff --unified=2000 branch master --no-prefix > patch

希望所有文件的行数少于 2000 行。有没有办法告诉 git 将文件中的所有行都包含在补丁中,而不必指定最大行数?

4

6 回答 6

112

似乎工作得很好:

git diff --no-prefix -U1000

需要注意的是:

-U标志指定上下文行。如果更改之间的行数超过 1000 行,则可能需要增加此值。

于 2014-07-24T11:07:47.893 回答
67

我知道这是旧的,但我也不喜欢硬编码的解决方案,所以我测试了这个:

git diff -U$(wc -l MYFILE)

使用 -U 似乎是解决该问题的唯一方法,但使用行数可以保证它适用于非常大的文件中的微小更改。

于 2016-11-18T18:11:03.967 回答
11

注意:git1.8.1rc1 公告(2012 年 12 月 8 日)包括:

一个新的配置变量“ diff.context”可用于在补丁输出中给出默认的上下文行数,以覆盖 3 行的硬编码默认值。

这样可以帮助在这里生成更完整的上下文。

于 2012-12-10T08:36:03.923 回答
5

得到了灵感,所以我添加了一个 git 别名。

$ cat ~/.gitconfig | fgrep diff
        df = "!git diff -U$(wc -l \"$1\" | cut -d ' ' -f 1) \"$1\""
$ git df <file>

更新:

刚刚发现“git df”有时不起作用,因为执行 git alias 时目录更改。(参见git aliases 在错误的目录中操作)。所以这是更新版本:

$ cat ~/.gitconfig | fgrep df
        df = "! [ \"$GIT_PREFIX\" != \"\" ] && cd \"$GIT_PREFIX\"; ~/bin/git_df.sh"
$ 
$ cat ~/bin/git_df.sh
#!/bin/bash
for FILE in $@; do
    git diff -U$(wc -l "${FILE}" | cut -d ' ' -f 1) "${FILE}"
done
exit 0
于 2018-05-23T19:52:45.623 回答
2

这在 macOS 上对我有用:

git diff -U$(wc -l main.htm | xargs)

请参阅“如何从 Bash 变量中修剪空白?”

于 2017-01-02T12:36:29.703 回答
-1

查看特定文件/提交时,以前接受的解决方案对我不起作用(该-U选项似乎与 rev/path 解析混淆),但--inter-hunk-context=在这种情况下适用于git version 2.24.0

git diff \
    --no-prefix \
    --inter-hunk-context=2000 \
    master -- \
        path/to/file.py

如果您不知道文件大小,您当然可以使用wc -l而不是硬编码来找到它:

git diff \
    --no-prefix \
    --inter-hunk-context=$(wc -l path/to/file.py) \
    master -- \
        path/to/file.py
于 2020-02-15T04:55:31.517 回答