从Github fork中提取更改

时间:2011-01-03 02:36:16

标签: git github git-merge git-commit

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

此外,是否可以仅提取特定提交?

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

3 个答案:

答案 0 :(得分:47)

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

答案 1 :(得分:1)

尝试在github上使用/ forkqueue。 在那里你可以将提交合并到你的分支。

或转到“网络”标签,然后选择“Forkqueue”

答案 2 :(得分:1)

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

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

git am -3 <url>

这使您可以从url中获取更改并将其提交/更改应用于当前的本地git,而无需获取远程存储库(大型存储库很方便)。

如果在要捕获的提交的git网页上使用此命令,最终将在git中获得此提交。甚至更有用:提交作者将被保留,不会被您替代(就像您使用git rebase一样)。如果将此内容推送到您的存储库中,更改将由提交,但由原始作者编写。

Nathaniel Talbott的this指南是有关此主题的很好资源。它显示了一个很棒的工作流,可以处理请求请求,而不是依靠github上的“恶意”合并请求请求按钮。