我分叉了一个项目,进行了更改,并创建了一个被接受的拉取请求。新的提交后来被添加到存储库中。我怎样才能把这些承诺交给我?
当前回答
如果像我一样,你从来没有直接向主人承诺过什么,你真的应该这样做,你可以做以下事情。
从fork的本地克隆创建上游远程。你只需要做一次:
git remote add upstream https://github.com/whoever/whatever.git
然后,每当您想赶上上游存储库主分支时,您需要:
git checkout master
git pull upstream master
假设你从未对师父做过任何事,你应该已经做了。现在,您可以将本地主机推送到源远程GitHub分叉。您还可以将开发分支重新基于当前最新的本地主机。
在初始的上游设置和主签出之后,您需要做的就是运行以下命令以将主设备与上游设备同步:git pull上游主设备。
其他回答
实际上,可以从浏览器中上游的任何提交在fork中创建分支:
打开https://github.com/<repo>/commits/<hash>,其中repo是您的分叉,hash是提交的完整哈希,您可以在上游web界面中找到。例如,我可以打开https://github.com/max630/linux/commits/0aa0313f9d576affd7747cc3f179feb097d28990,这将linux master作为编写时间。单击“树:……”按钮。键入新分支的名称,然后按Enter键
然后,您可以将该分支提取到本地克隆,当您在提交的基础上进行编辑时,您不必将所有数据推回到GitHub。或者使用web界面更改该分支中的某些内容。
它是如何工作的(这是一个猜测,我不知道GitHub是如何做到的):forks共享对象存储,并使用命名空间来分隔用户的引用。因此,您可以通过fork访问所有提交,即使在分叉时它们还不存在。
前言:您的分叉是“源”,您分叉的存储库是“上游”。
假设您已经使用如下命令将分叉克隆到计算机:
git clone git@github.com:your_name/project_name.git
cd project_name
如果已给出,则需要按以下顺序继续:
将“上游”添加到克隆的存储库(“源”):git远程添加上游git@github.com:original_author/project_name.git从“上游”获取提交(和分支):git获取上游切换到分叉的“master”分支(“origin”):切换到主分支停止“主”分支的更改:暂存将“上游”的“主”分支中的更改合并到“源”的“母”分支中:git合并上游/主解决合并冲突(如果有)并提交合并gitcommit-am“从上游合并”将更改推到叉上数字推送找回你藏起来的零钱(如果有的话)吉特藏弹你完了!祝贺
GitHub还提供了有关此主题的说明:同步分叉
我想补充一下@krlmlr的答案。
最初,分叉存储库有一个名为master的分支。如果正在处理新功能或修复,通常会创建新的分支功能并进行更改。
如果您希望分叉存储库与父存储库同步,可以为pull应用程序(在功能分支中)设置一个配置文件(pull.yml),如下所示:
version: "1"
rules:
- base: feature
upstream: master
mergeMethod: merge
- base: master
upstream: parent_repo:master
mergeMethod: hardreset
这将使分叉回购的主分支与父回购保持最新。它通过合并分叉回购的主分支来保持分叉回购的特征分支的更新。这假设功能分支是包含配置文件的默认分支。
这里有两种合并方法,一种是硬重置,这有助于将分叉回购的主分支中的更改与父回购同步,另一种方法是合并。此方法用于合并在要素分支中所做的更改和在主分支中由于强制同步而做的更改。如果发生合并冲突,拉取应用程序将允许您在拉取请求期间选择下一个操作过程。
您可以在这里阅读基本和高级配置以及各种合并方法。
我目前正在这里的分叉回购中使用此配置,以确保此处请求的增强保持更新。
如果像我一样,你从来没有直接向主人承诺过什么,你真的应该这样做,你可以做以下事情。
从fork的本地克隆创建上游远程。你只需要做一次:
git remote add upstream https://github.com/whoever/whatever.git
然后,每当您想赶上上游存储库主分支时,您需要:
git checkout master
git pull upstream master
假设你从未对师父做过任何事,你应该已经做了。现在,您可以将本地主机推送到源远程GitHub分叉。您还可以将开发分支重新基于当前最新的本地主机。
在初始的上游设置和主签出之后,您需要做的就是运行以下命令以将主设备与上游设备同步:git pull上游主设备。
这取决于存储库的大小以及如何分叉。
如果它是一个很大的存储库,您可能希望以一种特殊的方式管理它(例如删除历史记录)。基本上,您可以获取当前版本和上游版本之间的差异,提交它们,然后将它们重新提交给master。
试试看这个。它描述了如何处理大型Git存储库,以及如何使用最新的更改对其进行上游处理。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- 在GitHub上有一个公共回购的私人分支?
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- 只用GitHub动作在特定分支上运行作业
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 是否有一个链接到GitHub下载文件的最新版本的存储库?