Git sign off previous commits?

后端 未结 8 539
没有蜡笔的小新
没有蜡笔的小新 2020-12-12 11:24

I was wondering how to sign(-s) off previous commits that I have made in the past in git?

8条回答
  •  失恋的感觉
    2020-12-12 11:49

    To signoff the previous commit, use amend option:

    git commit --amend --signoff
    

    Edit: the amend does signoff only the latest commit. To signoff multiple commits, filter-branch and interpret-trailers as suggested by vonc et. al. should be used. Here is what worked for me.

    First, configure git to replace the token sign by Signed-off-by. This has to be done only once and is needed in the next step.

    git config trailer.sign.key "Signed-off-by"
    

    The command git filter-branch with the switch --msg-filter will eval the filter once for each commit. The filter can be any shell command that receives the commit message on stdin and outputs on stdout. You can write your own filter, or use git interpret-trailers, which is indepotent. Here is an example that will signoff the latest two commits of the current branch using the current user and email:

    export SIGNOFF="sign: $(git config --get user.name) <$(git config --get user.email)>"
    git filter-branch -f --msg-filter \
        "git interpret-trailers --trailer \"$SIGNOFF\"" \
         HEAD~2..HEAD
    

    Note 1) Modifying commit messages change the commit id, which means pushing over already published branches will have to be forced either with --force or better --force-with-lease.

    Note 2) if you intend to write your custom script, beware that git filter-branch changes the current directory to /.git-rewrite/t. Using a relative path to the script won't usually work. Instead, the script should be in your $PATH or provided as an absolute path.

提交回复
热议问题