Git别名来挤压功能分支提交

时间:2020-07-03 15:03:36

标签: git

在提交给master之前,我经常压榨特征分支上的所有提交。这是我目前正在做的事情:

git checkout master
git merge --squash {branch}
git commit -m "{feature_summary}"

我可以使用git别名吗?我熟悉的别名(例如stashes = stash listuncommit = reset --soft HEAD~1)不存储变量,在这种情况下,第二个命令需要知道我们来自哪个分支命令的开头,因此我想必须存储此信息。

理想情况下,我想使用git别名(例如git squash)来执行所有这些命令。我希望将字符串作为提交消息,或者打开编辑器输入消息都可以。

3 个答案:

答案 0 :(得分:2)

您可以使用@{-1}构造(表示“最后签出的分支”),并将参数传递给临时bash函数:

# ms for merge-squash but call it as you prefer
git config --global alias.ms '!f() { git checkout master && git merge --squash @{-1} && git commit -m "$1"; }; f'

然后可以在您的功能分支中使用示例:

git ms "My commit message"

答案 1 :(得分:1)

您可以create an alias yourself

[alias]
    sf = !git checkout master && git merge --squash "$1" && git commit -m "$2"

您可以通过以下方式运行它

git sf <branch> "<message>"

答案 2 :(得分:0)

如果您的PATH中有一个名为git-command的程序,则git将在您调用git command [args]时使用该程序。

因此,您可以将以下脚本添加到PATH,将其命名为git-squash并使其可执行。

#!/bin/bash
branch="${1}"
shift
git checkout master \
&& git merge --squash "${branch}" \
&& git commit "${@}"