[英]I need to put my most recent 10 commits on a separate branch. Then I want to work off the commit directly before these 10 on master
[英]I need to pop up and trash away a “middle” commit in my master branch. How can I do it?
例如,在下面的主分支中,我需要刪除提交af5c7bf16e6f04321f966b4231371b21475bc4da,這是由於之前的rebase導致的第二個:
commit 60b413512e616997c8b929012cf9ca56bf5c9113
Author: Luca G. Soave <luca.soave@gmail.com>
Date: Tue Apr 12 23:50:15 2011 +0200
add generic config/initializers/omniauth.example.rb
commit af5c7bf16e6f04321f966b4231371b21475bc4da
Author: Luca G. Soave <luca.soave@gmail.com>
Date: Fri Apr 22 00:15:50 2011 +0200
show github user info if logged
commit e6523efada4d75084e81971c4dc2aec621d45530
Author: Luca G. Soave <luca.soave@gmail.com>
Date: Fri Apr 22 17:20:48 2011 +0200
add multiple .container at blueprint layout
commit 414ceffc40ea4ac36ca68e6dd0a9ee97e73dee22
Author: Luca G. Soave <luca.soave@gmail.com>
Date: Thu Apr 21 19:55:57 2011 +0200
add %h1 Fantastic Logo + .right for 'Sign in with Github'
我需要保持健康
“扔掉”只是第二次提交af5c7bf16e6f04321f966b4231371b21475bc4da
我怎樣才能做到這一點? 在此先感謝Luca
Rebase或revert是選項。 Rebase實際上會從歷史記錄中刪除提交,因此看起來第二次提交從未存在過。 如果您將主分支推送到任何其他存儲庫,這將是一個問題。 如果在這種情況下嘗試推送一個rebase,git會給你一個拒絕非快進合並錯誤。
當分支與其他repos共享時,Revert是正確的解決方案。 git revert af5c7bf16
將進行一個新的提交,簡單地反轉af5c7bf16引入的更改。 這種方式歷史不會被重寫,你保持清楚的錯誤記錄,其他的回購將接受推動。
這是一個很好的擦除方法: git rebase -i <commit>^
這會將您帶到要刪除的提交之前的提交。 交互式編輯器將顯示返回該點的所有提交的列表。 您可以選擇,壓縮等。在這種情況下, 刪除要刪除的提交行並保存文件。 Rebase將完成其工作。
如果rebase是一個選項,你可以改變並刪除它:
$ git rebase -i 414ceffc^
如果不能選擇rebase,你可以恢復它:
$ git revert af5c7bf16
盡管這里收到了原始答案的所有功勞,但我並沒有發現它們能夠令人滿意地回答這個問題。 如果您發現自己處於需要從歷史中間刪除提交或提交集合的情況,我建議這樣做:
這里有關於Cherry Picking的信息: 使用git意味着采摘櫻桃是什么意思?
這里有一些用Tortoise Git做的(正如我剛才所做的那樣)。 在這些操作中使用gui實用程序肯定更容易! Cherry挑選使用TortoiseGit
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.