[英]How to rebase a branch to master while keeping the original commit history?
[英]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
的當前歷史記錄,可能添加一個還原提交,當然還有從release
到master
的合並。
很感謝任何形式的幫助。
聽起來很像您想從 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.