如果fork repo和原始repo都推送了一些提交,如何用原始repo更新forked repo?

时间:2018-01-17 18:01:10

标签: git github version-control

我有以下情况:

有一个名为" MASTER"的回购。 Fork" MASTER"创建" FORK_MASTER"。

假设有10个提交被推进" MASTER"并推出了两个提交" FORK_MASTER"。

现在我想更新FORK。如何实现呢?

我尝试做同样的事情。我做了以下步骤来实现这个目标: 1)设置上游为" FORK_MASTER"到" MASTER"。 2)git fetch upstream 3)git rebase上游/开发 4)git push origin

但是git在第3步之后引发冲突,即git rebase上游/开发。

期待听到如何实现这一目标。

2 个答案:

答案 0 :(得分:1)

由于MASTER是主要仓库(FORK_MASTER为MASTER仓库做出贡献),您应首先从MASTER仓库中提取更改,然后从顶部的FORK_MASTER中修改更改。

假设本地repo开发分支提交历史记录如下:

…---A---B  develop

对于MASTER repo,有10个提交C1C10被推送。对于FORK_MASTER repo,有2个提交D1D2被推送。

通常的工作流程是将更改推送到FORK_MASTER,然后创建拉取请求以将FORK_MASTER / develop合并到MASTER / develop(因为在FORK_MASTER仓库上工作的人通常不是MASTER仓库的管理员):

# In local FORK_MASTER repo
git remote add upstream https://github.com/user/MASTER -f
git checkout develop
git pull origin develop
git pull upstream develop --rebase
git push -f origin develop

提交历史记录将是:

…---A---B---C1---C2---…---C10---D1---D2 develop, origin/develop
                           |
                     upstream/develop  

现在FORK_MASTER仓库已更新。您还可以通过创建拉动请求来更新MSTAER仓库,以将FORK_MASTER / develop合并到MASTER / develop中。或者,如果您有权将更改推送到MASTER仓库,则可以通过git push upstream master直接推送到MASTER仓库。

注意:当rebase在D1的顶部提交D2upstream/develop时,如果存在冲突,您可以手动修改并保存冲突文件,然后使用git add .git rebase --continue

答案 1 :(得分:0)

我使用以下命令解决了这个问题:

git remote -v (检查原始仓库位置)

git remote add upstream (添加上游repo路径)

git fetch upstream (从上游仓库获取分支)

git merge upstream / --allow-unrelated-histories -X our -m"更新分支" (将更改从上游分支合并到分叉分支)

git push -f origin --all (将更改推送到分支分支)

使用这些命令,我​​成功地能够更新分叉分支。