首页 > 解决方案 > 用于压缩功能分支提交的 Git 别名

问题描述

在提交到 master 之前,我经常压缩功能分支上的所有提交。这是我目前所做的:

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

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

理想情况下,我想要一个 git 别名,例如git squash执行所有这些命令。我可以期待一个字符串作为提交消息,或者打开一个编辑器来输入消息。

标签: gitgit-mergegit-squashgit-alias

解决方案


您可以使用@{-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"

推荐阅读