76

我可以将参数传递给 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不起作用。

4

4 回答 4

101

如果您考虑Git 常见问题解答部分“带参数的 Git 别名”,您可以这样做,但通过外壳调用 git:

[alias]
        rb = "!sh -c \"git rebase -i HEAD~$1\" -"

我还没有测试它,但如果你可以传递一个论点,那就是这样做的方法。

类似的解决方案是使用shell 函数

[alias]
        rb = "!f() { git rebase -i HEAD~$1; }; f"
于 2011-08-10T03:54:25.537 回答
5

重新设置分支后的所有提交

如果您只想重新设置分支中所有新提交的基础,那么自从您从父分支分支以来,在您的配置中使用以下别名会更容易:

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

于 2015-06-24T20:35:16.920 回答
1

我写了这个函数“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

于 2018-07-07T15:08:59.727 回答
1

@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"
于 2019-08-16T23:39:00.837 回答