提问人:jake.mactavish 提问时间:11/7/2023 最后编辑:amphetamachinejake.mactavish 更新时间:11/9/2023 访问量:55
为什么我的分行总是“过时”,即使有常客“拉”?
Why my branches are always "out-of-date", even with regulars "pull"?
问:
我有 3 个分支:“dev”、“test”和“main”。他们受到保护,我不能直接推他们。
当我开发一些东西时,我必须创建一个新的分支(例如:new-feature)。然后,推动它,并执行从“新功能”到“开发”,从“开发”到“测试”,从“测试”到“主要”的拉取请求。
通常,当我尝试从“开发”到“测试”进行 PR 时,我得到“此分支与基本分支已过时”。 我怎样才能避免它?
我试图在从“dev”创建新分支之前拉出我的 3 个分支,但这似乎还不够:对“dev”的 PR 还可以,但由于这个“过时”的问题,它从“dev”到“test”不起作用(从“dev”到“master”相同)。
谢谢
答:
简短的回答:别担心。
如果您不断合并到 ,除非您始终使用快进合并,否则分支中总是会有额外的合并提交,而这些合并提交不会。这是必然会发生的。有时快进合并称为 rebase-and-squash,但在合并长期存在的侧分支时,我不能推荐它,就像你的情况一样。test
main
main
test
当您看到此消息时,应忽略它。
单击“拉取请求”页面中的按钮,将目标分支合并到源分支中。例如,合并到 的 PR 将合并到 ,违反了您预期的合并流程。Update branchtest
main
main
test
由于您使用的分支策略与“gitflow”非常相似,因此理想情况下,合并应该只流向一个方向。单击会违反该流程。Update branch
从贡献者的角度详细了解分支策略
对接下来的信息持保留态度 - 你做得很好,不需要改变任何东西。
我发现对我有用的策略是,当我想更改分支 X 时,我会在分支 X 的 HEAD 处开始我的功能分支(即 -- 然后 , , 等)。此策略与 rebase 和 squash 完美配合。git checkout -b my-feature origin/branchx
add
commit
如果我的更改同时针对分支 X 和分支 Y,我将从分支之间的“合并基础”开始(即两个分支共有的最新提交 - )。这只是这样,我不会在不属于别人的地方介绍别人的更改;假设 Bob 破坏了分支,我不希望他的提交 - 这种合并基础策略使我不抓取 Bob 的提交。此策略不适合轻松使用 rebase-and-squash。git checkout -b my-feature $(git merge-base --octopus origin/branchx origin/branchy)
test
评论
dev --> test --> main
评论
test
main
test
dev
master
dev
test
master
test
dev