gpt4 book ai didi

Git 在 merge 时排除还原提交

转载 作者:太空狗 更新时间:2023-10-29 14:09:21 25 4
gpt4 key购买 nike

我们使用长期分支 PROD、TEST 和 DEV。

下一个应用版本在 DEV 中开发,准备测试时 merge 到 TEST 中,一旦发布后 merge 到 PROD 中。

一些提交是直接在 TEST 分支(用于修正被测试版本的错误)和 PROD(用于维护错误)中进行的。

PROD 和 TEST 中的这些提交总是“向下 merge ”到子分支中(即:PROD merge 到 TEST 和 DEV 中;TEST merge 到 DEV 中)。

偶尔,在 PROD 中提交错误修正,然后在 TEST 和 DEV 中向下 merge ,然后推送到源。但是后来,计划发生了一些变化,错误修正应该是 TEST 版本的一部分,而不是 PROD 版本。

现在问题来了:如果我在 PROD 中还原提交,当 PROD 向下 merge 时,还原也会在 TEST 和 DEV 中完成。如何继续删除 PROD 中的更改并将其保留在 TEST 和 DEV 中,即使在 PROD 被 merge 后也是如此?

我目前做的是,来自测试:

git merge PROD --no-commit

这允许我在 TEST 中提交 merge 之前放弃从 PROD 还原的更改。然后在没有特殊干预的情况下从 TEST merge 到 DEV。如果要从 PROD merge 的唯一提交是还原的提交,则这会导致没有文件的 merge ……但这似乎仍然有效。

所以我想知道我的方法是否正确,或者是否有更好的方法来做到这一点?

最佳答案

一般来说,将生产分支 merge 回测试分支是个坏主意。它通常应该是 git checkout PROD,然后是 git merge TEST。 (如果您想了解更多有关此经验法则的信息,blog post on merging and branches 给出了充分的理由。)

如果有人不小心在 PROD 中提交了本应在 TEST 上的修复,您可能应该将该修复挑选到 TEST 上并在 PROD 上还原它。为了逐步描述这一过程,我们假设在 PROD 上进行修复的提交具有对象名称 A。然后:

 # cherry-pick the commit onto `TEST`.
git checkout TEST
git cherry-pick A

# Now revert the commit on `PROD`:
git checkout PROD
git revert A

现在,当您将 TEST merge 到 PROD 中时,应该 merge 修复。(根据历史记录,它可能会产生冲突,但如果是的话,这应该是很容易解决支持 TEST 上的版本。)

关于Git 在 merge 时排除还原提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7916356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com