GitHub一直在说#34;这个分支是X承诺提前,Y承诺"

时间:2016-12-22 13:08:52

标签: git github

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

让我们说有一个我想贡献的GitHub存储库。 我将该存储库分叉到我的GitHub帐户,然后从我的PC中的帐户克隆分支。细

在处理问题之前,我首先想要将我的前叉与原始'同步。库。我转到我的帐户分支,单击New Pull请求,确保我选择我的作为基础并且原始主服务器作为主叉,我看到差异(人们在原始存储库中做的所有提交都不在我的下面) 。 然后我在我的fork上创建了pull请求,并在fork中合并了这些更改。 我去了我的本地仓库并做了git pull,我把所有东西都同步了。细

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

当然,我不想将这些更改推送到原始存储库,因为他们已经有了这些更改,所以我不明白为什么GitHub一直跟我说我已经更改了提交。

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

你有什么想法吗?

3 个答案:

答案 0 :(得分:52)

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

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

git remote add upstream https://github.com/upstream/repo.git

然后,只要您想同步上游的更改,请执行以下操作:

git pull --rebase upstream master
git push --force-with-lease origin master

(仅当您有未合并到上游仓库的提交时,才需要--rebase--force-with-lease选项。)

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

现在要解决当前问题。

  1. 如上所述添加上游遥控器。
  2. 重置您的本地分支以匹配upstream

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

    git log --oneline master origin/master
    

    应该显示任何不在上游的提交。

  4. 上面我假设您只使用一个分支master。如果您还没有,我强烈建议您为您使用的每个功能/错误修复创建一个新分支。除了其他好处之外,这还允许您在等待较早的PR合并时开始处理另一个功能/错误修复。如果您从未直接提交master,那么您可以在没有--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
    

答案 1 :(得分:1)

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

如果要更新/同步github分支,则应该使用“拉取请求”。

拉取请求引入合并提交,这是错误消息的来源。 (默认情况下,拉取请求不是fast-forward)。合并提交存在于您的fork中,但不在源存储库中。

您不想分支与分支合并...您想更新分支以指向与他们的分支相同的提交。您希望分叉之间的分支相同

您可以通过多种方式执行此操作,最好在其他答案中加以说明:

答案 2 :(得分:0)

我和你有同样的问题,只是解决了这个问题。

要解决此问题:

1)“重置”您本地的仓库到大量提交之前的那一刻

2)使用此修改后的本地仓库创建一个新分支

3)将此修订后的本地存储库“发布”到您的github存储库

4)在修改后的本地存储库中将要PR更改到github

5)“提交”此本地存储区

6)'将'提交提交到您的github存储库

7)在您的github repo new分支上,向上游repo提交拉取请求

希望这个答案会有所帮助。

相关问题