将参数传递给Git别名命令

Hav*_*veF 66 git git-config git-alias

我可以将参数传递给Git命令的别名吗?

我在Git配置中有一些别名,如下所示:

rb1 = rebase -i HEAD~1
rb2 = rebase -i HEAD~2
rb3 = rebase -i HEAD~3
rb4 = rebase -i HEAD~4
....
Run Code Online (Sandbox Code Playgroud)

是否可以制作rb别名,以便git rb <x>适用于任何<x>

我试过这个别名:

rb = rebase -i HEAD~
Run Code Online (Sandbox Code Playgroud)

但后来例如git rb 8不起作用.

Von*_*onC 92

如果你考虑Git Faq部分"Git Aliases with argument",你可以这样做,但是通过shell调用git:

[alias]
        rb = "!sh -c \"git rebase -i HEAD~$1\" -"
Run Code Online (Sandbox Code Playgroud)

我还没有测试过,但是如果你能通过一个论证,那就是这样做的方法.

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

[alias]
        rb = "!f() { git rebase -i HEAD~$1; }; f"
Run Code Online (Sandbox Code Playgroud)

  • 我在Mac上使用1.7.12.4并且我从不使用`sh -c`部分...`"!git rebase -i HEAD~ $ 1;"`对我来说很好. (5认同)
  • 我需要把一个`#`放到最后:[config] rbi ="!git rebase -i HEAD~ $ 1#" (2认同)

Set*_*ers 5

自分支以来重新调整所有提交

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

rbi = !sh -c \"git rebase -i `git merge-base $1 HEAD`\" -
Run Code Online (Sandbox Code Playgroud)

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

git rbi parentBranch
Run Code Online (Sandbox Code Playgroud)

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

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

您这样做而不是直接这样做的原因git rebase -i parentBranch是您可能不想在稍后处理合并冲突,甚至不想在一次提交中处理合并冲突,然后在同一行中处理相同的冲突另一个提交。见/sf/answers/2172565181/