2016-08-04 79 views
1

我知道,如果我想強行從遠程回購覆蓋與文件的本地回購,我這樣做:如何在保留歷史記錄的同時用遠程回購變更強制覆蓋本地回購?

git fetch --all 
git reset --hard origin/master 

這樣做的問題是,當我去看看當地的回購歷史,它完全抹殺了歷史,並用遠程回購歷史的抄本取而代之。

有沒有辦法在強制覆蓋的同時保留歷史記錄?

例如,如果我在本地回購具有以下內容的文件:

- ContentA 
- ContentB 
- ContentC 

而且我有遠程回購相同的文件,內容如下:

- ContentA 
- ContentC 
- ContentD 

從遠程回購之後,我希望歷史記錄顯示此文件:

Version #1 
- ContentA 
- ContentB 
- ContentC 

Version #2 
- ContentA 
- ContentC 
- ContentD 

我不'不想它顯示這個(從強制覆蓋):

Version #1 
- ContentA 
- ContentC 
- ContentD 

我也不想讓它顯示這個(從合併):

Version #1 
- ContentA 
- ContentB 
- ContentC 

Version #2 
- ContentA 
- ContentB 
- ContentC 
- ContentD 

這可能嗎?

+0

你可以看看定義你自己的定製git合併驅動程序。 – DavidN

+0

此外,您的重置 - 難以產生/主要移動您的本地主人的承諾,所以我認爲你只是失去了你的工作。聽起來像你想合併,但以一種特殊的方式。我只是想知道你是否不像其他人那樣使用git,因爲你可以很容易地用git看到這兩個版本。通常人們不想在將文件放在一起時連接文件。他們希望以合併的方式合併它們。 – DavidN

+0

您可以將遙控器重新綁定到本地,或者您可以將遙控器拉到一個單獨的分支,然後重置 - 軟,隱藏和彈出,或櫻桃選擇從遠程單個提交。 –

回答

1

你不能讓遠程爲你做一個合併。你需要做合併,然後你推它到你所擁有的東西,它只是快速地向你提交。所以你需要安排你的提交來解決任何你想要的樣子,然後按下它,然後推送它

你可以用--no-commit選項進行合併,然後用git checkout選擇你想要的文件 - 然後git添加這些文件,最後git commit來結束合併,選擇你想要的文件更改。至於你想要的歷史,那麼你可以編輯實際的提交評論,如果這就是你想要的。

+0

如果你想在整個回購中做同樣的事情,你可以用'--strategy our''或'--strategy theirs'來合併,而不用去承擔無提交合並的麻煩。 – hobbs

+0

我認爲那是-X我們或-X他們,當 - 策略是遞歸的(這是默認策略。 – DavidN