在 git 中重新设置功能分支后合并

Merge after rebasing feature branch in git

我将我的功能分支重新设置为 origin/develop 以适应当前的开发状态。

git checkout feature-X
git rebase origin/develop

但是当我这样做时,我必须在之后立即合并。这让事情变得混乱。

我认为变基的整个想法是你可以重写历史(假装我们正在研究 origin/develop 的尖端)并且只有当你想将你的更改集成到 origin/develop.

我是不是做错了什么?

更新: 如果没有更多 git 魔术,我无法完全重现我所做的事情,但我主要是在尝试拼凑一个功能性分支模型出发 this gist.

我 "git rebase origin/develop" 当我在我的功能分支中时。这完成了,但随后告诉我我已经与我尝试通过 push/pull 修复的东西大相径庭。这创建了一个我认为我不想要的合并。

如果您在 origin/develop 之上变基 feature-x,您可以在本地存储库中执行此操作。这意味着 feature-x 在远程存储库中仍处于变基之前的状态。由于它们不再具有相同的祖先,git 将尝试合并。

要更新远程分支,您可以强制推送。

git push origin feature-x --force

但请注意,如果其他人正在 feature-x 上工作并开始 pushing/pulling,它可能会变得混乱。

我发现这个 link 对于学习 merging vs rebasing

很有用

假设 feature-X 已从 develop 分支出来,更好的方法是将更改从远程拉到本地 develop 分支并重新设置 feature-X从本地分支机构。这将避免合并提交。您可以稍后将 feature-X 合并到本地 develop 然后推送它。

如果 feature-X 已被推送到遥控器上,正如@crea1 已回答的那样,您将必须 运行 在 develop

的每个 rebase 中执行此操作
git push -f origin feature-x

原因是变基为变基的提交创建了全新的提交 ID。就 git 而言,它们是新提交。这就是导致您的 git 拉动进行合并提交的原因。只要没人用,强推应该没问题。 另外恕我直言,最好在 git 配置中将 pull.rebase 设置为 true。