2012-10-24 75 views
31

我想知道如何簽署(-s)以前在git中提交的提交?Git簽署以前的提交?

+0

檢查http://schacon.github.com/git/git-commit.html –

+0

可能重複http://stackoverflow.com/questions/1962094/what-is-the-sign-off-feature-in-git-for –

+1

我不知道這是否沒有諷刺意味。通過簽署您或多或少地說「我聲稱以前的承諾是安全的」。但是,如果你已經克隆了他們等,而且你沒有對這些進行真正的檢查,那麼你就說明了你不能檢查的東西。想象一下黑客以某種方式操縱提交。然而,簽署確實可以防止在後期階段篡改提交。但是,也許你應該把這個添加到消息中? –

回答

46

要簽收之前的承諾,使用修改選項:

git的承諾--amend --signoff

6

考慮簽名修改提交消息,使用git filter-branch來實現。

git filter-branch --msg-filter \ 
    "cat - && echo && echo 'Signed-off-by: Dan McGee <[email protected]>'" \ 
    HEAD 

(例如,從 「git filter-branch magic」)

或者,下面Curt J. Sampsonsuggestion,使用git interpret-trailers

git config trailer.sign.key "Signed-off-by" 
git filter-branch --msg-filter \ 
    "cat - && echo && git interpret-trailers --trailer 'sign: 'Signed-off-by: Dan McGee <[email protected]>'" \ 
    HEAD 

警告:這將改變現有的提交的SHA1,您可能不得不強制推送結果,如果您的提交已被其他人共享,那麼結果可能會有問題。

+0

考慮使用'git interpret-trailers'和'git filter-branch --msg-filter',而不是手動添加'Signed-off-by:'或其他預告片。這會讓你避免重複播放預告片。 –

+0

@ CurtJ.Sampson是的!謝謝。我從字面上記錄了這一點:https://stackoverflow.com/a/41361273/6309。 – VonC

+0

@ CurtJ.Sampson我相應地修改了答案。 – VonC

10

試試這個重做舊提交了-S

git filter-branch -f --commit-filter 'git commit-tree -S "[email protected]"' HEAD 

之後,你必須git push -f。但要小心,提交ID將改變,其他人將失去同步。

+1

這將簽署所有提交,對吧?如何僅簽出最後一次X提交? –

+5

@ÁkosVandra如果你仍然在尋找答案:'git filter-branch -f --commit-filter'git commit-tree -S「$ @」'HEAD〜X..HEAD'',其中X是最後一次X提交的數量。例如對於最後2個提交:''git filter-branch -f --commit-filter'git commit-tree -S「$ @」'HEAD〜2..HEAD'' –

1

對我來說,只是對signof進行修改,並沒有真正驗證我在github上的提交。

是對我工作的解決方案是回去,然後簽訂-S

git commit --amend -S 

而且每次提交,如果你檢查你的承諾實際上是簽名,電子郵件/名稱根本就沒有追加,使用此命令

git show HEAD --show-signature 

額外提示:如果您已經修改你的提交,你可能希望在他們自己的真實姓名(請參閱使用git log)。您可能正在使用您的github句柄名稱,這是不需要的。只有正確的電子郵件是必要的,並且在用戶名字段中,您應該使用您的全名,並且github會使用您的github處理名稱正確跟蹤它。因此,要糾正你的用戶名和簽署最後提交使用:通過

git config --global user.name "FULL NAME" 
2

git commit --amend --author="FULL NAME <email>" -S 

,還可以設置全名用戶名在將來我有一個類似的問題。在此,感謝來自的Gentoo Linux羅賓·約翰遜是一招簽名添加到我以前所有的unpushed提交:

$ git pull && git rebase --gpg-sign --force-rebase origin/master && git push --signed 
Already up-to-date. 
Current branch master is up to date, rebase forced. 
First, rewinding head to replay your work on top of it... 
Applying: sci-biology/KING: new package 
Applying: dev-lang/yaggo: version bump, fix install procedure 
Applying: sci-libs/htslib: version bump 
Applying: sci-biology/bcftools: version bump 
Applying: sci-biology/samtools: version bump 
Applying: sci-biology/libBigWig: new release with io.h renamed to bigWigIO.h 
Applying: sci-biology/MaSuRCA: add more URLs to HOMEPAGE 
Applying: sci-biology/SPAdes: update comments on bundled dev-libs/boost 
Applying: sci-biology/khmer: added a comment how to proceed with src_compile() 
Applying: sci-biology/picard: version bump 
Applying: sci-biology/ruffus: pint EGIT_REPO_URI to the archive URL of code.google.com 
Applying: sci-biology/vcftools: the 0.1.15_pre release was just renamed to 0.1.15 by upstream 
Applying: sci-biology/nanopolish: new package 
Applying: sci-biology/libBigWig: version bump 
Counting objects: 75, done. 
Delta compression using up to 2 threads. 
Compressing objects: 100% (75/75), done. 
Writing objects: 100% (75/75), 14.51 KiB | 0 bytes/s, done. 
Total 75 (delta 55), reused 0 (delta 0) 
remote: To github.com:gentoo/sci.git 
remote: 29c5e3f5d..b37457700 master -> master 
To git+ssh://git.gentoo.org/proj/sci.git 
    29c5e3f5d..b37457700 master -> master 
$