[英]Reset merge to feature branch
我有feature
分支和develop
分支,我從develop
創建了feature
並進行了更改並創建了拉取請求,但是現在我需要從開發中合並一些其他更改,因為還有其他一些人進行了更改。
所以,我做的步驟:
git checkout develop
git pull
git checkout feature
git merge develop (after solving some conflicts)
git push
第二天,我再次執行上述相同步驟,因為合並了更多提交來開發以保持更新我的分支。
所以,現在我想恢復/重置我的特性分支,而不是那些從開發更改中合並的分支,但是我找不到方法。
我做了git log
和git reflog
來檢查提交,所以我可以
git reset --hard HEAD~>number>
但是,現在我可以看到有很多提交 hash 因為有很多提交合並到開發分支。
我怎樣才能恢復/休息那些git merge develop
所以,我可以在沒有開發合並的情況下進行功能,我稍后再做。
任何幫助將不勝感激
您應該在此命令中以限制為 7 的可讀格式列出最近的提交,以識別您需要返回到 go 的提交。 使用這個命令,
git log --pretty="%C(Yellow)%h %C(reset)%ad (%C(Green)%cr%C(reset))%x09 %C(Cyan)%an: %C(reset)%s" -7
復制提交 ID 並在git reset
,
git reset --hard <commitid>
如果您想讓您的分支與最新的develop
保持同步,您可以像開始那樣定期將develop
合並到您的分支中(但顯然很遺憾),或者您可以定期將您的分支重新定位到最新的develop
上。 兩種策略都產生相同的結尾state ,但 rebase 最終將獲得更清晰的歷史記錄,而無需多次額外的合並提交。 哪種方式最好是爭論的焦點,但是,一般來說,如果你的特性分支還沒有被推送,或者如果它已經被推送但你知道你的倉庫中的特性分支可以被重寫,那么看起來你可能更喜歡變基. 您願意重置分支的事實表明您可以重寫分支,並且您通常更喜歡整體變基。
幸運的是,您還可以使用變基來修復當前情況。 請注意,在以下命令中,我將使用origin/develop
而不是develop
,以便您可以跳過有關保持本地develop
副本保持最新的部分。 如果您開始使用遠程跟蹤develop
分支,您可以簡單地刪除您的本地develop
副本,因為您不再需要它。 (如果您將遙控器稱為origin
以外的名稱,請相應地更改這些命令。)
將您的分支重新定位到最新的develop
# git switch feature
git fetch # update all remote tracking branches, including origin/develop
git rebase origin/develop
請注意,這假設您已經簽出了您的功能分支。 如果不是,您可以先執行此操作,或者您可以通過將分支添加到rebase
命令來節省鍵入幾個鍵: git rebase origin/develop feature
第一次執行此操作時,它應該擺脫所有這些合並提交,但您可能必須再次解決合並沖突。 如果您有許多相互沖突的提交,您可以做的另一件事是考慮先將一個或多個提交壓縮為更少,然后再進行變基。 (請注意,通常使用rebase -i
壓縮提交。)如果您願意將所有更改壓縮到單個提交中,那就更容易了,因為您可以reset --mixed
為開始之前,然后進行新的大提交,其中將包括您的所有更改以及您合並的develop
中的所有更改。之后,將您的更改重新定位到最新的origin/develop
應該會給您留下一個新的(較小的)提交,只有您自己的更改,因為develop
中的那個(大)提交的變化將會失敗。
完成 rebase 后,您可以隨時重復fetch
和rebase
命令,以使用最新版本再次更新您的分支。 (例如,我通常每天至少重新調整我的分支一次或兩次以使其保持最新狀態,如果我正在處理經常被其他人修改的文件,有時會更多。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.