40

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

另外,是否有可能只引入一个特定的提交?

我正在寻找的是是否有一种方法可以提取特定提交而不是整个分支。

4

3 回答 3

49

拉入单个提交将是一种选择,并且会重写提交 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您将相应的提交带到您当前的分支。

于 2011-01-03T03:24:06.573 回答
2

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

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

git am -3 <url>

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

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

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

于 2018-08-16T12:37:17.803 回答
1

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

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

于 2011-11-19T17:34:41.900 回答