2

在提交到 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执行所有这些命令。我可以期待一个字符串作为提交消息,或者打开一个编辑器来输入消息。

4

3 回答 3

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"
于 2020-07-03T15:11:26.713 回答
1

您可以自己创建别名

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

你可以运行它

git sf <branch> "<message>"
于 2020-07-03T15:11:51.020 回答
0

如果你在你PATH的一个程序中有调用git-commandgit当你调用时会使用那个程序git command [args]

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

#!/bin/bash
branch="${1}"
shift
git checkout master \
&& git merge --squash "${branch}" \
&& git commit "${@}"
于 2020-07-03T15:44:00.447 回答