【问题标题】:Git Pull vs. Pull RequestGit 拉取与拉取请求
【发布时间】:2014-04-30 09:26:24
【问题描述】:

我是使用 Git 的新手,所以如果这是微不足道的,我深表歉意。我使用 Github 和 EGit 设置了一个私有存储库。

为了更新和合并我的本地存储库分支与远程版本(本质上是 git pull),我在 Eclipse 中使用 Team > Pull

合并一个分支主分支,我必须在 Github 上请求并随后批准 Pull Request

调用git pull 和发送拉取请求有什么区别?

我看到这与 Fork and Pull 协作开发模型有关,并用于代码审查。我想我理解拉取请求的动机和用处,但它到底是什么?

【问题讨论】:

  • 说真的,他们创造了所有令人困惑的术语:1. 克隆 Vs 拉取请求 Vs 分支 Vs Git 拉取 Vs Fetch 2. 推送 Vs 提交 Vs 签入 Vs Git 添加 3. 现在什么是合并?

标签: git github git-pull


【解决方案1】:

如果您使用git pull,则将更改从远程存储库拉到您的存储库中。

如果您向另一个存储库发送 pull 请求,您要求他们的维护人员将您的更改拉入他们的(您或多或少要求 他们使用git pull来自您的存储库)。

如果您是该存储库的维护者,那么通过假装您在该工作流程中扮演两个角色似乎会使其变得更加困难。你不妨在本地将你的开发分支合并到你的主分支中,然后将该主分支直接推送到你的 GitHub 存储库中。

(附带说明,如果您是 Git 新手,我建议您使用 git fetch,然后使用 git merge 而不是 git pullgit pull 实际上是 git fetch,然后是 git merge,但是分开做可以让你更好地控制潜在的冲突。)

【讨论】:

  • 感谢您的回复。那么单独的分支是否有效地区分了存储库?主存储库的维护者收到您的分支并选择将这些更改合并到主分支中?
  • 并非如此,您可以在存储库中拥有多个分支。实际上并没有“主”存储库的概念,而是维护者/官方存储库的概念(它更像是一个管理概念)。 GitHub 上的“分叉”将存储库克隆到您的帐户中,因此您有一个单独的存储库来发布您的更改并邀请主存储库的维护者拉取您的更改(通过拉取请求)。拉取请求主要是用于管理协作的 GitHub(或 Gitlab/Gitorious)概念,它与 Git 本身并没有直接关系。
  • 这是有道理的。所以它似乎主要适用于去中心化的开源项目。在另一个答案中@TimWolla 提到了git request-pull 命令。这不是标准的 Git 功能吗?
  • git request-pull 似乎更像是一个“方便”命令,将您要发送给维护者的消息呈现给维护者,以便他们知道要拉取什么(例如准备好通过电子邮件发送) .它记录在here:“当你的工作被推送到你的分支时,你需要通知维护者。这通常被称为拉取请求,你可以通过网站生成它——GitHub 有一个“ pull request”按钮,自动向维护者发送消息 - 或运行 git request-pull 命令并手动将输出通过电子邮件发送给项目维护者。
【解决方案2】:

pull request 请求仓库的维护者到git pull 进行一些更改(顾名思义)。 GitHub 提供了一个额外的易于使用的界面,可以简化对此类请求的审核。
您不需要 使用它来合并某个分支。但是您可以使用它,并且重新检查是否所有更改都已准备好合并可能会有所帮助。如果您不想要或不需要额外的安全性,您可以简单地git merge 分支。


git 本身也有一个创建拉取请求的命令,专为在邮件列表中使用而设计。您可以使用git request-pull 命令请求生成。实际上,使用此命令需要提交一些项目的拉取请求!该命令的输出类似于此(取自from the official git homepage):

$ git request-pull origin/master myfork
The following changes since commit 1edee6b1d61823a2de3b09c160d7080b8d1b3a40:
  John Smith (1):
        added a new function

are available in the git repository at:

  git://githost/simplegit.git featureA

Jessica Smith (2):
      add limit to log function
      change log output to 30 from 25

 lib/simplegit.rb |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

【讨论】:

    【解决方案3】:

    Git 拉动

    远程仓库======>本地仓库

    git pull=Git Fetch + Git Merge

    拉取请求

    这是一个 Github 的东西。

    远程 Github 仓库

    远程 github 仓库的维护者是否会接受你的拉取请求,取决于她。

    【讨论】:

      猜你喜欢
      • 2011-12-31
      • 2017-04-11
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多