2016-11-13 132 views
6

我在我的項目中添加了一些功能,其中4個git提交,現在業務正在要求不再需要該功能(超過一個月後)。所以我需要從我的repo中刪除那些特定的git commit(s),在此之後,它有27個更多的提交。刪除兩次提交之間的git提交

回答

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時,請選擇始終指定遠程分支。

+0

大多數這些方法不會工作,因爲OP有埋在分支內的提交。不應該爲共享的公共分支建議重寫分支的歷史 –