Git은 이제 커밋에 서명 할 수있는 기능을 가지고 git commit -S
있지만 때로는 플래그를 잊어 버리고 commit
때로는 자신에게 적용하는 패치를 메일로 보내며 am
해당 명령에는 서명 플래그가 없습니다.
이미 기록 된 커밋에 서명을 추가하는 방법이 있습니까?
Git은 이제 커밋에 서명 할 수있는 기능을 가지고 git commit -S
있지만 때로는 플래그를 잊어 버리고 commit
때로는 자신에게 적용하는 패치를 메일로 보내며 am
해당 명령에는 서명 플래그가 없습니다.
이미 기록 된 커밋에 서명을 추가하는 방법이 있습니까?
답변:
서명하려는 커밋마다 다음 줄을 추가하십시오.
exec git commit --amend --no-edit -S
각 커밋을 선택한 후이 명령을 실행합니다.
더 쉬운 방법은 다음과 같습니다.
git rebase --exec 'git commit --amend --no-edit -n -S' -i development
이것은 개발 (또는 해시)까지 모든 것을 리베이스하고 모든 커밋 후에 붙여 넣기 할 필요가 없습니다.
resign = "!re() { git rebase --exec 'git commit --amend --no-edit -n -S' -i $1; }; re"
됩니다git resign HASH
git commit --amend --no-edit -n -S
.
git push --force
않습니까?
사용하고 git rebase -i --root
( 기록 다시 작성 참조 )로 변경 pick
하십시오 edit
.
그런 다음 각 커밋마다 git commit -S --amend --no-edit && git rebase --continue
(Windows에서) 사용 합니다.
이것은 커밋마다 수동으로 서명됩니다. 더 나은 해결책을 찾길 바랍니다.
특정 커밋 만 필터링하고 서명 만하려면 다음을 사용할 수 있습니다 filter-branch
.
git filter-branch --commit-filter 'if [ "$GIT_COMMITTER_EMAIL" = "user@domain.com" ];
then git commit-tree -S "$@";
else git commit-tree "$@";
fi' HEAD
어떤 이유로 든 커밋에만 서명하려는 경우에 유용합니다.
현재 브랜치에서 특정 커밋 이후 모든 커밋을 GPG 서명 해야하는 경우 대신 다음을 사용할 수 있습니다.
git filter-branch --commit-filter 'git commit-tree -S "$@";' <COMMIT>..HEAD
<COMMIT>
커밋 ID는 어디에 있습니까 (예 :) abc123e5
.
커밋 메타 데이터 (커밋 날짜 포함)를 방해하지 않는다는 추가 이점이 있습니다.
모든 커밋에서 GPG 암호 문구를 묻는 메시지를 표시하지 않으려면 https://askubuntu.com/a/805550 도 참조하십시오.
참고 : GIT 서명 gpg
을 gpg2
위해로 전환 하려면 GPG 2에서 개인 키를 다시 가져와야합니다.
git config commit.gpgsign true
.