簡體   English   中英

重置合並到功能分支

[英]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 loggit 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 后,您可以隨時重復fetchrebase命令,以使用最新版本再次更新您的分支。 (例如,我通常每天至少重新調整我的分支一次或兩次以使其保持最新狀態,如果我正在處理經常被其他人修改的文件,有時會更多。)

暫無
暫無

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

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