将参数传递给 Git 别名命令

Posted

技术标签:

【中文标题】将参数传递给 Git 别名命令【英文标题】:Pass an argument to a Git alias command 【发布时间】:2011-10-23 17:55:24 【问题描述】:

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

【问题讨论】:

你为什么经常这样做,以至于你认为你需要这些别名? 这个问题确实来自“rebase”的快捷方式,尽管对于这些不那么频繁的命令来说这似乎是一个毫无意义的问题。但是这个问题可以是一个普遍的问题。所以... git alias with positional parameters (git foo aaa bbb ccc => foo aaa && bar bbb && baz ccc) 的可能重复项 同意@meagar。如果这样做的全部目的只是重新设置所有提交,因为您的分支与其父分支不同,而不必直接从该分支重新设置基准,这可能导致您目前可能不一定想要处理的合并冲突,看我的回答。 【参考方案1】:

如果你考虑Git Faq section "Git Aliases with argument",你可以这样做,但通过外壳调用 git:

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

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

类似的解决方案是使用shell function:

[alias]
        rb = "!f()  git rebase -i HEAD~$1; ; f"

【讨论】:

谢谢!我添加了一个别名来显示提交中的文件($1 == 提交哈希)。 shf = "!shf() git diff-tree --no-commit-id --name-only -r $1; ; shf" 我在 Mac 上使用 1.7.12.4,但我从不使用 sh -c 部分..."!git rebase -i HEAD~$1;" 对我来说很好。 我需要在末尾添加一个#:[config] rbi = "!git rebase -i HEAD~$1 #" "!f() git rebase -i HEAD~$1; ; f" 语法就像一个魅力! 第一个别名中的引号真的是"..."..."..."而不是"...'...'..."吗?【参考方案2】:

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

如果您只是想对分支中的所有新提交进行 rebase,因为您从父分支分支时,在您的配置中使用以下别名会更容易:

rbi = !sh -c \"git rebase -i `git merge-base $1 HEAD`\" -

然后,如果您想重新设置已添加到当前分支的所有提交,您可以简单地运行:

git rbi parentBranch

这种方法使用一个参数,但不必知道要返回多少次提交,您只需提供分支名称,它会计算出当前分支和父分支之间通过git merge-base共享的最新提交/p>

为什么这样,而不是 git rebase -i parentBranch

您这样做而不是直接git rebase -i parentBranch 的原因是您可能不想在稍后处理合并冲突,或者甚至在一次提交中处理合并冲突,然后相同在另一个提交中的同一行发生冲突。见https://***.com/a/31036645/444610

【讨论】:

有趣的变化。 +1。比我对您提到的用例的回答更准确。【参考方案3】:

@Droogans 在comment 中针对已接受的答案指出,至少在 macOS 上(我想对于任何类似 unix 的操作系统,甚至可能是 Windows),您都可以使用 @987654322 @ 作为代表别名中参数的占位符值。所以,要设置一个别名,让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"

【讨论】:

【参考方案4】:

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

【讨论】:

没有必要使用代字号

以上是关于将参数传递给 Git 别名命令的主要内容,如果未能解决你的问题,请参考以下文章

使用 argparser 将参数传递给入口点 python 脚本

将可变数量的 bash 命令行参数传递给 MATLAB 函数

将 Access 表单上命令按钮的参数传递给 python 脚本

如何将命令行参数传递给构建的 Mix Release

将命令行参数传递给 AWS Fargate 容器

如何将命令行参数传递给 WinForms 应用程序?