我正在尝试编写一个git别名,它将为单个提交创建一个补丁,然后我可以将其应用于上游存储库。
这是我到目前为止所做的:
pa = !sh -c 'git diff --relative "$1"^ "$1"' -
所以在命令行上我说:
$ git pa SHA
我得到了差异输出。
我的问题是--relative选项没有效果。我希望diff相对于当前文件夹,以便补丁在上游存储库中正确应用。例如,我在myproject / libraries / external中,我已在此文件夹中提交了更改。我现在想制作一个我可以提交或提交到外部项目的问题队列的补丁,因此需要--relative选项。
(顺便说一句:我知道格式补丁,但它根本不能做我想要的。我不想要邮件文件,我想要我可以读取的补丁文件并上传到问题跟踪器。)
答案 0 :(得分:1)
非Git别名(以!
开头)总是从回购的顶级目录执行。
因此,对于您定义的别名,您将获得差异,就好像您从未使用过--relative
标志
我看到的唯一选择是设置别名:
[alias]
pa = diff --relative
并将其用作git pa SHA^ SHA
(这不是更短的别名)
答案 1 :(得分:0)
git diff SHA^ SHA -- .
怎么样?那应该是相对于当前的工作目录。我从未听说过--relative
选项,也无法在git diff manpage中找到它。
pa = !sh -c 'git diff "$1"^! -- .' -
(SHA^!
只是一种简洁的说法SHA --not(all of SHA's parents)
- 可能不是你期望的合并提交输出)
答案 2 :(得分:0)
尝试将--relative
选项与--no-prefix
:
git diff --no-prefix --relative "$1"^ "$1"
也许你对git diff默认添加到其输出的前缀感到困惑?
答案 3 :(得分:0)
作为manojlds points out,非Git别名(以“!”开头的那些)总是从存储库的顶级目录执行,所以这不会起作用。
相反,您可以使用bash函数(或shell的等效函数):
git-pa() { git diff --relative "$1"^ "$1" "${@:2}"; }
("${@:2}"
将所有后续参数保持不变,以防您想要传递其他优化内容 - see documentation)。