如果我使用优先选择或手动编辑文件,git 中的历史记录是否会发生分歧?

问题描述

我有一个名为 main 的开发分支、一个名为 staging 的暂存分支和一个名为 production 的生产分支。我想将修补程序推送到生产分支。

首先,我从 main 创建了一个新分支:

git checkout main
git checkout -b hotfix

然后我将分支合并到main

git checkout main
git merge hotfix

然后将分支合并到 staging 以便首先部署到暂存环境并检查分支是否有效:

git checkout staging
git merge hotfix

现在我想将修补程序分支合并到 production,但是合并会带来许多与修补程序无关的其他更改。这些其他更改尚未在 staging 环境中检查,因此我不想在 production 中使用它们。因此,我决定只将 cherry-pick 与修补程序相关的提交从 hotfix 分支转移到 production。我在采摘樱桃的时候也有过一些冲突。

我想知道将来我在 mainstaging 中精心挑选的代码区域是否会发生变化,它们会反映在 production 中吗?我担心git不会因为樱桃挑选和冲突而反映它们。

是否有更好的方法来处理 git 中的修补程序,以免发生上述问题?

解决方法

我不确定我是否正确理解您的问题,但关于这部分:

我想知道将来我在主要和暂存中挑选的代码区域是否会发生变化,它们会反映在生产中吗?我担心git不会因为樱桃挑选和冲突而反映它们。

当您挑选时,git“重放”提交引入的更改,并将这些更改应用到目标分支上,进行新的(和不同的)提交。此提交与您选择的提交没有链接,因此 Git 永远不会知道“另一边”发生的任何事情,无论是否解决冲突。