【问题标题】:How to pull into all branches?如何拉入所有分支?
【发布时间】:2014-01-12 13:16:09
【问题描述】:

我正在为 GitHub 上的一个项目做出贡献。

我做了以下事情:

  1. 分叉回购
  2. 克隆分叉的存储库
  3. 在我的本地仓库中创建了一个本地分支
  4. 修复了本地分支中的一个错误
  5. 将更改推送到我的分叉仓库
  6. 从该新分支发出拉取请求

几天后,我得到了一些 cmets,我必须进行更多更改。

但从那时起,他们的代码发生了很大变化。如果我必须再次提出拉取请求,我必须使用他们更新的代码更新我的新分支并合并我的更改。

我该怎么做?

编辑

在此之前,我的 git log 看起来像这样:

commit 一个“功能完成”(最新的,我想要推送的)

提交 B“功能仍然表现得很奇怪”

我完全按照 VonC 的建议做了(除了我在 fetched 时在我的功能分支中)。

我的rebase 有冲突。 当我尝试解决它们时,我惊讶地发现它是在上游主服务器上重新提交 B 而不是 A。我已经检查了很多次:git log 显示的正是我所展示的内容。

为什么它会将我的 previous 提交基于上游 master?

编辑: 我通过将我的 2 个提交 AB 压缩为一个来解决上述问题。 不知道为什么会这样……

【问题讨论】:

  • 您可能已经为您的更改创建了一个功能分支?
  • 所以在这种情况下,您可以将远程分支合并到您的功能分支中,以便您拥有所有更改,然后将更改推送到功能分支,然后您可以创建拉取请求。跨度>
  • 您使用的是哪个 GIT 客户端
  • @eatSleepCode,我在终端使用它。
  • 查看git tutorial了解如何合并分支

标签: git github git-pull pull-request


【解决方案1】:

你需要:

  • 将原始存储库添加为新的远程:

    git remote add upstream https://github.com/user/repo
    
  • 从“上游”获取

    git fetch upstream
    
  • 将你的分支重新设置在上游/master之上

    git checkout yourBranch
    git rebase upstream/master
    
  • 强制推送到您的 fork:这将自动更新您的拉取请求

    git push --force origin yourBranch
    

【讨论】:

  • 如果我在主存储库(原文如此)上发出拉取请求,如果它比我的分叉存储库早得多,会发生什么?如果我在几个月后处理该错误,就会发生这种情况,在此期间主要代码会继续执行并且可能会进行冲突更改。
  • @learner 这就是git fetch + git rebase 的用途:fetch 将带来最新的主 repo,rebase 将在最上层的基础上重播巡演工作-date 主要 repo 提交。您的拉取请求将使用该主存储库的最新版本完成。
  • 我明白,但如果我不这样做呢?它会变成一个 dirty 拉取请求吗?
  • @learner 你可以以交互方式将你的“脏”拉取请求重新定位在上游/master之上:git rebase --interactive。这样,您可以编辑/删除/压缩您想要的任何提交,以获得您希望上游 repo 看到的干净历史记录。要点是:无论你在你的 fork 中推回你的分支,都会自动更新你的拉取请求。
  • 好的,但是当您执行拉取请求时,GitHub 会向您显示差异,对吗?如果更改与我提到的情况发生冲突,那么差异会如何?我的意思是,GitHub 如何告诉我们这是一个错误的请求?如果我只是简单地推送到我的分叉存储库而不重新设置它应该仍然像你说的那样更新拉取请求。但这不会是一个失败的拉取请求吗?这样的 pull request 在 GitHub 中会是什么样子?
猜你喜欢
  • 2022-11-05
  • 2015-12-11
  • 2014-07-07
  • 2012-04-02
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
相关资源
最近更新 更多