【问题标题】:Contributing to project on github, how to "rebase my pull request on top of master"为 github 上的项目做出贡献,如何“在 master 之上重新设置我的拉取请求”
【发布时间】:2013-06-15 11:29:50
【问题描述】:

好的,我为 github 上的一个项目做贡献。 github上的项目是upstream,我在github上的fork repo是origin,我的电脑上是local repo。

git checkout -b feature
# Working on feature
git commit -a -m 'only commit on feature'

然后我提交一个拉取请求

git push origin master

审查了拉取请求,需要进行不相关的更改。其他人提交并合并到upstream/master

现在upstream 维护者要求我“将我的拉取请求重新设置在 master 之上”

这是我的故事(插入法律与秩序音效).....

我没有对拉取请求进行任何更改,它仍然是相同的分支功能提交。

git checkout master
git fetch upstream
git checkout feature
git rebase master
=> "Current branch feature is up to date."
git push origin feature
=> "Everything up-to-date"

我不明白。在我将拉取请求推送到 origin/feature 之后,当我知道有人提交并合并到 upstream/master 时,这怎么可能?

谁能告诉我在这种情况下正确的程序应该是什么?

【问题讨论】:

    标签: git github


    【解决方案1】:

    您仅在上游存储库中显示提取。这实际上并没有更新您的任何本地分支机构。它only updates your knowledge of upstream。您需要确保 upstream/master 完全合并到您的 master 中,就像使用 git pull 一样,在变基到 master 之前,或者更简单地只是变基到 upstream/master

    即:

    git checkout master
    git pull upstream master
    git checkout feature
    git rebase master
    

    git checkout feature
    git rebase upstream/master
    

    更新:

    修复本地 feature 分支后,您需要将其推送回 origin 以完成更新拉取请求。由于您已经推送了一次feature,因此您不能再简单地再次push,因为变基会更改历史记录,并且不再是快进。通常,如果推送因“非快进”而失败,您会通过拉动来解决它,但拉动只会结合两个不同的历史,这绝对不是您想要的。这意味着您的旧(变基前)feature 分支将与新的(变基后)分支合并。您想用新的feature 分支的状态覆盖 origin/feature,转储旧分支的任何记录。这意味着您将希望使用git push -f origin feature 强制推动发生,即使它不是快进。注意:强制推送是危险,你可能会丢失提交。仅当您完全确定自己知道自己在做什么时才使用它,就像在这里,您有意在预变基 feature 分支中删除旧的、无用的提交。

    【讨论】:

    • 好的,我明白了,感谢您的澄清。我看到我应该拉而不是取。现在我遇到了另一个问题,当我git push origin feature 出现非快进错误、推送失败等。 git pull --rebase 会解决这个错误并推送到我的功能分支,否则会给维护者带来问题和其他人?
    • 更新了我的答案以涵盖推送。
    • 就我而言,我将上游仓库添加为远程仓库,但忘记从中获取。 git fetch upstream 下载了最新的更改,然后最终 git rebase upstream/develop 工作。
    • 确实,第二个选项(更好,因为你不必切换到master)需要git fetch upstream master
    【解决方案2】:

    现在上游维护人员要求我“将我的拉取请求重新设置在 master 之上”

    请注意,自 2016 年 9 月起,维护者可以自己触发变基。

    见“Rebase and merge pull requests

    当您选择新的“Rebase and merge”选项时,来自拉取请求分支的提交将重新基于基础分支的尖端,然后基础分支本身会快速转发到这个新重新设置的头部。变基会自动将变基提交的提交者设置为当前用户,同时保持作者信息不变。此操作不会修改拉取请求的分支。

    如果由于冲突而无法执行变基,我们会通知您,以便您在必要时手动解决它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      • 2016-01-13
      • 1970-01-01
      相关资源
      最近更新 更多