Pass an argument to a Git alias command

天涯浪子 提交于 2019-11-27 03:31:16
VonC

If you consider the Git Faq section "Git Aliases with argument", you could do it, but by calling git through a shell:

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

I haven't tested it yet, but if you can pass an argument, that would be the way to do it.

A similar solution would be to use a shell function:

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

Rebasing all commits since branching

If you just want to rebase all the commits that are new in your branch, since the time you branched from the parent branch, it would be easier to just have the following alias in your config:

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

Then, if you wanted to rebase all the commits you've added to your current branch, you could simply run:

git rbi parentBranch

This approach uses an argument, but instead of having to know how many commits to go back, you just supply the branch name, and it figures out most recent commit shared between the current branch and the parent branch via git merge-base

Why this, rather than git rebase -i parentBranch

The reason you would do this rather than a straight git rebase -i parentBranch is that you might not want to deal with the merge-conflicts until a later point, or even deal with a merge-conflict in one commit, and then the same conflict on the same line in another commit. See https://stackoverflow.com/a/31036645/444610

I wrote this function "grb" to do Git interactive rebase on a Mac, so I can say grb 5 to show my last 5 commits:

function grb {
  git rebase -i HEAD\~$1
}

The top answer on this page does not work for me. To see my .bash_profile and all other Git aliases I use on my Mac:

https://github.com/rayning0/bash_profile/blob/master/.bash_profile#L149

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!