为什么我的分行总是“过时”,即使有常客“拉”?

Why my branches are always "out-of-date", even with regulars "pull"?

提问人:jake.mactavish 提问时间:11/7/2023 最后编辑:amphetamachinejake.mactavish 更新时间:11/9/2023 访问量:55

问:

我有 3 个分支:“dev”、“test”和“main”。他们受到保护,我不能直接推他们。

当我开发一些东西时,我必须创建一个新的分支(例如:new-feature)。然后,推动它,并执行从“新功能”到“开发”,从“开发”到“测试”,从“测试”到“主要”的拉取请求。

通常,当我尝试从“开发”到“测试”进行 PR 时,我得到“此分支与基本分支已过时”。 我怎样才能避免它?

我试图在从“dev”创建新分支之前拉出我的 3 个分支,但这似乎还不够:对“dev”的 PR 还可以,但由于这个“过时”的问题,它从“dev”到“test”不起作用(从“dev”到“master”相同)。

谢谢

git push 分支 拉取

评论

0赞 eftshift0 11/7/2023
听起来您已经设置了分支,要求源分支具有目标分支的最新版本......从您的工作流程描述来看,这不会为和检查提供程序中的设置(这不是 git 的事情)站得住脚。testmain
0赞 jake.mactavish 11/7/2023
是的,没错,但我无法更改这些设置......我可以通过进行一些合并和变基来解决这个问题,因此 git 可以解决这个问题。在错误发生之前,我正在寻找更好的方法来做到这一点。
0赞 eftshift0 11/7/2023
哦。。。不要变基长时间运行的分支(如 、、),否则您将进入版本控制的基础设施(您已被警告)。您可以在相反的方向上进行合并,然后创建 PR from to ....但这听起来像是矫枉过正......如果你不应该直接合并到 and 中(并且你保护了这些分支,不接受直接推送,对吧?),那么就没有必要在这些分支上请求它,因为你应该进入(该分支可能可以设置该标志)。testdevmasterdevtestmastertestdev
0赞 jake.mactavish 11/8/2023
谢谢,由于我的“不同步”问题,我现在只能重新变基,这就是为什么我在询问我的拉取请求之前正在寻找另一种解决方案^^'

答:

0赞 amphetamachine 11/8/2023 #1

简短的回答:别担心。

如果您不断合并到 ,除非您始终使用快进合并,否则分支中总是会有额外的合并提交,而这些合并提交不会。这是必然会发生的。有时快进合并称为 rebase-and-squash,但在合并长期存在的侧分支时,我不能推荐它,就像你的情况一样。testmainmaintest

当您看到此消息时,应忽略它。

screenshot from github.com of a pop-out message on a Pull Request page: "This branch is out-of-date with the base branch / Merge the latest changes from main into this branch. This merge commit will be associated with ." with a button labelled "Update branch"

单击“拉取请求”页面中的按钮,将目标分支合并到源分支中。例如,合并到 的 PR 将合并到 ,违反了您预期的合并流程。Update branchtestmainmaintest

由于您使用的分支策略与“gitflow”非常相似,因此理想情况下,合并应该只流向一个方向。单击会违反该流程。Update branch

从贡献者的角度详细了解分支策略

对接下来的信息持保留态度 - 你做得很好,不需要改变任何东西

我发现对我有用的策略是,当我想更改分支 X 时,我会在分支 X 的 HEAD 处开始我的功能分支(即 -- 然后 , , 等)。此策略与 rebase 和 squash 完美配合。git checkout -b my-feature origin/branchxaddcommit

如果我的更改同时针对分支 X 和分支 Y,我将从分支之间的“合并基础”开始(即两个分支共有的最新提交 - )。这只是这样,我不会在不属于别人的地方介绍别人的更改;假设 Bob 破坏了分支,我不希望他的提交 - 这种合并基础策略使我不抓取 Bob 的提交。此策略不适合轻松使用 rebase-and-squash。git checkout -b my-feature $(git merge-base --octopus origin/branchx origin/branchy)test

评论

0赞 jake.mactavish 11/8/2023
谢谢!我只是尝试使用“合并基础”的第二个解决方案,因为我必须将我的新功能放在“dev”上,然后放在“test”上。不幸的是,当我要求从“dev”到“test”的拉取请求时,我再次收到“不同步”错误。在推送我的新功能之前保持我所有的分支同步真的是不可能的吗?
0赞 amphetamachine 11/9/2023
使用您正在使用的合并策略,它总是会这么说。它是否阻止了您的 PR 能够被合并?dev --> test --> main