从messy GitHub fork创建pull请求

时间:2016-02-03 18:46:29

标签: git github

我在GitHub上分叉了一个项目。我已经在我自己的主分支中做了一小堆改变。我想让他们在上游接受,所以我想为每个人创建干净的拉取请求。

我的回购中有created an "upstream" remote。我相信,对于我想要的每个拉取请求,我需要:

  1. 创建一个本地分支,并将其签出 git checkout -b mynewfeaturename
  2. 将此分支设置为上游(非my-project)仓库的当前状态。 (重新?重置?)
  3. 查看我自己的提交和" cherry pick"他们将它们应用于这个分支。
  4. Push this branch to GitHub.
    git push origin mynewfeaturename
  5. Create the pull request from the branch.
  6. 我的问题有两个:

    • 上述过程是否正确?
    • 我该怎么做第2步呢?

    为了帮助处于同样糟糕状态的其他人,我建议理想的答案列出上述每个步骤的明确命令(或任何正确的步骤),握住我们的手,走我们的路从头到尾贯穿整个过程。

1 个答案:

答案 0 :(得分:2)

  
      
  1. 创建一个本地分支,并将其签出。 (git checkout -b mynewfeaturename)
  2.   
  3. 将此分支设置为上游(非my-project)仓库的当前状态。 (重新?重置?)
  4.   

上述两个步骤的组合没有意义。你可以通过以下方式到达同一个地方:

git checkout -b mynewfeaturename upstream/master

即,根据当前状态mynewfeaturename创建一个新的本地分支upstream/master,然后通过有选择地应用提交来构建该分支。

  
      
  1. 查看我自己的提交和" cherry pick"他们将它们应用于这个分支。
  2.   
  3. 将此分支推送到GitHub。
  4.   
  5. 从分支机构创建拉取请求。
  6.   

这在很大程度上是正确的,尽管您要确保如果特定更改取决于先前提交的PR,它是基于该PR而不是上游状态的目录。

也就是说,如果您之前已为myfeature_A提交了公关,并且您现在想要提交myfeature_B的公关,这取决于myfeature_A的更改,那么:

git checkout -b myfeature_B myfeature_A

根据您本地存储库的状态,如果您首先使用自己的分支的交互式rebase开始,通过将相关提交压缩来清理历史记录,您的生活也会更容易。