将参数传递给 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 函数