修复糟糕的拉取请求

时间:2016-04-29 17:15:04

标签: git github

我分了一个朋友的主回购,做了一些提交,然后做了拉请求。

我的请求存在许多问题:

一,提交方式不正确。

其中一些代码很糟糕。

三,显然我需要对pull请求进行rebase而不是合并。

我修复了所有代码,但我很害怕将它提交给我的分支机构;我需要强行推它还是什么?此外,我如何解决其他问题?

有问题的公关:https://github.com/jleclanche/fireplace/pull/344

daniel.bak@STPC039 ~/documents/github/fireplace (master)
$ git rebase jleclanche/master
First, rewinding head to replay your work on top of it...
Applying: Corrupted Healbot + test
Applying: Implemented Bilefine Tidehunter & Zealous Initiat
Applying: Fixing Zealous Initiate name
Applying: Corrupted Seer
Applying: Implement Shadow Strike

daniel.bak@STPC039 ~/documents/github/fireplace (master)
$ git rebase -i jleclance/master
fatal: Needed a single revision
invalid upstream jleclance/master

daniel.bak@STPC039 ~/documents/github/fireplace (master)
$ git rebase -i jleclance/master
fatal: Needed a single revision
invalid upstream jleclance/master

daniel.bak@STPC039 ~/documents/github/fireplace (master)

更多:

daniel.bak@STPC039 ~/documents/github/fireplace (master)
$ git log jleclanche/master
commit 644c375b065c10edd02b8ba2450842404971919a
Author: Jerome Leclanche <jerome@leclan.ch>
Date:   Fri Apr 29 14:26:39 2016 +0300

    Implement Silithid Swarmer, with tests

commit 1f33e4888cdbdec159e932ab4259b9e4f015adc8
Author: Jerome Leclanche <jerome@leclan.ch>
Date:   Fri Apr 29 13:20:57 2016 +0300

    Add a NUM_ATTACKS_THIS_TURN attribute selector

commit 13b58c2ee4249c4195416d257213cf1c4e0a276c
daniel.bak@STPC039 ~/documents/github/fireplace (master)
:

    Implement buff-based enrage from 12051

commit 72b95d2bff4c1af5b2be0331ce6c8b2266298d52
Author: Jerome Leclanche <jerome@leclan.ch>
Date:   Tue Apr 26 06:53:49 2016 +0300

    Add tests for Dalaran Aspirant

2 个答案:

答案 0 :(得分:2)

除非项目有一些额外的要求,并且其中很多都有,如果你需要修复PR中的编码错误,你需要做的就是提交并将你的更改推送到现有的分支。它们应该在拉取请求中显示为更新。

Here's an example of a pull request that needed some fixups。您可以看到我对初始拉取请求的内联注释(展平为拉取请求)和原始提交者更新提交。

你的情况不同。他们的提交有两个问题,他们都是Git风格的挑选。

首先,他们不希望在您的公关中看到任何合并。您的历史记录如下:

1 - 2 - 3 - 4 - 5 - 6 [jleclanche/master]
         \           \
          A - B - C - D - E - F [feature/wog_cards]

在分支机构中间进行合并会使得很难理解大型项目中的历史记录并做出很多贡献。他们希望你重做整个分支,好像它是在最新提交之上完成的。

1 - 2 - 3 - 4 - 5 - 6 [jleclanche/master]
                     \
                      A - B - C - D - E - F [feature/wog_cards]

幸运的是,Git可以为你做到这一点。首先,确保jleclanche遥控器是最新的获取。然后结帐feature/wog_cards(或调用您的分支)并运行git rebase jleclanche/master

  • git fetch jleclanche
  • git checkout feature/wog_cards
  • git rebase jleclanche/master

这将在jleclanche/master之上重新分配您的分支中的每个更改。可能存在冲突,正常解决它们并遵循git给你的指示(即使用git rebase --continue)。

完成后,您还可以使用rebase修复提交消息,以遵循其样式指南。这次是一个互动的rebase。这允许您编辑提交。从您的分支运行git rebase -i jleclanche/master。它将带来一个带有指令的编辑器。您希望在每次提交时使用“reword”选项。 Git会依次向您显示每个提交消息,您应该编辑它们以跟随their style guide

Here's some more information about rewriting history

最后,你需要推动这些变化。由于您已更改历史记录,因此您的更改无法在现有提交的基础上进行更改。所以你必须强迫推。在这种情况下它很好,唯一可以搞砸的存储库就是你自己的存储库。 git push --force origin。然后您的更改应显示在PR中。

正如您所看到的,这涉及一些相当高级的Git知识。 IMO对首次贡献者的贡献的保管修正应由项目负责。

答案 1 :(得分:0)

修复本地分支以获得您/他们想要的历史记录后,只需强制推送到PR分支,PR就会自动更新已更换的提交。