用原点完全替换Fork(github)

时间:2013-09-04 20:12:05

标签: git pull-request

是否有一个聪明的工作流程在与上游仓库分歧的fork上创建pull_request分支,以便pull_request分支始终与上游“master”完全匹配?

即,

1)我有一个叉子,它与父遥控器相差很大。

2)我想保留我的fork(删除它没有意义)但是,我还想干净地发出与原始上游存储库最小差异的pull请求。

因此 - 有没有办法在我的fork中创建一个分支,这是另一个远程主人的完美复制品?

2 个答案:

答案 0 :(得分:13)

首先,您不应该修改本地master分支,您应该只创建功能分支。如果您保持本地master未修改,那么您可以从上游仓库获取最新更改:

git remote add upstream <url-for-upstream-repo>
git fetch upstream

现在,您的远程跟踪分支upstream/master已与来自upstream的最新更改同步。或者,您也可以根据需要更新本地master

git checkout master
git merge upstream/master

现在,您可以从upstream/master创建功能分支:

git checkout -b feature upstream/master

如果要将功能分支与upstream的最新更改同步,则可以使用rebase,只要没有其他人也在使用功能分支(否则您将结束)迫使他们与改变的历史重新同步)。 rebase实际上是此工作流程的理想选择,因为您通常可以根据需要随时使用它来同步功能分支,而不会创建混乱的历史记录,因为它们不会创建合并提交:

git fetch upstream
git checkout feature
git rebase upstream/master

你也可以git merge upstream/master而不是变基,但你会留下合并提交,所以随着时间的推移,你会通过合并而不是变基来创建一个更复杂的历史。

当您准备好提交拉取请求时,只需转到origin并针对上游master发出请求。

原始海报问:

  

[我]有一种方法可以在我的前叉中创建一个分支,这是另一个遥控器主人的完美复制品吗?

只要您的本地master未与upstream/master分开(如果您在功能分支中而不是直接在master中进行工作,则不应该这样做) ,然后将您的本地master推送到origin

git push origin master

或者,您可以使用refspec将远程跟踪分支upstream/master推送到origin/master

git push origin upstream/master:master

答案 1 :(得分:0)

要完全用原点替换fork:

git remote add upstream <upstream_repository_url>
git fetch upstream
git reset --hard upstream/master

here那里得到了