为每个提交创建单独的pull请求

时间:2016-10-13 17:33:16

标签: git github pull-request

我知道这不是一个新问题,但是我在这里尝试了许多解决方案,似乎没有什么对我有用。

我已经分配了一个项目来为此做出贡献。我做了多次提交,它们都只包含在一个拉取请求中。

我想为每次提交创建新的拉取请求,我尝试创建一个新的分支并愉快地挑选特定的提交但是它似乎不起作用。

  1. 我有一个主分支,它在远程分支之前是4个提交。 https://github.com/Gaurang033/Selenium2Library
  2. 如果我从我的主人创建一个新分支,所有这些更改也会被复制。所以创建一个分支也没有帮助。 https://github.com/Gaurang033/Selenium2Library/tree/click_elements
  3. 以下是git log --all --oneline --graph --decorate的一些输出:

    * 340fb9e (origin/click_elements) Feature Request - Click Elements #585
    *   8a8f485 (HEAD -> master, origin/new_locator, origin/master, origin/HEAD) Merge remote-tracking branch 'upstream/master'
    |\
    | * 2466942 (upstream/master) Libdoc updates - link to project and fix 404 (#668)
    * | e66862f Added method to find element by class name #673
    * | f8ec2ed Feature Request - Click Elements #585
    * | 264e38c Added following keywords and their acceptance test cases to fix the issue #463 table_cell_should_not_contain table_column_should_not_contain table_footer_should_not_contain table_header_should_not_contain table_row_should_not_contain table_should_not_contain
    | * [truncated: more commits on master in original repo...]
    |/
    *   ef5d24d Merge pull request #539 from ReadmeCritic/master
    

    有人请让我知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

在GitHub上提交PR时,通常最好保持PR原子性,并使其与官方master保持同步。也就是说,您用于PR的任何分支都应该直接关闭upstream/master,并且应该只包含该PR所需的提交。

要解决您的问题,请先重置master以与upstream同步:

git checkout master
git reset --hard upstream/master

现在,对于您要提交的每个PR,创建一个新分支并挑选相应的提交。 E.g:

git checkout -b branch1
git cherry-pick f8ec2ed
git push --set-upstream origin branch1

完成后,您可以删除原来的click_elements分支:

git branch -D click_elements
git push :click_elements

或者,如果您希望该分支仅包含第一个提交(从而允许您重用现有PR),请执行以下操作:

git checkout click_elements
git reset --hard 264e38c
git push --force-with-lease

为避免将来出现此问题,请勿直接提交master。相反,请执行以下操作:

  1. 如有必要,请更新您的仓库:

    git checkout master
    git pull upstream master
    
  2. 创建一个新分支(git checkout -b mybranch)。

  3. 在该分支上进行这一个PR 所需的任何更改,照常提交。
  4. 在提交公关之前,请立即修改您的功能分支:

    git checkout master
    git pull upstream master
    git checkout mybranch
    git rebase master
    

    (根据项目的不同,即使打开PR,您也可以进行折扣。但是,通常您不需要,特别是如果您在打开PR之前就这样做了。)

  5. 打开PR。

  6. 强制性警告:由于rebase(以及reset --hard)会重写历史记录,因此对于在此分支上工作的其他人来说,这可能会造成危险/破坏。请务必清楚地告知您与正在合作的任何人所做的事情。