簡體   English   中英

將 master 分支重置為初始提交但保留以前的歷史記錄

[英]Resetting master branch to initial commit but keeping previous history

我有一個release分支,由於在過去 9 個月左右的時間里對代碼進行了完整的重新工作,它已經從master分支顯着轉移。

因為release與 master 有很大的不同,所以在創建 PR 到master時會有很多沖突。 master的當前內容現在基本上無關緊要,因為我已經在release分支上工作了很長時間。 我想將master重置為初始提交(這只是使用.gitignore文件進行 repo 初始化),同時保持相同的歷史記錄(除了額外的恢復提交)。

我在從master獲取的master-backup分支上嘗試了以下操作,然后在運行命令后嘗試將發布分支 PR 到這個master-backup分支:

git reset --hard <initial commit id> - 這將重置歷史記錄

git revert <INITIAL COMMIT ID>^..<LATEST COMMIT ID> - 這有相同的沖突,並沒有完全正確地將所有文件從 release 推送到 master。

我不知道現在還能做什么。 我的最終目標是用release替換master的內容,同時保持master的當前歷史記錄,可能添加一個還原提交,當然還有從releasemaster的合並。

很感謝任何形式的幫助。

聽起來很像您想從 master 運行git merge --no-ff release ,假設 master 自發布開始以來沒有移動。 然后你可以在 master 之后的一次提交中獲得 release 的內容(以及一個帶有所有 release 開發的分支。

如果您想要的是在 master 之后進行一次提交,其中包含所有 release 的更改,而忽略了 release 如何變成它的樣子的細節,這就是您要做的:

git checkout --detach release
git reset --soft master
git commit -m "All of release in a single commit"
# If you like the result:
git branch -f master
git checkout master

如果主機和釋放有分歧,你想迫使主與釋放之間的合並,並保持釋放的內容是完整的,那么你可以做這樣的:

git commit-tree -p master -p release -m "Merge of release.... keeping release as is" release^{tree}

這將在輸出中寫入一個 ID。 這是已創建的新修訂。 它將是 master 和 release 的合並,內容將與 release 一樣,沒有區別。 所以,請隨意檢查一下,如果你喜歡結果:

# once you have already checked out the new revision
git branch -f master
git checkout master

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM