我可以将参数传递给Git命令的别名吗?
我在Git配置中有一些别名,如下所示:
rb1 = rebase -i HEAD~1
rb2 = rebase -i HEAD~2
rb3 = rebase -i HEAD~3
rb4 = rebase -i HEAD~4
....
是否可以使rb
别名git rb <x>
适用于任何别名<x>
?
我试过这个别名:
rb = rebase -i HEAD~
但是例如git rb 8
无法正常工作。
我可以将参数传递给Git命令的别名吗?
我在Git配置中有一些别名,如下所示:
rb1 = rebase -i HEAD~1
rb2 = rebase -i HEAD~2
rb3 = rebase -i HEAD~3
rb4 = rebase -i HEAD~4
....
是否可以使rb
别名git rb <x>
适用于任何别名<x>
?
我试过这个别名:
rb = rebase -i HEAD~
但是例如git rb 8
无法正常工作。
Answers:
如果考虑“ Git常见问题”部分“带有参数的Git别名”,则可以这样做,但是可以通过外壳程序调用git:
[alias]
rb = "!sh -c \"git rebase -i HEAD~$1\" -"
我还没有测试过,但是如果您可以传递参数,那将是这样做的方法。
一个类似的解决方案是使用shell函数:
[alias]
rb = "!f() { git rebase -i HEAD~$1; }; f"
sh -c
..."!git rebase -i HEAD~$1;"
对我来说效果很好。
#
结尾放到最后:[config] rbi =“!git rebase -i HEAD〜$ 1#”
"..."..."..."
不"...'...'..."
?
重新分支以来的所有提交
如果您只是想对分支中所有新的提交进行重新设置,自从父分支分支分支以来,在配置中只包含以下别名会更容易:
rbi = !sh -c \"git rebase -i `git merge-base $1 HEAD`\" -
然后,如果要重新添加已添加到当前分支的所有提交,则可以简单地运行:
git rbi parentBranch
这种方法使用一个参数,而不必知道要返回的提交数,只需提供分支名称,它就可以计算出当前分支与父分支之间共享的最新提交。 git merge-base
为什么这样做,而不是git rebase -i parentBranch
之所以这样做而不是简单,git rebase -i parentBranch
是因为您可能不希望在以后再处理合并冲突,甚至不想在一次提交中处理合并冲突,然后在同一行的同一行中处理同一冲突。另一个提交。参见https://stackoverflow.com/a/31036645/444610
@Droogans在对已接受的答案的评论中指出,至少在macOS上(我想对于任何类似Unix的OS,甚至可能是Windows都一样),您可以将其$1
用作代表参数的占位符值在别名中。因此,要设置一个别名,使其git rb 8
变为git rebase -i HEAD~8
:
rb = "!git rebase -i HEAD~$1;"
您还可以在别名中多次使用它,因此,例如,如果您想要一个可以转换git f my-branch
为的别名,则git fetch origin my-branch:my-branch
可以执行以下操作:
f = "!git fetch origin $1:$1"
我编写了此函数“ grb”,以便在Mac上进行Git交互式变基,因此可以说grb 5
显示最后5次提交:
function grb {
git rebase -i HEAD~$1
}
此页面上的最佳答案对我不起作用。要查看我.bash_profile
在Mac上使用的我和所有其他Git别名:
https://github.com/rayning0/bash_profile/blob/master/.bash_profile#L146