【问题标题】:Git branching workflow; how to reduce number of Git commandsGit分支工作流程;如何减少 Git 命令的数量
【发布时间】:2014-12-17 02:57:53
【问题描述】:

这不是关于工作流程意见的问题,而是关于如何减少以下工作流程的击键的具体问题。

我的开发团队通常遵循自定义的分支 G​​it 工作流程。

工作流程

  • 代码从master分支
  • 分支有前缀feature/<branch>refactor/<branch>bug/<branch>等...
  • 为该分支编写代码(和测试)
  • 代码作为拉取请求提交给master
  • 对拉取请求进行审查、评论,然后合并到master
  • 删除旧分支并继续

这是我们的工作流程,非常适合我们。但是,我为完成所有这些操作而执行的 git 命令变得相当重复且有点烦人。

工作流的 Git 命令

  • git checkout -b feature/new-branch-name
  • 做一些工作...
  • git add .
  • git commit -m "some commit message"
  • git push --set-upstream origin feature/new-branch-name
  • 转到 Github Enterprise 页面,为刚刚推送的代码提交 Pull Request
  • 查看 Pull Request 和 Merge,删除 repo 上的分支,但现在必须在本地删除...
  • git checkout master(切换回 master 以合并更改)
  • git pull(从新分支获取更新)
  • git branch -d feature/new-branch-name(删除本地分支)
  • 现在我处于可以重复所有内容的状态

有没有更简洁的方法来减少这么多git 命令?重复所有这些变得非常乏味。我正在考虑编写一些脚本文件来为我管理其中的一些。我知道有些脚本已经存在,但我不想被强迫进入别人的方法,我真的只是在这里寻找节省我的手指的方法。

任何一天,我都会分支并提交大约 3-6 次 Pull Requests。所以我们的分支机构很短命,规模和范围都很小。但实际过程是艰巨的。

谁有更好的实现来完成我团队的分支机制?

【问题讨论】:

  • 您是否考虑过利用 Git 别名。优秀的候选人是“结帐”、“结帐大师”、“拉”、“分支 -d”和“添加”。
  • @ThomParkin,如果唯一真正的途径是创建自定义命令,我可能更喜欢 shell 脚本而不是 git 别名。我认为 git 别名仍然必须在命令前加上“git ”。我想我想看看是否有一种方便的内置方法来获取我的工作流程并在 Git 上建立它,但看起来我需要编写一些脚本来做到这一点。

标签: git workflow git-branch git-flow


【解决方案1】:

1) 不需要每次想要分支出物理更新master,可以替换以下步骤:

git checkout master
git pull
git checkout -b feature/new-branch-name

与:

git fetch
git checkout -b feature/new-branch-name origin/master

(这两个命令非常适合 git 别名/脚本,例如 git-start-feature)

2) git add . && git commit -m msg 就是 git commit -a -m msg。有时您会想要进行单个提交,有时将更改拆分为多个提交,因此编写脚本没有意义。您也可以先提交任何更改,然后继续修改它。

3)你不需要立即删除本地分支,但如果你想,那么你可以将这一步与git push结合起来:

git push -u origin feature/new-branch-name
git checkout master
git branch -D feature/new-branch-name

你可以把它变成脚本git-push-forget:

#!/bin/bash
branch_name=$(git rev-parse --abbrev-ref HEAD)
case "$branch_name" in
    master)
        echo "ops, this master!"
        exit 1
        ;;
    *)
        if git push -u origin "$branch_name"; then
            git checkout master
            git branch -D "$branch_name"
        else
            echo "umpf, git push failed..."
            exit 2
        fi
        ;;
esac

(请注意,我没有检查此脚本是否有效,只是在线输入;如果您对此有任何疑问,请联系我)

所以现在您的工作流程将如下所示:

git-start feature/new-branch-name
# work, work, work
git commit -a -m "magnificent"
git-push-forget
# do github specific stuff

[编辑] 此外,使用 bash 补全可以快速使用终端。如果您使用的是 Linux,请确保您已安装 bash-completion(或 bash-complete)数据包 - 某些发行版可能不会默认安装它。您还可以编写自己的完成文件(例如,不断建议您使用 git-start 脚本的分支名称)。如果您想朝那个方向前进,请大声喊叫。

另一点是使用来自 git-push-forget 脚本的 github 拉取请求打开浏览器页面(如果可以猜测 url;我不使用 github 企业)。

【讨论】:

  • 我写了一些类似的脚本,但是你有一些我没有想到的好主意。总的来说,我认为自定义脚本是最好的解决方案,因为它允许每个团队(和开发人员)定制他们的方法,只要他们分支/合并回 master(至少对我的团队来说)。感谢您的想法,我将根据您的一些想法更新我自己的脚本!