显示提交 ID 时 git show 和 git log 之间的区别
Difference between git show and git log when displaying commit ids
我需要获取两个已知提交之间的提交 ID 列表。我使用了以下命令:
git show --format=format:%H --quiet commitA...commitB
在合并提交之前,它可以完美运行。即:
* c36a37b
|\
| * 92187d9
* | e24d2c4
|/
* eef755e
输出结果如下:
$ git show --format=format:%H --quiet c36a37b...eef755e
c36a37b80caf2bae7b4833617443f4dfea8d8816
e24d2c4292baef4106976373ff3d01341834648d
92187d9a1002027c7d99824f2561467692bfd6b3
当我更改 show
命令并改用 log
时:
$ git log --format=format:%H --quiet c36a37b...eef755e
c36a37b80caf2bae7b4833617443f4dfea8d8816
e24d2c4292baef4106976373ff3d01341834648d
92187d9a1002027c7d99824f2561467692bfd6b3
注意第一次提交后没有空行。我并不热衷于使用 git show
而不是 git log
- 我什至不记得我从哪里得到这个想法。但是这个多出的空行导致我的程序失败了,不知道有没有什么特殊的意义。
Git 版本 1.9.5.
我在手册页中没有看到任何内容来解释为什么会出现该空白行。但是,如果您将输出传递给另一个程序,则无论如何您都不需要 porcelain 命令,因为输出格式可能会发生变化。你想要的命令是
git rev-list c36a37b...eef755e
更新: 你的具体问题 -- 它有什么意义 -- 我的回答是 none 你可以指望, 因为 (a) 手册页中没有提到它,并且 (b) git show
的输出不打算被其他程序解析。
这(来自 git show 文档)是否有任何线索?
format:
...
If you add a + (plus sign) after % of a placeholder, a line-feed is inserted immediately before the expansion if and only if the placeholder expands to a non-empty string.
If you add a - (minus sign) after % of a placeholder, all consecutive line-feeds immediately preceding the expansion are deleted if and only if the placeholder expands to an empty string.
If you add a ` ` (space) after % of a placeholder, a space is inserted immediately before the expansion if and only if the placeholder expands to a non-empty string.
对
tformat:
The tformat: format works exactly like format:, except that it provides "terminator" semantics instead of "separator" semantics. In other words, each commit has the message terminator character (usually a newline) appended, rather than a separator placed between entries. This means that the final entry of a single-line format will be properly terminated with a new line, just as the "oneline" format does. For example:
$ git log -2 --pretty=format:%h 4da45bef \
| perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
4da45be
7134973 -- NO NEWLINE
$ git log -2 --pretty=tformat:%h 4da45bef \
| perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
4da45be
7134973
In addition, any unrecognized string that has a % in it is interpreted as if it has tformat: in front of it. For example, these two are equivalent:
我需要获取两个已知提交之间的提交 ID 列表。我使用了以下命令:
git show --format=format:%H --quiet commitA...commitB
在合并提交之前,它可以完美运行。即:
* c36a37b
|\
| * 92187d9
* | e24d2c4
|/
* eef755e
输出结果如下:
$ git show --format=format:%H --quiet c36a37b...eef755e
c36a37b80caf2bae7b4833617443f4dfea8d8816
e24d2c4292baef4106976373ff3d01341834648d
92187d9a1002027c7d99824f2561467692bfd6b3
当我更改 show
命令并改用 log
时:
$ git log --format=format:%H --quiet c36a37b...eef755e
c36a37b80caf2bae7b4833617443f4dfea8d8816
e24d2c4292baef4106976373ff3d01341834648d
92187d9a1002027c7d99824f2561467692bfd6b3
注意第一次提交后没有空行。我并不热衷于使用 git show
而不是 git log
- 我什至不记得我从哪里得到这个想法。但是这个多出的空行导致我的程序失败了,不知道有没有什么特殊的意义。
Git 版本 1.9.5.
我在手册页中没有看到任何内容来解释为什么会出现该空白行。但是,如果您将输出传递给另一个程序,则无论如何您都不需要 porcelain 命令,因为输出格式可能会发生变化。你想要的命令是
git rev-list c36a37b...eef755e
更新: 你的具体问题 -- 它有什么意义 -- 我的回答是 none 你可以指望, 因为 (a) 手册页中没有提到它,并且 (b) git show
的输出不打算被其他程序解析。
这(来自 git show 文档)是否有任何线索?
format:
...
If you add a + (plus sign) after % of a placeholder, a line-feed is inserted immediately before the expansion if and only if the placeholder expands to a non-empty string.
If you add a - (minus sign) after % of a placeholder, all consecutive line-feeds immediately preceding the expansion are deleted if and only if the placeholder expands to an empty string.
If you add a ` ` (space) after % of a placeholder, a space is inserted immediately before the expansion if and only if the placeholder expands to a non-empty string.
对
tformat:
The tformat: format works exactly like format:, except that it provides "terminator" semantics instead of "separator" semantics. In other words, each commit has the message terminator character (usually a newline) appended, rather than a separator placed between entries. This means that the final entry of a single-line format will be properly terminated with a new line, just as the "oneline" format does. For example:
$ git log -2 --pretty=format:%h 4da45bef \
| perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
4da45be
7134973 -- NO NEWLINE
$ git log -2 --pretty=tformat:%h 4da45bef \
| perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
4da45be
7134973
In addition, any unrecognized string that has a % in it is interpreted as if it has tformat: in front of it. For example, these two are equivalent: