是否有巧妙的工作流程在与上游仓库不同的分支上创建 pull_request 分支,以便 pull_request 分支始终与上游“master”完美匹配?
那是,
1)我有一个叉子,它与父遥控器有很大的不同。
2)我想保留我的分叉(删除它没有意义)但是,我也想干净地发出与原始上游存储库差异最小的拉取请求。
因此 - 有没有办法在我的 fork 中创建一个分支,它是另一个远程 master 的完美副本?
是否有巧妙的工作流程在与上游仓库不同的分支上创建 pull_request 分支,以便 pull_request 分支始终与上游“master”完美匹配?
那是,
1)我有一个叉子,它与父遥控器有很大的不同。
2)我想保留我的分叉(删除它没有意义)但是,我也想干净地发出与原始上游存储库差异最小的拉取请求。
因此 - 有没有办法在我的 fork 中创建一个分支,它是另一个远程 master 的完美副本?
首先,您不应该修改本地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
。
原海报问:
[我]有没有办法在我的 fork 中创建一个分支,它是另一个远程 master 的完美复制品?
只要您的本地master
没有偏离upstream/master
(如果您一直在功能分支中而不是直接在中进行工作,则不应该偏离master
),那么只需将您的本地推master
送到您的origin
:
git push origin master
或者,您可以使用 refspec 将您的远程跟踪分支推upstream/master
送到您的origin/master
:
git push origin upstream/master:master
用 origin 完全替换 fork:
git remote add upstream <upstream_repository_url>
git fetch upstream
git reset --hard upstream/master
从这里得到这个