我在我的項目中添加了一些功能,其中4個git提交,現在業務正在要求不再需要該功能(超過一個月後)。所以我需要從我的repo中刪除那些特定的git commit(s),在此之後,它有27個更多的提交。刪除兩次提交之間的git提交
6
A
回答
1
因爲你正在處理一個已發佈的分支,而這個分支可能被別人使用,我建議你還原這兩個提交使用git revert
。從問題分支中鍵入:
git log
並找到兩個提交問題的SHA-1哈希值。然後,使用還原它們:
git revert abcd1234..foobar12
其中abcd1234
是兩次提交的第一個(最早)的哈希值,並且foobar12
是最近的兩次提交的。
使用git revert
將添加提交,它可以有效地撤消分支中隱藏的兩個提交。這種方法的替代方法是使用rebase或filter分支。但這兩種方法都涉及重寫分支的歷史。這可能會導致使用你的分支的任何其他人頭痛,因爲他們將不能再拉或推。
2
有四種方法可以這樣做:
清潔的方式,恢復但請登錄該還原:
git revert --strategy resolve <commit>
惡劣的方式,完全刪除只有最後提交:
git reset --soft "HEAD^"
Rebase(顯示最近5次提交的日誌並刪除行你不想要的,或者重新排序,或者在一個壁球多次提交,或做任何你想要的東西,這是一個非常通用的工具):
git rebase -i HEAD~5
如果一個錯誤是完成:
git rebase --abort
快速變基:僅刪除特定提交使用ID:
git rebase --onto commit-id^ commit-id
- 所
替代:你也可以嘗試:
git cherry-pick commit-id
另一種替代方案:
git revert --no-commit
作爲最後的手段,如果你需要編輯歷史(例如充分的自由,因爲git的不允許你編輯你想要的),你可以使用這個very fast開源應用程序:reposurgeon。
注:當然,所有這些變化都在本地完成,你應該git push
事後更改應用到遠程。如果您的repo不想刪除提交(「不允許快進」,這是在您要刪除已推送的提交時發生的),則可以使用git push -f
強制推送更改。注2:如果在分支上工作,並且需要強制推送,則應該絕對避免git push --force
,因爲這可能會覆蓋其他分支(如果您已對其中的分支進行了更改,即使當前的分支位於另一個分支上)。當您強制推送:git push --force origin your_branch
時,請選擇始終指定遠程分支。
相關問題
- 1. git:刪除第二次提交
- 2. Git刪除根提交
- 3. 刪除使用Git提交
- 4. git revert刪除提交
- 5. git非交互式地刪除提交
- 6. Git - 如何返回上次提交併刪除所有未提交的文件?
- 7. GIT拉刪除了我的提交
- 8. git的變基刪除提交
- 9. 如何刪除Git中的舊提交?
- 10. Git - 刪除大文件的提交
- 11. 的Git - DIFF在老枝之間提交
- 12. 的Git包含任意之間提交
- 13. 如何獲取版本樹中兩次提交之間的所有提交?
- 14. Git在第一次提交時刪除分支時在遠程分支上提交提交
- 15. 從git中刪除大型提交
- 16. 刪除所有Git提交記錄
- 17. 刪除git遠程分支提交
- 18. Git分支刪除[AWS代碼提交]
- 19. 我如何只提交Git刪除?
- 20. 在git push force後刪除提交
- 21. GIT:恢復上次提交?
- 22. Git撤消上次提交
- 23. 刪除提交人
- 24. 在git提交之間插入宏
- 25. Git說我提前2次提交
- 26. git:兩個非常類似的提交之間的區別?
- 27. 刪除上次提交併推送
- 28. 獲得之前在git存儲庫上被刪除的提交
- 29. 如何顯示之前刪除多個提交的git文件
- 30. WebStorm和Git:如何找到兩個提交之間的差異?
大多數這些方法不會工作,因爲OP有埋在分支內的提交。不應該爲共享的公共分支建議重寫分支的歷史 –