2011-05-11 56 views
23

我在Github上分配了一個項目。避免不必要的合併提交和其他提交在GitHub上執行請求時

讓遠程上游爲upstream,我的遠程存儲庫爲origin。 我的本地master分支設置爲跟蹤遠程master分支。 然後我在當地master添加了一些東西,並且我偶爾與上游合併。

直到今天,當我想發出一個請求,拉我沒有發現這個問題: 拉請求由那些合併提交,和那些不需要提交,我以前做了無牽掛。然而,我想要的只是提交我所做的最後一次提交,應該將其作爲單個提交進行提交。 我能做些什麼來拯救?

回答

3

會這樣工作: 創建一個單獨的分支,只需要提交併在該分支上發出拉取請求。

+0

這是我推薦的。儘管不要擔心合併提交,如果分支只包含你想要的那個單獨提交,並且有一堆合併與master保持同步,那沒有什麼問題。 – Tekkub 2011-05-11 21:44:55

+0

這正是我所問 - 我不知道如何適當地做到這一點。 – 2011-05-16 17:57:46

27

而不是合併你想rebase。您可以手動執行此操作,也可以在拉動時自動執

git pull --rebase upstream master 
git push --force origin master 

一旦你開始做合併,雖然這將讓很難做,你需要分支重置回你之前合併提交。

+0

+1這就是rebase存在的原因:) – ralphtheninja 2011-05-12 10:47:14

+0

這一個似乎工作。我只是不確定是否必須執行第二步,因爲每次我與遠程主機合併時都會有合併提交。 – 2011-05-16 18:17:16

+7

-1爲git push --force解決方案提供與git push --rebase相同的級別。用戶需要警惕可能存在的陷阱,這可能會造成更大的破壞,並且回購的其他用戶必須知道如果他們分發了一個完全由推力刪除的提交併且想要合併回 – prusswan 2011-11-22 08:37:51

6

在Github上,您無法爲具有多個將其與上游分離的分支的分支創建單個特定簽入的拉取請求。

專門爲您打算製作的每個拉取請求創建分支。這使您可以繼續工作,而不用擔心污染拉請求。

10

如果我理解你的問題,你想擺脫你在你的分支中做的中間/一次性提交。嘗試這樣的:

git checkout -b for-upstream remotes/origin/master (create a new branch from the upstream origin) 
git cherry-pick <sha-of-the-one-commit-you-want-to-submit> (fix any conflicts if necessary) 

這應該給你一個本地的「上游」分支,其中只包含上游主+你的1提交。然後,您可以提交分行拉動請求

+0

我認爲第一行需要'git checkout -b ...'而不是'git branch -b ...'(做出這個改變,我會在此回答這個問題) – founddrama 2013-01-12 12:40:24

0

這看起來像一個回答你的問題(專題節「更新2011-04-15」):

Git workflow and rebase vs merge questions

彌迦書描述的技術壁球合併它允許您將功能分支中的更改作爲單個提交合併到主分支。

+0

壁球合併破壞合併跟蹤並可能導致無法完成的痛苦。 – 2013-12-06 14:17:01

相關問題