我不是开发人员。 在我们的一个项目中,由于很多问题需要时间来解决,我们一直在挑选提交记录,现在我们必须经常这样做。 有位开发人员告诉我应该避免使用挑选提交记录功能,因为这会使仓库不稳定。 那是什么意思,它怎么会使仓库不稳定? 换句话说,挑选提交记录的负面影响是什么?
我不是开发人员。 在我们的一个项目中,由于很多问题需要时间来解决,我们一直在挑选提交记录,现在我们必须经常这样做。 有位开发人员告诉我应该避免使用挑选提交记录功能,因为这会使仓库不稳定。 那是什么意思,它怎么会使仓库不稳定? 换句话说,挑选提交记录的负面影响是什么?
A - B - C - D - E [master]
\
1 - 2 - bugfix - 3 - 4 - 5 [feature]
master
中。git cherry-pick bugfix
A - B - C - D - E [master]
\
1 - 2 - bugfix - 3 - 4 - 5 [feature]
master
中存在所有问题。它可能依赖于某个其他的feature
,也可能无法正常工作,会引入更加微妙的错误,或者是不完整的。这很可能就是他们所说的“使代码不稳定”。
master
提交代码,一切都必须在分支上完成。分支经过QA测试后再合并。这确保了master
始终保持在良好的状态,并且没有人共享未测试和低质量的代码。git checkout -b fix/bug
git cherry-pick bugfix
bugfix' [fix/bug]
/
A - B - C - D - E [master]
\
1 - 2 - bugfix - 3 - 4 - 5 [feature]
fix/bug
经过正常的 QA 流程。任何问题都会被修复。当它通过 QA 后,它将被合并到 master
分支中。假设出现了问题,因此有另一个提交。git checkout master
git merge fix/bug
git branch -d fix/bug
bugfix' - F
/ \
A - B - C - D - E ----------- G [master]
\
1 - 2 - bugfix - 3 - 4 - 5 [feature]
feature
应该从 master
更新自己,以确保它拥有完整的错误修复。可能会存在 master 版本的错误修复与其自身版本之间的冲突。像往常一样解决它们。git checkout feature
git merge master
bugfix' ---- F
/ \
A - B - C - D - E -------------- * [master]
\ \
1 - 2 - bugfix - 3 - 4 - 5 - * [feature]
一旦feature
完成,它可以像正常情况下一样合并到master
中。Git不关心历史记录中有两个版本的错误修复,任何问题都已经在更新合并中解决了。
git checkout master
git merge feature
git branch -d feature
bugfix' ---- F
/ \
A - B - C - D - E -------------- * --------- * [master]
\ \ /
1 - 2 - bugfix - 3 - 4 - 5 - * - 6 - 7
顺便提一下:如果你使用rebase
来更新你的分支,而不是合并,这是我的偏好,Git可能会认为一个修复bug的提交是多余的,因此会将其完全删除。
git checkout feature
git rebase master
bugfix' - F
/ \
A - B - C - D - E --------- - * [master]
\
1 - 2 - 3 - 4 - 5 [feature]