2012-10-05 84 views
3

後,我有別人的回購像叉子和犯了一些變化,以我的主分支,像這樣的,並推到我的叉:混帳開關,分支是主分支推

[upstream/master] --- C1 --- C2[origin/master] 

然後我決定,我想我的變化C1C2是一個分支feature_branch1的一部分,我希望我的master分支能回到upstream/master

[upstream/master === origin/master] --- C1 --- C2[origin/feature_branch1] 

通過我實現了這個:

git checkout C2 
git branch -m feature_branch1 
git checkout upstream/master 
git branch -m master 

(不知道這是否是我的意思)。

我加入一些額外的功能了我master分支,像這樣:

         C1 --- C2 [origin/feature_branch1] 
           /
[upstream/master === origin/master] 
            \ 
            C1' --- C2' [origin/feature_branch2] 

git checkout master; git checkout -b feature_branch2; <changes>; <commits>

現在我想要推到遙遠。我推feature_branch1feature_branch2成功(git push origin feature_branchX),但是當我試圖把主人,我得到有關無法快進,失去歷史的錯誤。

我得到這個 - 我想它不想讓我失去C1C2通過將master移回分支點。但我已經在feature_branch1已經保存了C1C2,所以我不會失去它們。

有沒有什麼辦法可以實現上面的圖表?

回答

1

如果你--force標誌添加到您的推它應該會成功。

改寫歷史被認爲是一次被推因爲一件壞事,如果別人已經克隆你的主人,拉着要刪除的提交,就會遇到問題,因爲他們不再存在的裁判。

+0

這就是問題 - 我是否真的將它們刪除?我不認爲我是這樣的,因爲使用相同的SHA編號的提交仍然存在,但是在分支'feature'而不是'master'下,因爲我所做的只是重命名了我的分支?或者我感到困惑 –

+0

您正在將它們從主分支中刪除。如果有人爲您的主分支拉取了最新的參考,他們將在未來遇到錯誤,即使這些相同的提交現在存在於不同的分支中。關鍵是你應該小心那面旗幟,而不是你100%不應該使用它。我用過它。公開推動後我重寫了歷史。這樣做時要小心,並理解它會影響其他人。您需要評估在特定情況下是否合適。 – cjc343

+0

啊,我明白了。乾杯。 –

1

經過git checkout master之後,您可以執行git reset --hard origin/master將分支重置爲與遠程主設備相同的狀態。

+0

是的,但我的出身/主人目前在C2,我希望它在上游/主人。這是我的問題。 –

+0

哦,我誤解了這個問題......我會在幾分鐘內刪除這個答案,通過@ cjc343的一個似乎是你想要的 –