当前位置:   article > 正文

如何更新或同步 GitHub 上的分叉存储库?

如何更新或同步 GitHub 上的分叉存储库?

问题描述:

我分叉了一个项目,进行了更改,并创建了一个被接受的拉取请求。新的提交后来被添加到存储库中。我如何将这些提交放入我的分叉中?

解决方案1:

huntsbot.com高效搞钱,一站式跟进超10+任务平台外包需求

在分叉存储库的本地克隆中,您可以将原始 GitHub 存储库添加为“远程”。 (“远程”就像存储库 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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

如果您不想重写您的 master 分支的历史记录(例如因为其他人可能已经克隆了它),那么您应该将最后一个命令替换为 git merge upstream/master。但是,为了进一步提出尽可能干净的拉取请求,最好重新设置基准。

如果您已将分支重新定位到 upstream/master,您可能需要强制推送,以便将其推送到您自己在 GitHub 上的分叉存储库。你会这样做:

git push -f origin master

  • 1
  • 2

您只需在重新定位后第一次使用 -f。

huntsbot.com – 高效赚钱,自由工作

由于您的 fork 仅存在于 github 上,而 github 没有通过 Web 界面进行合并的工具,因此正确的答案是在本地进行上游合并并将更改推送回您的 fork。

这是我在使用 github 时发现的一个很棒的教程:gun.io/blog/how-to-github-fork-branch-and-pull-request

快速注意,不必重新设置自己的主分支以确保您从干净状态开始,您可能应该在单独的分支上工作并从中发出拉取请求。这可以让您的 master 保持干净,以便将来进行任何合并,并且您不必使用 -f 重写历史记录,这会弄乱所有可能克隆您的版本的人。

我没有使用 rebase 命令,而是使用了以下命令:git merge --no-ff upstream/master 这样您的提交就不再是最重要的了。

@jww:您问为什么需要告知 Git 原始 GitHub 存储库。这是因为 Git 是一个去中心化的版本控制系统,并没有以任何方式与 GitHub 绑定;很明显,Git 是在 GitHub 之前创建的。当你在 GitHub 上创建一个 fork 的仓库并克隆它时,GitHub 知道这个仓库是一个 fork; Git没有理由,也没有。 (为什么克隆不复制 Git 遥控器?Git 是分散的;不同的人会想要不同的遥控器;这样做没有意义。)请参阅 github.com/github/hub,了解 Git 中的 GitHub 集成。

解决方案2:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

从 2014 年 5 月开始,可以直接从 GitHub 更新分叉。这在 2017 年 9 月仍然有效,但它会导致一个肮脏的提交历史。

在 GitHub 上打开你的 fork。单击拉取请求。单击新的拉取请求。默认情况下,GitHub 会将原始版本与您的 fork 进行比较,如果您未进行任何更改,则不应有任何可比较的内容。如果您看到该链接,请单击切换基础。否则,手动将基叉下拉设置为您的前叉,将头叉设置为上游。现在 GitHub 会将您的 fork 与原始版本进行比较,您应该会看到所有最新的更改。创建拉取请求并为您的拉取请求分配一个可预测的名称(例如,从原始更新)。向下滚动到合并拉取请求,但不要单击任何内容。

现在您有三个选项,但每个选项都会导致提交历史不太干净。

默认将创建一个丑陋的合并提交。如果您单击下拉菜单并选择“压缩并合并”,则所有介入的提交都将被压缩为一个。这通常是您不想要的。如果你点击 Rebase and merge,所有的提交都会“和”你一起进行,原来的 PR 会链接到你的 PR,GitHub 会显示 This branch is X commits ahead, Y commits behind 。

所以是的,你可以使用 GitHub Web UI 让你的 repo 更新到它的上游,但是这样做会破坏你的提交历史。请改用 the command line - 这很简单。

这一次效果很好。第二次这个过程没有以同样的方式工作:“切换基础”链接没有出现。当我点击“单击以创建拉取请求”时,它在 SOURCE 存储库上创建了一个 PR。不是我想要的..

仍然有效(Marchi 2015),尽管“切换基础”链接不再存在。您必须更改“Base”下拉菜单,以便它们都指向您的 fork,然后您会收到“Compare across repos”的提示,这会将您带到您想要的位置。

2015 年 4 月。作品。谢谢。我确实得到了“切换到基地”。但是,第 6 步是“创建拉取请求”-> 输入评论->“创建拉取请求”。最终在原始提交之前提交 1 次。

@cartland(或其他人) - 是的,它说“这个分支是 1 提交之前......”这有什么要担心的吗?是否有可能摆脱该消息?

使用简单的更新或同步按钮会不会更好!

解决方案3:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

这是 GitHub 在 Syncing a fork 上的官方文档:

同步一个 fork 设置 在同步之前,您需要添加一个指向上游存储库的远程。当你最初分叉时,你可能已经这样做了。提示:同步你的 fork 只会更新你的本地仓库副本;它不会更新您在 GitHub 上的存储库。 $ git remote -v # 列出当前遥控器 origin https://github.com/user/repo.git (fetch) origin https://github.com/user/repo.git (push) $ git remote add upstream https

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/563546
推荐阅读
相关标签