2013-08-05 56 views
3

如果您只想要請求一些提交但不是全部,會發生什麼?Git pull只請求在bitbucket上的某些提交

說你有一個回購,Foo,並將該回購分銷爲Bar。然後你將提交1和2提交給Bar。我只想把提交2拉回到Foo,我該怎麼做?

我使用bitbucket作爲git主機,所以我很確定我需要在命令行上執行它。謝謝。

回答

5

我認爲git cherry-pick在這裏可能更好,但我喜歡使用git rebase -i,部分原因是因爲它是如此多才多藝,您可以重用知識。

(1)首先,創建一個新的分支(將在上拉請求):

git checkout -b commit2_PR

(2)然後,交互變基(-i爲交互式):

git rebase -i commit2_PR^^ commit2_PR

注意:第一個參數需要是最後(最舊)感興趣的提交的

(3)您的編輯器將在最後2次提交時觸發 - 並在底部提供非常有用的說明。現在在Pull Request中刪除不需要的提交行(在這種情況下,刪除commit 1,僅保留commit 2)。現在,保存並退出,並且git rebase將做它的事。

(3.1)如果存在合併衝突,它將停止並且您必須按照通常的方式修復它,並遵循它提供的說明。在干涉歷史時,這種情況經常令人驚訝。

(4)最後,這個新的分支commit2_PR - 你拉請求那個分支。完成。


我強烈建議你閱讀的底墊的手冊頁(和/或谷歌搜索),並用它進行試驗幾次。您可以通過git rebase的論點進行簡化,但我會留給您閱讀聯機幫助頁,而不是在此處將其複雜化... 不要害怕!請注意,因爲您已經創建了一個新分支,所以如果您將它分解或分配有多糟 - 無關緊要 - 只需刪除該分支並再次執行即可。原來的分支仍然在那裏,沒有改變。

有很棒的東西可以讓你的Pull請求更容易閱讀 - 壓縮(合併)提交,重新排序提交,單獨提交(使用git add -p並在兩者之間創建新的提交),編輯提交消息,更改提交內容爲如果你是第一次提交它們等等。

用這種方式重寫歷史記錄是完全正確的,只要你還沒有推送它,它仍然是私人的。這就像在小說發表之前編輯一本小說,因此它更有意義,更容易閱讀,錯誤更少。 (例如,您需要更正錯誤,但是如果尚未發佈,那麼讀者不需要知道。)

0

提交2已在提交1之上進行。這意味着它可能具有依賴性。你可以使用git cherry-pick <commit2>或更好的,如果酒吧貢獻者將在Foo mergebase之上重新定義commit2,然後重新提交它作爲獨立的pull請求。

+0

我做了更多的挖掘,這裏有一個類似的帖子:http://stackoverflow.com/a/1405189/786675,你在說什麼? – the1plummie