我可以将参数传递给 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
不起作用。
如果您考虑Git 常见问题解答部分“带参数的 Git 别名”,您可以这样做,但通过外壳调用 git:
[alias]
rb = "!sh -c \"git rebase -i HEAD~$1\" -"
我还没有测试它,但如果你可以传递一个论点,那就是这样做的方法。
类似的解决方案是使用shell 函数:
[alias]
rb = "!f() { git rebase -i HEAD~$1; }; f"
重新设置分支后的所有提交
如果您只想重新设置分支中所有新提交的基础,那么自从您从父分支分支以来,在您的配置中使用以下别名会更容易:
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
我写了这个函数“grb”来在 Mac 上做 Git 交互式变基,所以我可以说grb 5
显示我最近的 5 次提交:
function grb {
git rebase -i HEAD~$1
}
此页面上的最佳答案对我不起作用。要查看我.zprofile
在 Mac 上使用的所有其他 Git 别名:
https://github.com/rayning0/zsh_profile/blob/master/.zprofile#L157
@Droogans 在对已接受答案的评论中指出,至少在 macOS 上(我想这对于任何类似 unix 的操作系统,甚至可能是 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"