簡體   English   中英

顯示提交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。

我在手冊頁上看不到任何解釋空白行的原因。 但是,如果將輸出傳遞給另一個程序,則無論如何都不要使用瓷器命令,因為輸出格式可能會發生變化。 您想要的命令是

git rev-list c36a37b...eef755e

更新:針對您的特定問題-它有任何意義-我的答案是您不能指望的,因為(a)手冊頁中未提及它,並且(b) git show的輸出是'打算由其他程序解析。

可以(從git show docs獲得)有任何線索嗎?

    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.

VS

    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:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM