【问题标题】:How to update GitHub forked repo when a pull request was denied?拉取请求被拒绝时如何更新 GitHub 分叉存储库?
【发布时间】:2013-05-03 17:00:56
【问题描述】:

我在 GitHub 上创建了一个 repo 并提交了一个 pull request。该项目的维护者拒绝了拉取请求,但我们在论坛中制定了更好的解决方案。他们指示我使用替代更改创建另一个拉取请求。但是,我在 GitHub 上的存储库 fork 现在已经过时了,因为自从我 fork 以来,更新已经推送到主存储库。此外,GitHub 上的存储库有一个不应该存在的额外提交(我的拉取请求提交),因为它不被接受为项目的一部分。

我发现了这个问题:How do I update a GitHub forked repository?

我按照说明进行操作,具体来说,我是这样做的:

git remote add upstream git://github.com/fuel/core
git fetch upstream

结果是:

remote: Counting objects: 93, done.
remote: Compressing objects: 100% (47/47), done.
remote: Total 69 (delta 49), reused 40 (delta 20)
Unpacking objects: 100% (69/69), done.
From git://github.com/fuel/core
 * [new branch]      1.0/master -> upstream/1.0/master
 * [new branch]      1.1/master -> upstream/1.1/master
 * [new branch]      1.2/develop -> upstream/1.2/develop
 * [new branch]      1.2/master -> upstream/1.2/master
 * [new branch]      1.3/develop -> upstream/1.3/develop
 * [new branch]      1.3/master -> upstream/1.3/master
 * [new branch]      1.4/develop -> upstream/1.4/develop
 * [new branch]      1.4/master -> upstream/1.4/master
 * [new branch]      1.5/develop -> upstream/1.5/develop
 * [new branch]      1.5/master -> upstream/1.5/master
 * [new branch]      1.6/develop -> upstream/1.6/develop
 * [new branch]      feature/better-hmvc -> upstream/feature/better-hmvc

好的,看起来一切都很好。我确保我在正确的分支上:

git checkout 1.6/develop
Already on '1.6/develop'

字。好的,现在开始:

git rebase upstream/1.6/develop
First, rewinding head to replay your work on top of it...
Applying: prevent invalid XML node names

等等……什么?为什么要应用“防止无效的 XML 节点名称”?那是被项目维护者拒绝的拉取请求。我显然错过了“rebase”的真正含义。现在,如果我 git status 它说:

# On branch 1.6/develop
nothing to commit (working directory clean)

当我git log时,我可以看到我的问题已经解决了一半。自从我分叉以来,已被拉入项目的更改现在反映在我的 git log 中。但是,最近的提交仍然是“防止无效的 XML 节点名称”。如何消除它?

我尝试检查对项目的最后一次提交:

git checkout 5f31a4df55e5b6ca1b2092534063a1fce4a32181

但是,这让我处于分离的 HEAD 状态。它说我可以环顾四周,进行更改并提交它们。我不认为那是我想做的。我想我希望 HEAD 指向提交 5f31a4df55e5b6ca1b2092534063a1fce4a32181。我的下一步是什么?

【问题讨论】:

    标签: github git-rebase git-checkout


    【解决方案1】:

    git rebase 会将您的提交保留在您的分支上。由于您的 PR 被拒绝,您想删除它并使您的 master 分支与 upstream/master 相同。

    所以,你想reset

    git checkout master
    git reset --hard upstream/master
    

    然后您将拥有与上游完全相同的 master。然后,为你的新 PR 创建一个新分支,这样你就不会再遇到这个问题了。

    【讨论】:

    • 谢谢!我想再次强调一下,因为它对我很有帮助:“然后,为你的新 PR 创建一个新分支,这样你就不会再遇到这个问题了。”
    • 这似乎更精确一点:stackoverflow.com/a/8135023/89818 推送对我来说是必要的。
    【解决方案2】:

    因为这个问题有一个已经被接受的答案,但我要告诉你另一种方式,因为接受的答案在我的情况下并不顺利。

    执行中

    $git rebase    
    There is no tracking information....
    
    $git checkout
    Already on 'master'
    
    $git reset --hard upstream/master
    ambiguous argument upstream/master
    

    如果出现这种情况,请执行这些步骤。

    本地重置 HEAD。

    $git reset HEAD
    

    对服务器 repo 进行相同的更改。

    $git reset HEAD^
    

    然后它将显示有关您对原始分叉存储库所做更改的消息,并列出所有文件。 Unstaged 已更改为文件名。

    现在使用以下命令撤消您的更改:

    $git stash
    

    现在您可以强制将这些更改推送到 Sever 以将本地和远程 repo 指向同一个 HEAD。

    $git push origin +HEAD
    

    现在您位于分叉时所在的同一仓库。现在您可以再次从原始 repo 中获取最新代码。

    【讨论】:

      猜你喜欢
      • 2011-04-23
      • 2012-04-05
      • 2012-10-05
      • 1970-01-01
      • 2013-04-18
      • 2019-05-12
      • 2012-02-17
      • 2014-11-28
      相关资源
      最近更新 更多