8

是否有巧妙的工作流程在与上游仓库不同的分支上创建 pull_request 分支,以便 pull_request 分支始终与上游“master”完美匹配?

那是,

1)我有一个叉子,它与父遥控器有很大的不同。

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

因此 - 有没有办法在我的 fork 中创建一个分支,它是另一个远程 master 的完美副本?

4

2 回答 2

14

首先,您不应该修改本地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
于 2013-09-05T05:41:01.380 回答
1

用 origin 完全替换 fork:

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

从这里得到这个

于 2019-05-02T21:54:30.563 回答