Git 压缩功能分支提交的别名

Git alias to squash feature-branch commits

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

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

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

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

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

那么一个示例用法可以是,来自您的功能分支:

git ms "My commit message"

你可以create an alias yourself:

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

你可以运行它

git sf <branch> "<message>"

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

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

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