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
会很有用。
是否有任何选项或设置可以做到这一点?
要预先回答以下注意事项和答案:
master
和issue-1234
git reflog
,而是要求输入文字上的命令行参数sed
单线衬套来做到这一点”
stdout
不再是tty,因此更改了许多默认设置,包括禁用寻呼机,着色和其他各种选项。答案 0 :(得分:1)
这些ID用于要扩散的Blob,其名称在上面给出(并且在下面的输出中带有文本diff),例如a/file
是c77692b
。使用可变的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,第二个参数为。