2011-03-10 83 views
242

我在github上分支了一個項目,並且成功地對我的本地主人進行了更改,並在github上推送到原點。我想發送一個拉取請求,但只想包含最後一次提交。 github.com上的pull request UI顯示了最後9次提交,我不知道如何過濾掉。在GitHub上發送拉取請求,僅提供最新的提交

我想了解如果我應該創建一個新的本地分支,檢查出來,並以某種方式重置或rebase上游?然後應用我的最後一次提交從我的主人身份證到新的本地分公司,並將其用於拉請求?

我試圖讓概念正確,並找出正確的命令行來做我所需要的。

+0

如果您對所有其他提交執行拉取請求,會發生什麼情況?我認爲git足夠聰明,可以忽略(或通過)已提交的提交? – jayarjo 2012-06-29 09:38:17

+2

假設上游尚未接受或不接受干預承諾。 – 2014-06-08 21:31:00

+0

@jayarjo我例如做了其他更改,我不想向上遊發送。例如,對git的更改將忽略主存儲庫。 git不容易。 – Martin 2017-07-01 09:17:40

回答

264

您需要基本創建一個新分支& cherry-pick您想添加到它的提交。

注意:您可能需要這些結帳/摘櫻桃命令前

git remote add upstream <git repository>

git remote update

git checkout -b <new-branch-name> upstream/master 

git cherry-pick <SHA hash of commit> 

git push origin <new-branch-name> 

之後,你會看到在github上<new-branch-name>分支,切換到它並可以提交拉取請求隨着你想要的改變。

+0

偉大的解決方案,非常感謝! – Max 2011-03-15 19:12:19

+0

謝謝,這個解決方案也幫助了我。這裏是一個鏈接,說明如何櫻桃採摘在git中工作:http://technosophos.com/content/git-cherry-picking-move-small-code-patches-across-branches(向下滾動並忽略PHP錯誤消息)。 – dubbaluga 2012-12-23 20:35:22

+29

在運行git checkout -b upstream upstream/master之前,我還需要'''git remote add upstream '''和''git remote update'''。 – plainjimbo 2013-05-07 21:13:58

51

創建一個新的分支從最新開始提交,這也是在源庫:

git branch new-branch origin/master 
git checkout new-branch 

然後使用git cherry-pick得到單個提交你想要拉入請求。如果與該提交這個分支被稱爲feature和你想要的是最新提交的這個分支提交,這將是

git cherry-pick feature 

假設該補丁適用不衝突,你現在有一個分行,你可以做你的拉請求。

第二步,您現在需要決定如何處理feature分支。如果您尚未在此分支上發佈您的更改,最好的過程可能是在新分支上重新分配此分支(並且除去最後一次提交,如果這不是由git rebase自動完成)。

+0

我在摘櫻桃。沒有添加提交但未跟蹤的文件存在(使用「git add」來跟蹤)。一切都在我的主人,但我需要從上游做我的分支。 – 2011-03-10 13:22:20

+5

如果'feature'已經在'origin/master'提交,'cherry-pick'中沒有任何事情發生。新分支應該來自'上游/主人'(即Kevin Hakanson的回答) – ohho 2013-01-31 10:32:51

25

我最終陷入了一種分叉狀態,並希望向原始項目提交請求的情況。

我:

  • orignal_project
  • forked_project(沙從原來的項目發佈:9685770)
  • my_fork(沙從分叉項目創建:207e29b)
  • 在我的叉子提交(SHA:b67627b),我想提交回原始項目

要做到這一點,我:

  1. 創造了一個新的分支從這裏原來項目分叉
  2. 從原始項目
  3. 櫻桃採摘全部拉到SHA提交我想提出一個拉請求
  4. 推了這一切到Github上

的Git命令是這樣的:

  1. 混帳分支我的特徵請求9685770
  2. git的結帳我的特徵請求
  3. 混帳拉https://github.com/original_project/original_project.git
  4. git的櫻桃挑選b67627b
  5. 混帳推起源我的特徵請求

然後,我選擇了我的功能請求作爲我的請求到原始項目的分支。

+0

也許有一個更簡單的方法,但這對我有用。 – 2013-02-27 17:39:23

+3

這些說明是最徹底和易於遵循的。爲我工作過。謝謝。 – 2013-12-20 13:52:05

5

這幾乎是爲我工作:

git checkout -b upstream upstream/master 

git cherry-pick <SHA hash of commit> 

git push origin upstream 

唯一的區別是這樣的:

git push origin upstream:upstream 

我需要改變的最後一行,這樣混帳推將使上游分支在我的GitHub庫所以我可以從它做出公關。

1

解決方案創建一個新的(臨時)分支,櫻桃挑選和創建該分支的拉請求不滿足我。我不想改變我的資料庫,使一組可用的提交,所以我想出了以下替換:

首先創建補丁文件的所有感興趣的提交:

git format-patch -1 <sha> 

如果提交的興趣恰好是您可以使用的最後一個HEAD而不是<sha>

現在,你可以發送補丁到源代碼庫的維護者,誰可以申請他們:

git branch new-branch <master or some older commit where the fork diverged> 
git checkout new-branch 

git am < <the patch> 
... 

git checkout master 
git merge new-branch 

最後這看起來應當是一樣的,如果一個臨時黨支部被拉入請求合併,但而不需要在fork-repository中增加額外的分支。

3

我已經做了提交,我希望能夠作爲一個pull請求回到當前分支上。

所以我檢查了一個新的分支

git checkout -b isolated-pull 

這裏就是我的解決方案不同於@Kevin Hakanson潛在的,因爲我需要這個分支重置我想從

到中DIFF歷史的地方
git reset --hard [sha-to-diff-by] 

而且櫻桃挑提交從中我想創建一個孤立的拉動請求

git cherry-pick [my-isolated-commit-sha] 

最後將其推到遠程

git push origin isolated-pull 

和拉請求DAT市。

相關問題