# 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,
# such as upstream/master:
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 a422352 My local commit
remotes/origin/HEAD -> origin/master
remotes/origin/master a422352 My local commit
remotes/upstream/master 5fdff0f Some upstream commit
在分叉仓库的本地克隆中,你可以将原始的 GitHub 仓库添加为 "远程"。 ("远程"就像仓库的 URL 的昵称 - 例如,`origin'就是一个。) 然后你可以从该上游仓库获取所有的分支,并重新建立你的工作,继续在上游版本上工作。 在命令方面,这可能看起来像。
如果你不想改写主干分支的历史,(例如因为其他人可能已经克隆了它),那么你应该用
git merge upstream/master
替换最后一条命令。 然而,为了使进一步的拉取请求尽可能的干净,最好还是重新建立。如果你已经将你的分支重新建立到
upstream/master
上,你可能需要强制推送,以便将其推送到 GitHub 上你自己的分叉仓库。 你可以用以下方法来做。你只需要在重新编译后的第一次使用 "f "就可以了。
从2014年5月开始,可以直接从GitHub上更新一个分叉。截至2017年9月,这仍然有效,但***会导致提交历史被破坏。
1.在GitHub上打开你的分叉。 2.点击Pull Requests。 3.3. 点击新的拉动请求。默认情况下,GitHub会将原版与你的分叉版进行比较,如果你没有做任何改动,就不应该有任何东西需要比较。 4.4.点击切换基础如果你看到该链接。否则,手动设置base fork下拉到你的分叉,而head fork到上游的。现在GitHub会将你的fork与原版进行比较,你应该看到所有最新的修改。 ![在此输入图片描述][1] 。 5.创建拉动请求并为你的拉动请求指定一个可预测的名字(例如,
从原版更新
)。 6.6. 向下滚动到合并拉动请求,但先不要点击任何东西。现在你有三个选项,但每个选项都会导致一个不那么干净的提交历史。
1.1.默认会创建一个丑陋的合并提交。 2.2.如果你点击下拉菜单,选择 "压扁并合并",所有间隔的提交将被压扁为一个。这通常是你不希望看到的。 3.如果你点击Rebase and merge,所有的提交将与你一起进行",原PR将链接到你的PR,并且GitHub将显示 "该分支领先X个提交,落后Y个提交"。
所以是的,你可以使用GitHub网页界面保持你的 repo 与其上游的更新,但这样做会玷污你的提交历史。请坚持使用命令行--这很简单。
这里是GitHub关于同步分叉的官方文件。
在进行同步之前,你需要添加一个指向上游仓库的远程。你可能在最初分叉的时候就已经做了这个。