将parameter passing给Git别名命令

我可以将parameter passing给Git命令的别名吗?

我在Gitconfiguration中有一些别名,如下所示:

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 Faq部分“Git Aliases with argument” ,你可以这样做,但通过一个shell调用git:

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

我还没有testing过,但如果你能通过一个论点,那就是做这件事的方法。

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

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

重新分配所有提交

如果你只是想重新分配你的分支中新增的所有提交,那么从你从父分支中分支出来的时候,在你的configuration中只需要有下面的别名就更容易了:

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

然后,如果您想重新绑定已添加到当前分支的所有提交,则可以运行:

 git rbi parentBranch 

这种方法使用了一个参数,而不是必须知道有多less提交返回,你只需提供分支名称,它会通过git merge-base当前分支和父分支之间最近提交的提交

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

你会这样做,而不是直接git rebase -i parentBranch是,你可能不想处理合并冲突,直到后来的一点,甚至在一个提交中处理合并冲突,然后相同的冲突在另一个提交的同一行。 请参阅https://stackoverflow.com/a/31036645/444610