【问题标题】:git branch commit ahead of/behind master infinite loopgit 分支在 master 无限循环之前/之后提交
【发布时间】:2022-11-10 05:56:28
【问题描述】:

我是 git 新手

我在本地创建了一个名为 orm 的分支并将其推送到 github 当我检查 github 上的分支时,我看到了

上面写着this branch is 1 commit ahead of master,这是有道理的,但是当我创建一个拉取请求并确认将它与主分支合并的拉取时,状态更改为

现在它说this branch is 1 commit behind master

如果我点击它会要求我创建一个拉取请求以将 master 合并到 orm 分支

如果我这样做,它会回到this branch is 1 commit ahead of master

它似乎永远不会结束....所以我的问题是,这甚至是我应该关心的事情吗?!我的意思是很明显,当我将代码推送到 github 时,我应该为1 commit ahead if master 创建一个拉取请求……但我应该忽略拉取请求确认后显示的this branch is 1 commit behind master 吗?

【问题讨论】:

    标签: git github


    【解决方案1】:

    但我是否应该忽略“此分支是 master 后面的 1 个提交”,它在拉取请求确认后显示

    tl;博士:可能,是的,如果您不想调整工作流程,可以忽略它。

    细节:

    要确定是否可以忽略它,您需要了解为什么这正在发生。完成拉取请求时,有不同的选项。默认选项是创建合并提交。在您的情况下,在 master 上创建了 1 个不在 orm 上的新提交,这就是为什么在 PR 完成后 orm 立即落后 1 个提交。发生这种情况时,您可以放心地忽略它。下次您完成从orm 到master 的 PR 时,您将落后 2 个提交,下一次落后 3 个提交,等等。只要 orm 和 master 之间的差异没有变化,您可以放心地忽略这一点。

    在某些时候,如果一个不同的分支被合并到master 中,那么orm 将会有更多的提交,并且差异将不再匹配,这时你应该考虑将master 合并回orm再次。

    补充说明:

    1. 当completing PRs on GitHub 称为“Squash Commits”和“Rebase and merge”时,还有其他合并选项。在您的情况下,您也不需要这些,因为在这两个 GitHub 中都重写了提交(即使在不需要变基时也可以变基)。使用这些选项,您的 orm 分支最终将提前 1 次提交和落后 1 次提交。 GitHub 目前没有快进合并选项,这是您在 PR 完成后需要使分支相同的选项。考虑以下选项之一来解决您的问题,或者直接忽略它。
    2. 你真的需要一个长寿的orm 分支吗?根据您团队的分支策略,您可以考虑使用功能分支而不是 orm,并且每次开始工作时,您都可以简单地从最新的 master 分支出来,然后该分支将已经拥有所有这些合并提交和将完全是最新的。
    3. 在本地完成 orm 到 master 的 PR 后,您可以考虑将最新的 master 合并到 orm 以将合并提交到 orm,然后再开始向其添加更多提交。请注意,这与将master 拉入orm 的crystal's suggestion 非常相似。是否使用--rebase 标志取决于您,并且取决于您是否有其他人与您共享orm 分支。如果你总是在完成 orm 的 PR 到 master 之后立即执行此操作,那么无论你是否使用 rebase 都应该没有区别。

    【讨论】:

    • thanx 伙计,你解释了一切,在提交新的更改之前,我在本地分支中提取了 master ......如果我点击 this branch is 1 commit behind master 并将 master 合并到 github 中的 orm 中,这应该可以解决问题......这将是一个噩梦试图从我的本地分支推送新的更改,我认为这是因为我的本地 orm 与在线 orm 不同
    【解决方案2】:

    创建拉取请求后,只要比较基本和主控是绿色的,那么一切都应该是好的。

    通常在我开始开发之前,总是拉/下载最新的代码:

    git pull origin <branchName> --rebase
    

    注意:在您的情况下,请将 &lt;branchName&gt; 替换为 master。

    【讨论】:

      【解决方案3】:

      让我们考虑orm 分支是1 提交在master 后面的情况。

      切换到本地orm 分支

      git checkout orm
      

      这将显示分支之间的计数差异,这里orm 是 1 后面提交 master

      git rev-list --count orm..master
      

      这将根据以下内容获取更改并重置本地 orm 分支 远程master 分支

      git fetch origin; git reset --hard origin/master
      

      这会将本地 orm 分支更改推送到远程 orm 分支

      git push origin orm
      

      刷新 github 存储库页面,希望您会发现问题已解决。

      P.S. I personally solved same issue using above steps.

      【讨论】:

        猜你喜欢
        • 2020-11-05
        • 2012-07-26
        • 1970-01-01
        • 2020-05-07
        • 2021-03-04
        • 1970-01-01
        • 1970-01-01
        • 2017-11-15
        相关资源
        最近更新 更多