在提交给master之前,我经常压榨特征分支上的所有提交。这是我目前正在做的事情:
git checkout master
git merge --squash {branch}
git commit -m "{feature_summary}"
我可以使用git别名吗?我熟悉的别名(例如stashes = stash list
或uncommit = reset --soft HEAD~1
)不存储变量,在这种情况下,第二个命令需要知道我们来自哪个分支命令的开头,因此我想必须存储此信息。
理想情况下,我想使用git别名(例如git squash
)来执行所有这些命令。我希望将字符串作为提交消息,或者打开编辑器输入消息都可以。
答案 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)
[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 "${@}"