2011-07-07 100 views
2

我有一個情況,我在一個特定的分支上的兩個不同的項目。我已完成項目「A」,承諾進行更改,並將更改推向遠程。這個變化「A」目前正在審查中,所以它尚未合併到分支機構。與此同時,我開始在同一分支的另一個項目上進行無關的更改,將此更改稱爲「B」。我已經完成編碼這個改變,我準備好承諾並推動這一點。但是我不確定這是怎麼做的,因爲變化「A」還沒有合併。我怎樣才能將這兩個變化「A」和「B」作爲不相互依賴的單獨變化來推進?推送多個不相關的提交到遠程git回購

+0

我編輯了我的答案。步驟'git checkout parent_commit'其中parent_commit =提交哈希檢查在該提交回購的狀態,並且下面的'git checkout -b commitB'從它創建新的分支。 – shelhamer

回答

3

首先,您需要確定將成爲變更A和B的共同父項的提交。如您所描述的,這是提交A的父項。使用git log在A之前查找提交的哈希。您只需鍵入提交哈希的前幾個字母/數字即可。讓我們假設它是「parent_commit」

現在籤這個承諾,我們會作爲一個新的分支的變革B.

git checkout parent_commit 

下一頁頭使用從它創建一個新的分支,在那裏我們將提交B更改。

git checkout -b changeB 

最後,使用git addgit commit對這一新分支提交您的變動b。完成後,請執行git push以將您的提交B從獨立於更改A的新分支推送。或者,如果您已經提交更改B,則使用git cherry-pick commitB,然後使用git pull

現在你將有你用一原分公司,並與B中的新的分支,共享歷史最高A.

關閉句話的父母:如果已經提交B和做一個分支吧(和有它簽出),你可以做在對方的回答中提到的底墊中的一行:

git rebase --onto master commit_A_sha 
+0

我有點理解你在說什麼,但是你能描述一下如何通過給它提供共同父項的提交ID來創建一個新的分支「common_parent」。我需要這樣做,因爲我的更改「A」已經提交。 – DarezGhost

+0

我會編輯我的答案,以更多的步驟,一秒。 – shelhamer

0

本質上相同的結果Shelhamer的響應;但是您可以使用git rebase --onto在單個命令中實現相同的結果。找到'old'父代的SHA標識(在你的例子中是A),以及新父代的SHA標識(例如master)。然後,假設你有問題(B)的分支簽出,運行:

git rebase --onto <new parent> <old parent> 

這將本質上是「回升」的分支B,從一開始的一切,所以它是基於關閉主會移動。然後就像平常一樣git push