是否有一个聪明的工作流程在与上游仓库分歧的fork上创建pull_request分支,以便pull_request分支始终与上游“master”完全匹配?
即,
1)我有一个叉子,它与父遥控器相差很大。
2)我想保留我的fork(删除它没有意义)但是,我还想干净地发出与原始上游存储库最小差异的pull请求。
因此 - 有没有办法在我的fork中创建一个分支,这是另一个远程主人的完美复制品?
答案 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那里得到了