我是新来的,只是在吉特里闲逛。
最近,我有机会在一个巨大的存储库上工作。(我相信它在全球git历史上也能排在这么大的位置)回购的平均每分钟提交3-5次。(这里不是开玩笑的)
让我们回到问题上,
由于回购是巨大的,我们维持一个基于PR的合并意义,没有人可以直接提交预定义的5个分支。当我们尝试提交开发分支时,我们需要创建一个自定义特性分支,并且它经常不同步,因此为了避免这一点,在开发过程中我们首先推空分支。导致在本地出现以下场景。
Mainline branch
a--b--c--d--e--f--g--h --i--j
-1--2 (custom/feature branch)因此,在给定情况下,我希望我的分支(自定义/特性分支)类似于
a--b--c--d--e--f--g--h--k--l--1--2我知道一种实现这一目标的方法,我们在自定义分支上执行以下操作
git reset --hard~2
git pull origin Mainline --ff-only
git reflog | grep "commit"
git cherry-pick ######1
git cherry-pick ######2给定方法可以确保我没有丢失任何提交,并且我的分支与Mainline分支同步,没有任何合并提交。
,所以这里的问题是“对于所有提交/分支来说,做这件事很忙,那么我们是否可以通过1-2命令来完成它呢?”。
我还对git的行为感到困惑,因为我们正在使用bitbucket web接口,它向我们展示当PR部分发生冲突时,同时将自定义分支合并到主线分支。
所以这里的疑问是,是否有必要保持自定义分支的更新?(由于我们使用递归策略进行合并,我不认为这是绝对必要的。)。
发布于 2021-04-05 06:35:07
所以这里的问题是:“对于所有提交/分支来说,这么做是很忙的,那么我们是否可以通过1-2命令来完成呢?”
$ git fetch origin Mainline
$ git rebase origin/Mainline请注意,这将不会更新“本地”主线,但如果您不应该直接在其中工作,您也可以删除它,只保留遥控器。
如果您有多个有用的分支,您可能希望将分支名称去掉,并将-p (--prune)添加到fetch。
$ git fetch -p origin这将更新所有跟踪origin的分支,并自动删除(修剪)已删除的分支。
如果您有多个遥控器,您可能希望用origin替换--all,保持-p在同一个命令中:--all将遍历每个远程并更新它们的所有分支。
git pull --rebase origin Mainline也应该可以工作,但是我不喜欢git pull,我宁愿单独和显式地执行“与远程同步”和“更新本地分支”的步骤。
我感到有点惊讶的是,贡献者文档或培训并没有将其作为一个示例工作流提供。
所以这里的疑问是,是否有必要保持自定义分支的更新?(由于我们使用递归策略进行合并,我不认为这是绝对必要的。)
严格来说?不,git不在乎。
如果这是由项目的贡献指南授权的,尽管可能有实际的原因,例如历史可视化工具往往会遇到许多分支相互重叠的问题,这是一种避免分支重叠的方法,因为分支基本上总是跨越两个提交。
如果我强制这样做,我会添加工具来自动完成它(一些变体或模式的“合并bot")。
https://stackoverflow.com/questions/66949023
复制相似问题