2017-07-25 98 views
0

我有一個git項目和穩定版本總是存儲在主分支。 有一段時間我在2.0版本的單獨分支v20中工作。git複製分支內容到主

現在我決定釋放它並再次將所有內容複製到master分支。 我不想合併它,因爲有數百個衝突的更改,並且很多文件需要手動干預。

所有我只想做一個v20分支的快照,並把它放在master而不影響舊的歷史,沒有rebase(所以其他用戶也不會受到影響)。只是爲了讓它看起來像是一個新的提交,它帶來了所有的變化。

開始狀態:

master branch --------- v20 branch 
     |      | 
master files --------- v20 files 
     |      | 
master_history   v20_history 

目標狀態:

master branch --------- v20 branch 
     |      | 
    v20 files -------- v20 files 
     |      | 
master_history   v20_history 
+ commit from v20 

有一個現有的git的方式做到這一點?

+0

@DaveNewton你的意思是'-s遞歸-X他們'?它不這樣工作。它仍然留下很多未解決的衝突,需要人工干預。這不是一個副本。我需要我的分支的狀態,但在主人。 – rush

+3

怎麼樣(當你在v20)'merge -s我們的主人'(而不是'-s遞歸-X我們'),然後,合併v20到主? – mayo

回答

3

您正在描述結果git merge -s theirswhich does not exist, and one of the main Git authors insists that it should not exist:。從這個鏈接引用(這些都不是我的話):

嘿,現在你有一些讀數做;-)

我試着不讓自己聲音太消極描述-Xours-Xtheirs 在那裏,但實際上我認爲「他們的」更糟。這是你 怎麼會丟棄你做了什麼(也許是因爲對方比你的黑客好得多 的解決方案),但可以更容易和更清潔 做有:

$ git reset --hard origin 

也許有人會說「但是,'合併'他們',我可以保持我所做的, 太」。重置只是放棄我所做的。

該邏輯也是有缺陷的。您可以改爲:

$ git branch i-was-stupid 
$ git reset --hard origin 

,如果你真的想保持你的不良記錄。

與上述「重置原產地, 丟棄或擱置失敗的歷史記錄」相比,一個大問題是「您的進一步開發所依據的歷史記錄」將保留您的如果你做了「 - 他們的」,那麼它就會永遠不成功。希望隨着時間的推移,你將成爲一個更好的程序員,並且你最終可能會在你的主分支的尖端附近與世界共享價值 。但是,當 發生時,您的不能提供您的主分支被上游拉動 ,因爲更廣泛的世界將不會對您之前的 錯誤感興趣。

您可以隨時與Git的人不同意去並使用一些答案來Is there a "theirs" version of "git merge -s ours"?注意,接受的答案是不是真正的-s theirs可言。Michael R's answer,使用git read-tree--no-commit合併期間切換索引是正確的。

該方法在mayo's comment也不錯,而jthill's answer到另一個SO問題也是正確的。

你的情況與上面描述的有所不同,但實際上,你可以重命名「壞」分支並將「好」分支重命名爲master,然後從那裏繼續。任何來自你的「下游」都需要重新命名,因此需要考慮多個要點。