[英]Git - How to squash selected commits?
我有以下 git 歷史:
X --- X --- X --- X --- X feature_branch
/ /
X --- X --- X --- X develop
正如您在某些時候所看到的,develop 分支已合並到 feature_branch。 現在我想合並 feature_branch 來開發,我想在功能分支歷史中只有兩個提交:
我嘗試使用git rebase -i develop但它沒有顯示合並開發到功能分支提交。
怎么做 ?
Edit1在git rebase -i HEAD~6 之后(6 因為在功能分支提交 3 之后合並是一個單獨的提交,它在上圖中稍微簡化了一點)我有這樣的事情:
pick 1efad76 feature commit1
pick bae14d6 feature commit2
pick 3de7c48 feature commit3
pick 01dbb6a develop commit3
pick 674b2aa develop commit4
pick db5d9be feature commit4
pick 9cbe436 feature commit5
合並提交可見為兩個開發提交 - 開發 commit3 和開發 commit4。 如何放“s”來實現我的目標? 我應該以某種方式重新排序這些提交嗎?
您應該能夠通過執行以下操作來達到預期的結果:
git rebase -i HEAD~5
根據需要換出 5 個提交
從那里,您將能夠進行fixup
,這將壓縮提交,並丟棄提交的日志消息。
慢慢來,確保你閱讀了 git 告訴你的內容,如果你犯了一個錯誤 - git reflog
已經涵蓋了你 - 你可以reset
到歷史中的任何一點並使用reflog
撤消許多事情 - 它讓我出局之前的許多泡菜! 更多信息在這里
一旦您完成了交互式 rebase,並且您已經獲得了您想要的提交歷史記錄,如果您完成了該功能,您可以繼續進行快速合並開發(見下文) -或繼續您的功能,直到准備就緒。
git checkout develop
git fetch
git pull
git merge --ff-only feature_branch
pull
將自動執行fetch
,但我個人偏好在pull
之前查看正在更新的內容。
注意:如果你提交了一個 pull-request,那么它會為你做一些這樣的事情,或者如果它不能,就會警告你並告訴你該怎么做 ;)
如果您正在繼續您的功能,並且develop
經常更新,那么最好讓您的功能與開發保持同步。
你可以做一個git rebase origin/develop
或只是develop
- 但同樣,我的偏好是與origin
- 我將首先fetch
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.