git 操作
需求
在一般的项目中,往往只需要将某个分支往 dev 分支合并,但是有时候并不是所有的 commit 都需要合并.在这个例子中,
一共会有三个分支: dev
qa
prod
, dev
是我们开发的分支,所有的功能都将在这个分支上开发,当开发完成后,
本地测试通过后,需要发布到qa
分支,测试.当需要正式上线时,需要将功能提交到prod
上.
dev 开发
现在假设有三个需求,我们都进行了开发,所以会有三个 commit 信息.
在 dev 上会呈现这样的 commit history
现在我们仅仅只需求二更新到 qa 分支,我们应该怎么操作呢?
1 | # 首先我们现在本地建立与qa的链接 |
在上面的事例中,我们仅仅合并了一个 commit 了,但是如果需要合并多个且连续的 commit 应该怎么办呢假设我们需要
从 commit_id: first_commit 的 commit 合并到 commit_id: last_commit 的 commit
1 | # 依旧使用git cherry-pick 这种情况是[]前闭后闭 |
以上就可以完成从dev
分支合并需要的 commit 内容到qa
分支了,qa
到prod
同理
出现 bug 了
但是往往我们在开发的过程中并不是一帆风顺的,很难一步到位,所以可能某个功能需要再次调整,平常的项目,重新调整了,
提交个 commit 往 dev 合并就可以了,但是当前项目的特殊性,可能改功能可能不会立即上线,也许在一个月后,到那时,可能已经不记得这个功能被修复过,所以,我们可以将相同功能的 commit 融合成一个.首先还是正常的开发,解决 bug,这里使用需求 1 来举例.当我们正常开发完毕,推送 commit 后,commit history 会是:
此时我们需要将这个 commit 合并到 feat: 需求 1 这个 commit 中,应该如何操作呢
1 | # 使用git rebase -i commit_id |
我们可以看到下面的界面
然后我们按下 i
进入编辑,编辑成这样
然后按下esc
输入:wq
退出
然后会进入
可以修改 commit 信息,修改流程和上面一样。
我们可以看见
最后我们
1 | git push -f |
查看 commit history 已经变成这样啦!
然后我们需要发布测试啦,只需要使用git cherry-pick
一次就可以将这个功能发布到qa
环境咯
写到最后
这已经是最后啦