【问题标题】:Git alias to squash feature-branch commits用于压缩功能分支提交的 Git 别名
【发布时间】:2020-10-24 08:06:39
【问题描述】:

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

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

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

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

【问题讨论】:

  • xargs 可用于此。但是,我的语法太糟糕了,所以我只是评论,而不是回答。对此感到抱歉。

标签: git git-merge git-squash git-alias


【解决方案1】:

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

【讨论】:

  • @msanford 哈!也很高兴在这里见到你。
  • 这看起来很完美,但我根据squash-master = '!f() { git checkout master && git merge --squash @{-1} && git commit -m "$1"; }; f 得到fatal: bad alias.squash-master string: unclosed quote 我做错了吗?
  • @Maximilian Strange...检查一下,我会尽快编辑。
  • 我认为这是 shell 命令与添加到文件中的引用问题。我删掉了这个功能,所以它现在可以工作并且可能更加压缩? squash-master = "!git checkout master && git merge --squash @{-1} && git commit -m"
【解决方案2】:

你可以create an alias yourself:

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

你可以运行它

git sf <branch> "<message>"

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-10
      • 2022-08-16
      • 2015-10-26
      • 2022-01-19
      • 1970-01-01
      • 2012-08-23
      • 2019-01-31
      • 2019-08-14
      相关资源
      最近更新 更多