我分叉了一个项目,应用了多个修复程序,并创建了一个接受请求。几天后,另一位贡献者进行了另一项更改。因此,我的前叉不包含该更改。
我怎样才能把零钱放到我的叉子上?当我有其他更改要贡献时,是否需要删除并重新创建我的派生叉?还是有一个更新按钮?
在你的分支存储库的本地克隆中,你可以将原始GitHub存储库添加为“远程”。(例如,“ Remotes”就像是存储库URL的昵称-origin
是一个。)然后,你可以从该上游存储库中获取所有分支,并重新整理你的工作以继续使用上游版本。在可能看起来像的命令方面:
# Add the remote, call it "upstream":
git remote add upstream https://github.com/whoever/whatever.git
# Fetch all the branches of that remote into remote-tracking branches
git fetch upstream
# Make sure that you're on your master branch:
git checkout master
# Rewrite your master branch so that any commits of yours that
# aren't already in upstream/master are replayed on top of that
# other branch:
git rebase upstream/master
如果你不想重写master分支的历史记录(例如,因为其他人可能已经克隆了它),则应使用替换最后一个命令git merge upstream/master
。但是,为了发出更多尽可能干净的拉取请求,最好重新设置基准。
如果你已将分支重新建立基础upstream/master
,则可能需要强制执行推送才能将其推送到GitHub上你自己的分叉存储库中。你可以这样做:
git push -f origin master
-f
重新设定基准后,你只需要在第一时间使用。
由于您的fork仅存在于github上,并且github没有通过Web界面进行合并的工具,因此正确的答案是在本地进行上游合并并将更改推回您的fork。
这是我找到的有关使用github的很棒的教程:gun.io/blog/how-to-github-fork-branch-and-pull-request
简要说明一下,您不必重新建立自己的master分支以确保从干净状态开始,您可能应该在单独的分支上进行工作并从中发出拉取请求。这样可以使您的母版保持干净,以防将来进行任何合并,并且使您不必重写历史记录,
-f
从而使所有可能克隆您的版本的人都陷入混乱。另一个Git失败。如果该工具应支持分布式协作,那么为什么执行基本工作流程如此困难?400万人和2200次投票意味着该工具失败了。“您可以将原始的GitHub存储库添加为“远程” -为什么甚至必须这样做?为什么在派生过程中没有完成?此工具有何缺点?
@jww:您问为什么需要告知Git原始的GitHub存储库。这是因为Git是一个去中心化的版本控制系统,并且没有以任何方式与GitHub绑定。很明显,Git是在GitHub之前创建的。当您在GitHub上创建一个分支的存储库并对其进行克隆时,GitHub知道该存储库是一个fork。Git没有理由也没有理由。(为什么克隆不复制Git远程服务器?Git是分散的;不同的人会想要不同的远程服务器;这样做没有任何意义。)有关GitHub在Git中的集成,请参见github.com/github/hub。