为什么拉取请求会导致分叉落后于上游?
Why does a pull request result in the fork being behind the upstream?
假设有一个名为 upstream/project
的 GitHub 存储库。假设我有一个名为 fork/project
的分支。我对 fork/project
进行了一些更改,并向 upstream/project
发起了拉取请求。接受拉取请求后,为什么 fork/project
变成 upstream/project
后面的 1 个提交?
上游存储库中的代码现在与我的分支中的代码匹配。为什么我必须再次从上游回购中拉取以结束相同的状态?上游存储库不能与分叉完全同步,而不是 "overshooting" 它吗?
我希望得到一个答案,解释该系统提供的优势或要求该工作流程的限制,无论哪种情况。谢谢!
正如 SLaks 在评论中所暗示的那样,不同之处在于 upstream/project
上的合并提交。
当您的拉取请求被接受时,分支被合并并在 upstream/project
上进行提交,但是 fork/project
在您再次从上游拉取之前不知道这一点。
当您拉取时,fork/project
首先获取新的提交,然后只是快进而不需要合并。只有 then 两棵树相同。
关于攻略:
非常广泛的情况是,由于所有合并提交,合并策略(此处讨论)在树结构方面更加嘈杂且有点笨拙。另一方面,变基策略更精简但也更棘手,如果人们不小心使用它,就会遇到令人讨厌的情况。
要进一步了解 "strategy" 部分,已经有很多比较优秀的答案,只需按照 "merge/rebase debate".
搜索即可
I'm hoping for an answer that explains either the advantage that this system provides or the limitation that demands this workflow, whichever the case may be.
如果您真正要问的是:
why did upstream not merge with fast-forward?
Merge-commit/no-fast-forward 策略对于合并 PR 非常有用,因为它允许 reverting 只需一步更改(因为只有一个提交,不管有多少提交原始分支)。仅此一项就足以使其成为首选策略。
假设有一个名为 upstream/project
的 GitHub 存储库。假设我有一个名为 fork/project
的分支。我对 fork/project
进行了一些更改,并向 upstream/project
发起了拉取请求。接受拉取请求后,为什么 fork/project
变成 upstream/project
后面的 1 个提交?
上游存储库中的代码现在与我的分支中的代码匹配。为什么我必须再次从上游回购中拉取以结束相同的状态?上游存储库不能与分叉完全同步,而不是 "overshooting" 它吗?
我希望得到一个答案,解释该系统提供的优势或要求该工作流程的限制,无论哪种情况。谢谢!
正如 SLaks 在评论中所暗示的那样,不同之处在于 upstream/project
上的合并提交。
当您的拉取请求被接受时,分支被合并并在 upstream/project
上进行提交,但是 fork/project
在您再次从上游拉取之前不知道这一点。
当您拉取时,fork/project
首先获取新的提交,然后只是快进而不需要合并。只有 then 两棵树相同。
关于攻略:
非常广泛的情况是,由于所有合并提交,合并策略(此处讨论)在树结构方面更加嘈杂且有点笨拙。另一方面,变基策略更精简但也更棘手,如果人们不小心使用它,就会遇到令人讨厌的情况。
要进一步了解 "strategy" 部分,已经有很多比较优秀的答案,只需按照 "merge/rebase debate".
搜索即可I'm hoping for an answer that explains either the advantage that this system provides or the limitation that demands this workflow, whichever the case may be.
如果您真正要问的是:
why did upstream not merge with fast-forward?
Merge-commit/no-fast-forward 策略对于合并 PR 非常有用,因为它允许 reverting 只需一步更改(因为只有一个提交,不管有多少提交原始分支)。仅此一项就足以使其成为首选策略。