2010-09-11 107 views
3

重寫Git存儲庫的歷史記錄時,如何刪除簽出(由git commit -sgit commit --signoff創建)?重寫Git歷史記錄:如何刪除簽名?

git filter-branchcommit-filter似乎只支持git commit-tree使用的變量:

GIT_AUTHOR_NAME 
GIT_AUTHOR_EMAIL 
GIT_AUTHOR_DATE 
GIT_COMMITTER_NAME 
GIT_COMMITTER_EMAIL 
GIT_COMMITTER_DATE 
EMAIL 

回答

10

註冊取捨只是在郵件正文的一部分。因此,您需要使用git filter-branch --msg-filter運行命令以查找以Signed-off-by:開頭的行並將其刪除。

喜歡的東西

git filter-branch --msg-filter "sed /^Signed-off-by:/d" 

應該做的伎倆。

+0

謝謝!這可能是刪除特定人員或電子郵件地址的所有簽名或所有簽名的最佳方式。但是,您的特定示例不會在包含「Signed-off-by:」的行之前和之後刪除換行符。我對sed不太熟悉,因爲它沒有很好的文檔記錄而臭名昭着,我只是在這裏注意完整性。 – Mantrum 2010-09-11 18:36:17

+1

@Mantrum是的,這只是刪除簽收線本身。如果您想要在簽出之前刪除多餘的空白行,您必須做一些更復雜的事情;你會想要檢查消息下面是否有其他的尾行(我通常有'Bug:'行來指出它修復了哪個錯誤,有時候'Paired-with:'或者'Review-by'來表示結對編程和代碼審查)。通常在StackOverflow中,答案會指向正確的方向,但您可能需要根據您的確切需要填寫一些細節。 – 2010-09-11 21:24:32

1

要刪除特定人員/電子郵件地址的所有簽名或所有簽名,請參閱Brian的回答。

基於布賴恩提供的信息(即簽收是提交信息的一部分),很容易弄清楚如何刪除或更改個人簽收:git rebase -i

運行的互動變基( )在具有簽名的提交的父級上,在彈出的編輯器中找到提交,並用reword替換pick。在接下來顯示的編輯器中,根據自己的喜好調整提交的消息。

+0

啊,是的。如果你只是想刪除特定版本或幾個版本的簽名,那麼'git rebase -i'就是你想要的。 – 2010-09-11 21:25:25