git diff:显示分支名称而不是提交哈希

时间:2019-12-01 22:03:11

标签: git

git diff是一个很好的协作工具,但是有时将文字值传递到输出中使用的git diff A B中,而不是引用A和B的哈希值,这可能会很有用。 / p>

考虑以下git diff输出:

$ git diff my-first-branch my-second-branch
diff --git a/file b/file
index c77692b..38ea2ea 100644
--- a/file
+++ b/file
@@ -1 +1,2 @@
 Added this file
+Added this line

例如,使选项显示my-first-branch..my-second-branch而不是c77692b..38ea2ea会很有用。

是否有任何选项或设置可以做到这一点?

要预先回答以下注意事项和答案:

  • “这会破坏差异的可重复性”
    • 无论如何都可能不会与其他人共享本地更改,因此如果分支是masterissue-1234
  • “引用名称不明确”
    • 我不是要输出git reflog,而是要求输入文字上的命令行参数
  • “您可以使用sed单线衬套来做到这一点”
    • 由于stdout不再是tty,因此更改了许多默认设置,包括禁用寻呼机,着色和其他各种选项。

2 个答案:

答案 0 :(得分:1)

这些ID用于要扩散的Blob,其名称在上面给出(并且在下面的输出中带有文本diff),例如a/filec77692b。使用可变的refnames而不是实际的blob id的请求,而不是您要的是“非常不好的举动”。

showcmd () { echo "$@"; "$@"; }

将为您提供所需的东西,例如showcmd git diff master issue-1234 > myoutput

gitdiff() { echo git diff "$@"; git diff "$@"; }

然后是gitdiff master issue-1234

答案 1 :(得分:0)

对于那些想要这样做的人,脚本可以处理:

  #!/bin/bash
    
    # prefix git diff with ref names
    ref1=$1
    ref2=$2
    
    if [ -z $ref2 ] 
        then 
             ref1=$(git rev-parse --abbrev-ref HEAD)
             ref2=$1
    fi  
    
    git diff --src-prefix\=${ref1}\-\- --dst-prefix\=${ref2}\-\- $ref1..$ref2

那些不熟悉shell脚本的人可以将它放在txt文件中,该文件名为您想要调用的命令(我的名字叫gitd)。然后使用以下命令使其可执行:chmod + x 接下来将其放在您的PATH变量的目录中,我使用〜/ bin 最后,当您要使用分支/提交/任何方式运行diff时,请使用gitd <whatever> [whatever]。请注意,您选择的第一个<whatever>是分支/提交/其他内容。输入的第二个[whatever]是可选的,导致diff的第一个参数为HEAD,第二个参数为。