gpt4 book ai didi

git pull --rebase 因冲突而失败,但 git push 有效

转载 作者:太空狗 更新时间:2023-10-29 13:41:10 28 4
gpt4 key购买 nike

昨天我们遇到了 git 的这种非常奇怪的情况:

  1. 我们一如既往地创建了一个功能分支。然后,有人会在该功能分支上工作几天。

  2. 与此同时,master 分支上发生了一些重要的事情。功能分支也需要这些更改。

  3. 因此,我们将 master 分支 merge 到功能分支(没有 rebase ,因为我们的功能分支通常会立即推送到远程,因为我们需要在功能上进行协作)。此 merge 仅在本地完成,尚未推送到远程。

  4. 功能分支的工作继续

  5. 通过 master 的 merge + 继续工作,本地功能分支 new_feature 现在比 origin/new_feature 领先 40 次提交

  6. 现在我们想将这 40 个提交推送到远程功能分支。首先,我们像往常一样在推送之前执行 git pull --rebase,因为其他人可能已经在我们之前推送了一些提交。

  7. 现在我们经历了无数次冲突。我们认为不值得修复 40 次提交并执行 git rebase --abort。然后我们尝试 git pull --no-rebase。我们得到:“已经是最新的”——奇怪

  8. 由于 git status 没有告诉我们本地分支和远程分支已经 fork ,我们尝试 git push

  9. 出乎意料的是,git push 成功了。如果我们尝试推送到自上次 pull 后发生更改的远程分支,我们将被拒绝。显然 remote 没有改变,但是 git pull --rebase 做了一些奇怪的事情。

奇怪的是

  1. git pull --rebase 没有立即返回“Already up-to-date”并且

  2. git pull --rebase 报告了大量冲突,实际上没有冲突应该退出(报告的冲突与功能分支上处理的内容无关)

什么会导致这种情况?

最佳答案

我怀疑即使您启用了 rerere 或者如果您解决了所有 40 个冲突,您也不会得到预期的结果。问题是:你做了一个 rebase ,但你想提交一个 merge !通过调用“git pull --rebase”,git 将执行“git rebase origin/featureXY”(假设您的功能分支称为 featureXY)。此外,如果 origin 没有变化,您将在当前分支上执行 rebase 到 origin 分支的状态。当您对 merge 提交执行 rebase 时,git 会一如既往地执行。它解决了每个 merge 并创建了一个平坦的历史记录。这意味着,之前 merge 到分支中的 master 的每个提交都将应用于您的分支。结果将是没有任何 merge 提交的直接历史记录。

结论:避免混用 rebase 和 merge!在您的工作流程中,直接推送 merge 是不可避免的,否则您无法继续使用 pull-rebase。

关于git pull --rebase 因冲突而失败,但 git push 有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779252/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com