我在使用 git 合并時遇到問題。我有 2 個分支,開發和功能。我做了什么:
- 我錯誤地將功能合并到開發中,所以我取消了它( git revert -m 1 )
- 我將開發合并到功能中,但它洗掉了我的功能分支中的所有代碼更改,所以我取消了合并的( git revert -m 1 )
- 我嘗試創建另一個從開發到功能的合并,它沒有顯示任何變化。
現在,我如何將開發與開發中的所有代碼合并到我的功能分支中而不丟失功能中的代碼?
uj5u.com熱心網友回復:
我想現在你明白了,在恢復合并后你不能再次合并相同的提交 ID,因為這些提交 ID 已經在歷史記錄中。為了再次合并它們,您需要為它們提供新的提交 ID。
通常,如果您在共享分支上弄亂了某些東西,例如develop,那么除非您立即捕獲它,否則重置它并可以在其他人開始使用它或合并其他東西之前強制推出修復程式,然后像您一樣恢復,可能是那里最好的行動方案。
但是,對于您自己的功能分支,通常您不需要還原,因為您可以隨心所欲地重寫自己的分支,而不會影響其他任何人。如果您可以重寫您的分支,那么與其合并最新的分支,develop不如將您自己的分支重新定位到最新的develop. 如果您還沒有將您的分支合并到develop您通常可以在您的分支已經簽出的情況下執行此操作:
git fetch
git rebase origin/develop
您可以隨時這樣做。(我可能每天在活躍的回購中至少做幾次。)
在您當前的情況下,您將無法這樣做,因為您分支上的提交 ID 已經在develop. 所以這是第一次,你需要這樣做(你的分支已經簽出):
git fetch
git reset --hard <commit-before-merge-of-develop>
# Now use a fancy rebase to rewrite your branch on top of develop
git rebase --onto origin/develop <original-commit-from-develop>
請注意,它<commit-before-merge-of-develop>表示您合并之前分支上的提交 ID develop,并<original-commit-from-develop>表示您的分支的原始合并基礎,在您意外develop合并之前。develop換句話說,這是您分支上第一個新提交的父級。“花式”變基將重寫您分支上的所有新develop提交 ID,以便您可以在準備好時再次將它們合并。
uj5u.com熱心網友回復:
首先,回到你合并特性分支之前的開發提交。然后,將其強制推送到托管存盤庫:
# check out the (local) develop branch first
git checkout develop
# go back the commit you want to end up in there
git reset --hard abc123def456
# push it to the remote
git push --force-with-lease origin HEAD:develop
現在,您仍然擁有混亂的功能分支。為此,您有效地做同樣的事情。請注意,如果您沒有遠程分支,則省略最后一步。
也就是說,如果您認為您在某處遺漏了一些提交,請查看git reflog. 從那里,您可以重新跟蹤您對 repo 所做的大多數更改。如果您發現那里缺少一個提交,您可以git cherry-pick將它放入您想要的任何分支。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/466861.html
下一篇:恢復永久洗掉的檔案夾-git專案
