【问题标题】:Pull in changes from a Github fork从 Github 分叉中提取更改
【发布时间】:2011-06-02 16:14:42
【问题描述】:

有人分叉了我的一个 Github 项目并进行了一些更改。如何将更改合并回我的上游版本?

另外,是否可以只拉入特定的提交?

我正在寻找的是是否有办法提取特定提交而不是整个分支。

【问题讨论】:

  • 这是要求拉入分叉,而不是拉入上游(尽管它可能是相同的方法?)。我也很想知道是否有办法提取特定提交而不是整个分支。
  • 正确,反之亦然。哦,是的,@Dustin 正确回答了具体的提交部分。

标签: git github git-merge git-commit


【解决方案1】:

拉入单个提交将是一种选择,并且会重写提交 ID(并在保留作者的同时将您标记为提交者)。不过,这个过程非常简单:

git fetch git://github.com/user/project.git
git cherry-pick <SHA-COMMIT-ID>

您从存储库日志中获取 SHA,例如:

git log --oneline

b019cc0 Check whether we have <linux/compiler.h>.
0920898 Include <linux/compiler.h> before including <linux/usbdevice_fs.h>.
cbf0ba1 Add DLT_DBUS, for raw D-Bus messages.
77ed5cd Libnl 2.x returns its own error codes, not errnos; handle that.

使用git cherry-pick 0920898,您可以将相应的提交带到您当前的分支。

【讨论】:

  • 什么是“commit-to-cherry-pick”?我不知道那里有什么……是 url,还是其他类型的标识符?
  • 没关系,我发现这是提交的哈希值。谢谢!
  • 提交的哈希,或任何其他引用它的方式,例如“HEAD~2”,如果它是从 HEAD 当前所在的位置返回的两次提交。
  • 您可能需要包含分支的分支名称:git fetch git://github.com/user/project.git branchname
【解决方案2】:

有一个很棒的工具叫做hub,它提供了有用的工具来清理拉取请求并且通常“帮助你在 git 中获胜”。

在这种情况下一个有用的命令是:

git am -3 &lt;url&gt;

这允许您从 url 获取更改并将其提交/更改应用到您当前的本地 git,甚至无需获取远程存储库(这在大型存储库中很方便)。

如果你在你想要抓取的提交的 git 网页上使用这个命令,你最终会在你的 git 中得到这个提交。更有用的是:提交作者被保留而不是被你替换(就像你使用git rebase 一样)。如果您将此推送到您的存储库,则更改将由提交,但由原作者创作。

关于这个主题的一个很好的资源是 this Nathaniel Talbott 的指南。它展示了一个很棒的工作流程来处理拉取请求,而不是依赖 github 上的“恶意”合并拉取请求按钮。

【讨论】:

    【解决方案3】:

    尝试使用 github 上的 /forkqueue。 在那里,您可以将提交合并到您的 fork。

    或转到“网络”选项卡并选择“Forkqueue”

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多