有人分叉了我的一个 Github 项目并进行了一些更改。如何将更改合并回我的上游版本?
另外,是否有可能只引入一个特定的提交?
我正在寻找的是是否有一种方法可以提取特定提交而不是整个分支。
有人分叉了我的一个 Github 项目并进行了一些更改。如何将更改合并回我的上游版本?
另外,是否有可能只引入一个特定的提交?
我正在寻找的是是否有一种方法可以提取特定提交而不是整个分支。
拉入单个提交将是一种选择,并且会重写提交 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
您将相应的提交带到您当前的分支。
有一个很棒的工具叫做hub,它提供了有用的工具来清理拉取请求并且通常“帮助你在 git 中获胜”。
在这种情况下,一个有用的命令是:
git am -3 <url>
这允许您从 url 获取更改并将其提交/更改应用到当前本地 git,甚至无需获取远程存储库(这在大型存储库中很方便)。
如果你在你想要抓取的提交的 git 网页上使用这个命令,你最终会在你的 git 中得到这个提交。更有用的是:提交作者被保留而不是由你替换(如果你使用它会这样git rebase
)。如果您将此推送到您的仓库,则更改将由您提交,但由原作者创作。
关于这个主题的一个很好的资源是Nathaniel Talbott 的这个指南。它展示了一个很棒的工作流程来处理拉取请求,而不是依赖 github 上的“恶意”合并拉取请求按钮。
尝试使用 github 上的 /forkqueue。在那里,您可以将提交合并到您的 fork。
或转到“网络”选项卡并选择“Forkqueue”