GitHub一直说;该分支是X在前提交,Y在后提交;

GitHub一直说;该分支是X在前提交,Y在后提交;,git,github,Git,Github,我知道有几个类似的问题,但我认为我的情况有点不同 假设有一个GitHub存储库,我想为它做贡献。 我将该存储库转移到我的GitHub帐户中,然后从我电脑中的帐户克隆该转移。很好 在处理问题之前,我首先要将我的fork与“原始”存储库同步。我转到我的帐户分支,单击New Pull request,确保我选择我的作为基础,选择原始主文件作为头分支,我看到了差异(人们在原始存储库中进行的所有提交都不在我的存储库中)。 然后我在我的fork上创建pull请求,并将这些更改合并到我的fork中。 我去我的

我知道有几个类似的问题,但我认为我的情况有点不同

假设有一个GitHub存储库,我想为它做贡献。 我将该存储库转移到我的GitHub帐户中,然后从我电脑中的帐户克隆该转移。很好

在处理问题之前,我首先要将我的fork与“原始”存储库同步。我转到我的帐户分支,单击New Pull request,确保我选择我的作为基础,选择原始主文件作为头分支,我看到了差异(人们在原始存储库中进行的所有提交都不在我的存储库中)。 然后我在我的fork上创建pull请求,并将这些更改合并到我的fork中。 我去我的本地回购,做了一个git pull,我把所有的东西都同步了。好的

现在问题来了,在我的GitHub帐户中,它总是说“这个分支是提前提交的X”,其中“X”是我执行上述同步过程的次数。因此,每次我向原始存储库(而不是我的fork)执行拉入请求时,都表明我正在提交代码加上X个提交,这是我在fork上进行的与原始存储库同步的合并

当然,我不想将这些更改推送到原始存储库中,因为它们已经准备好了这些更改,所以我不明白为什么GitHub一直对我说我要提交更改

我认为这是必须在我的GitHub帐户上解决的问题,因为在我的本地存储库中没有任何更改或问题,实际上我甚至将其删除并重新克隆


您有什么想法吗?

正如您所猜测的,这些额外的提交很可能是您创建的拉请求的合并提交

将来,有一种更简单的方法可以将fork与原始存储库同步。在本地回购中,在初始克隆后执行以下操作:

git remote add upstream https://github.com/upstream/repo.git
然后,无论何时要同步来自上游的更改,请执行以下操作:

git pull --rebase upstream master
git push --force-with-lease origin master
(只有当您有尚未合并到上游回购中的承诺时,才需要使用
--重设基础
--强制租赁
选项。)

强制性警告:由于回基会重写历史记录,这可能会对其他在此分支上工作的人造成危险/破坏。确保你清楚地与任何与你合作的人交流你所做的事情。因为这是个人的叉子,我想这对你来说不会是个问题


现在,在事后解决您当前的问题

  • 如上所述,添加上游遥控器
  • 重置本地分支以匹配上游

    git checkout master
    git reset --hard upstream/master
    
  • 如果您已经在fork中创建了任何提交,您可以
    cherry-pick
    将它们添加到更新版本的
    master
    中。如果你记不住或需要帮助找到它们,比如

    git log --oneline master origin/master
    
    应该向您显示任何不在上游的提交


  • 上面我假设您只使用一个分支,
    master
    。如果您还没有,我强烈建议您为您处理的每个功能/错误修复创建一个新分支。在其他好处中,这允许您在等待合并早期PR时开始另一个功能/错误修复。如果您从未直接提交到
    主机
    ,则可以在不使用
    --rebase
    --force with lease
    的情况下进行同步:

    git checkout master
    git pull upstream master
    git push origin master
    
    要在更新
    master
    后更新要素分支,请执行以下操作:

    git checkout myfeature
    git rebase master
    git push --force-with-lease origin myfeature # if you have already pushed
    

    我和你有同样的问题,刚刚解决了这个问题

    要解决这个问题:

  • 将您的本地回购“重置”到交易前一刻

  • 使用修订后的本地回购协议创建新分行

  • 将此修改后的本地回购“发布”到您的github回购

  • 在修改后的本地回购协议中对github进行您想要的更改

  • “提交”本地回购协议

  • “拉”提交到您的github回购

  • 在您的github回购新分支上,向上游回购提交拉取请求

  • 希望这个答案能有所帮助

    在处理问题之前,我首先要将我的fork与“原始”存储库同步。我转到我的帐户分支,单击新的拉取请求[…]

    如果要更新/同步github forks,则应而不是使用Pull请求

    拉请求引入合并提交,这是错误消息的来源。(默认情况下,拉取请求不是快进的。合并提交存在于您的fork中,但不存在于源repo中

    您不想将其分支与您的分支合并。。。您希望更新分支,使其指向与其分支相同的提交。您希望分叉之间的分支保持一致

    您可以通过多种方式完成此操作,最好在其他答案中进行解释:


    哇,这正是我需要的。特别是你提到的最后一行:
    git push--force with lease origin master#如果你已经按下了
    保存了我。谢谢最佳答案。第三个半场是我所期待的,以使这些变化反映在其他分支中。我有这个问题,我的回购协议,我尝试了上述步骤,但它们没有帮助。看起来我的代码已经更新了,但它认为由于某种原因,如果您使用BitBucket而不是Github,那么在创建fork时,它会为您提供sync fork的复选框。这是一种开箱即用的功能,所有分支都通过原始存储库中的位存储桶进行更新。无需自行更新fork分支。只需使用本地分支方法,不要弄乱分支。@GSUgambit您仍然有这个问题吗?如果是这样的话,你可能想添加更多关于你具体情况的细节。(请随意在此处发布链接,以便我查看。)了解前/后数字来自