2015-12-10 51 views
-2

如何抹去提交,但保持後續提交完好?Git:刪除一個特定的提交,同時保持以下提交

在這種情況下,假設我想擺脫b但保留c

$ git init 
$ for i in a b c; do date >$i; git add $i; git commit -m add-$i;done 
$ git log 
commit 39c976fa711b38d4c8161af9b6b4a9a91489d079 
add-c 
commit 2913863926f8c3a3898a2763fe4384b6ca7227a0 
add-b 
commit ff591ea43a84069e5effd28125b56243dc264336 
add-a 

reset --hard將擺脫b,也擺脫的c

git reset --hard ff591e 
HEAD is now at ff591ea add-a 

如何在保持add-c提交完好的情況下執行此操作?

+5

這裏:https://stackoverflow.com/questions/37219/how-do-you-remove-a-specific-revision-in-the-git-確切地說,歷史 –

+0

。 'git rebase -i' – houtanb

回答

1

爲了保持一切順利(是提交的sha1),你應該做一個git revert b其中b是b的sha1。這又增加了犯否定說明B

從歷史git rebase -i b^

再次刪除B中的效果,其中B是的SHA1提交

然後刪除該行保存並關閉

我會建議第一種方式,如果有其他人在同一個回購工作

+0

'git revert b'在歷史中留下'b'以供所有人查看。這通常不是「消除」的意思。 – hvd

+0

雖然我不同意歷史記錄,但已更新 – exussum