是否有巧妙的工作流程在与上游仓库分歧的fork上创建pull_request分支,以便pull_request分支始终与上游"master"完全匹配?
那是,
1)我有一个叉子,它与父遥控器相差很大.
2)我想保留我的fork(删除它没有意义)但是,我还想干净地发出与原始上游存储库最小差异的pull请求.
因此 - 有没有办法在我的fork中创建一个分支,这是另一个远程主人的完美复制品?
小智 13
首先,您不应该修改本地master分支,您应该只创建功能分支.如果保持本地master未修改,则可以从上游仓库获取最新更改:
git remote add upstream <url-for-upstream-repo>
git fetch upstream
Run Code Online (Sandbox Code Playgroud)
现在,您的远程跟踪分支upstream/master将与来自的最新更改同步upstream.或者,您也可以master根据需要更新本地:
git checkout master
git merge upstream/master
Run Code Online (Sandbox Code Playgroud)
现在,您可以创建以下功能分支upstream/master:
git checkout -b feature upstream/master
Run Code Online (Sandbox Code Playgroud)
当您想要将功能分支与最新的更改同步时upstream,您可以使用rebase,只要没有其他人也在使用功能分支(否则您最终会强制它们与更改的历史记录重新同步).rebase实际上是这个工作流程的理想选择,因为您通常可以根据需要随时使用它来同步功能分支,而不会创建混乱的历史记录,因为它们不会创建合并提交:
git fetch upstream
git checkout feature
git rebase upstream/master
Run Code Online (Sandbox Code Playgroud)
您也可以git merge upstream/master代替重新定位,但是您将留下合并提交,因此随着时间的推移,您将通过合并而不是重新定义来创建更复杂的历史记录.
当您准备提交拉取请求时,只需按下并向origin上游发出请求即可master.
原始海报问:
[我]有办法在我的前叉中创建一个分支,这是另一个远程主人的完美复制品吗?
只要你的本地master没有分歧upstream/master(如果你一直在功能分支而不是直接在你的工作中它不应该分开master),那么只需将你的本地推master送到你的origin:
git push origin master
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用refspec将远程跟踪分支推upstream/master送到origin/master:
git push origin upstream/master:master
Run Code Online (Sandbox Code Playgroud)