2016-11-28 39 views
2

我有這種情況下,如果我比較我的主分支到我的開發分支Bitbucket上它不顯示任何更改,但如果我比較我的開發分支到我的主分支它顯示更改。開發分支有正確的代碼庫(主是錯誤的),但GIT沒有檢測到合併到主的變化。這是怎麼回事?Bitbucket分支比較是隻可見的單向

編輯:我能夠通過使用

git rebase -s theirs dev 

基礎重建它在開發讓主人搶正確的代碼庫,然後力推主,但它消滅了一堆我的分支的歷史。有一個更好的方法嗎?

回答

0

如果master包括「錯誤」的代碼,你可以用dev與內容替換爲:

git checkout dev 
git merge -s ours master # ignore master content, but record the merge 
git checkout master 
git merge dev   # fast-forward master HEAD to dev HEAD 

然後一個簡單的推就足夠了,沒有必要強迫。

+0

這樣做後,主分支的技巧功能正常,但有一些提交後,我在dev中刪除,這樣做後,再次出現在master中。在這些提交中,我刪除了一個我不想刪除的文件。如果我看看Bitbucket的差異,我刪除它的提交,它顯示文件被刪除,但稍後它會在repo中再次出現,而不會顯示它被添加的差異,就像它從未消失一樣。 – GameKyuubi

+0

只需添加或刪除正確的文件即可進行新的提交,然後從此處繼續前進。 – VonC

0

如果比較主設備(更改源)到dev(更改目標),則沒有更改。並且將開發人員與主人比較,會發現變化。這意味着Dev分支是比主分支新,結構主要是這樣的:

 A---B---C dev 
    /  
D---E master 

您可以使用git checkout mastergit merge dev,它將快進主分支至C,並沒有創造新的提交ID。該結構是這樣的:

D---E---A---B---C master, dev 

如果比較正本(改變目的地)到DEV(變化源),沒有任何變化。並且將開發人員與主人比較,會發現變化。這意味着主分支比Dev分支更新,結構主要是這樣的:

 A---B---C master 
    /  
D---E dev 

所以你可以使用git checkout mastergit cherry-pick <latest commit id for dev branch>來更新主分支。

+0

在master分支上git merge dev讓我「一切都是最新的」。 – GameKyuubi

+0

做你的master和dev分支的git結構如圖所示,還是相反? –

+0

如果相反(master分支比dev分支更新),那麼應該使用'git checkout master'和'git cherry-pick 上的'最新提交ID'代替。 –