code

Git이 이전 커밋을 승인 하시겠습니까?

codestyles 2021. 1. 6. 08:22
반응형

Git이 이전 커밋을 승인 하시겠습니까?


-s이전에 git에서 만든 이전 커밋 에 서명 ( ) 하는 방법이 궁금합니다 .


이전 커밋을 사인 오프하려면 amend 옵션을 사용합니다.

git commit --amend --signoff

편집 : 수정은 최신 커밋 만 사인 오프합니다. 사인 오프 여러 커밋에, filter-branch그리고 interpret-trailers로는 제안 vonc 등. al. 사용되어야한다. 여기에 저에게 효과적이었습니다.

먼저 토큰 signSigned-off-by. 이 작업은 한 번만 수행해야하며 다음 단계에서 필요합니다.

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

git filter-branch스위치 --msg-filter있는 명령 은 각 커밋에 대해 한 번씩 필터를 평가합니다. 필터는 stdin에서 커밋 메시지를 수신하고 stdout에서 출력하는 모든 쉘 명령 일 수 있습니다. 고유 한 필터를 작성하거나 git interpret-trailersindepotent 인을 사용할 수 있습니다 . 다음은 현재 사용자와 이메일을 사용하여 현재 분기의 최근 두 커밋을 사인 오프하는 예입니다.

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

참고 1) 커밋 메시지를 수정하면 커밋 ID가 변경됩니다. 즉, 이미 게시 된 브랜치에 대한 푸시는 --force-with-lease--force 또는 더 나은 방법 으로 강제해야 함을 의미합니다 .

참고 2) 사용자 정의 스크립트를 작성하려는 경우 git filter-branch현재 디렉토리를 <repo>/.git-rewrite/t. 스크립트에 대한 상대 경로를 사용하는 것은 일반적으로 작동하지 않습니다. 대신 스크립트가 사용자에 $PATH있거나 절대 경로로 제공 되어야합니다 .


다음을 사용하여 이전 커밋을 다시 실행하십시오 -S.

git filter-branch -f --commit-filter 'git commit-tree -S "$@"' HEAD

그 후에 git push -f. 그러나 조심하십시오. 커밋 ID가 변경되고 다른 사람들이 동기화되지 않습니다.


사인 오프를 고려하여 커밋 메시지를 수정하고 git filter-branch이를 달성하기 위해 사용합니다.

git filter-branch --msg-filter \
    "cat - && echo && echo 'Signed-off-by: Dan McGee <email@example.com>'" \
    HEAD

( " git filter-branchmagic "의 )

또는 Curt J. Sampson제안에 따라 다음 을 사용합니다 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@example.com>'" \
    HEAD

주의 사항 : 이것은 기존 커밋의 SHA1을 변경하고 결과를 강제로 푸시해야 할 수 있습니다. 커밋을 이미 다른 사람이 공유 한 경우 문제가 될 수 있습니다.

vorburger주석 에 예제를 추가합니다 .

git 버전 2.20.1을 사용하여 Signed-off-by에서 " " 를 생략 --trailer 'sign:하고 다음과 같이 수행해야합니다.

git filter-branch --msg-filter \
  "cat - && echo && git interpret-trailers --trailer 'sign: Michael Vorburger <vorburger@redhat.com>'" \
  HEAD

나를 위해 단지 서명을 수정했지만 실제로 github에서 내 커밋을 확인하지 않았습니다.

나를 위해 일한 솔루션은 돌아가서 각 커밋에 서명하는 것입니다. -S

git commit --amend -S

또한 커밋이 실제로 서명되었는지 확인하고 이메일 / 이름이 단순히 추가되지 않은 경우이 명령을 사용하십시오.

git show HEAD --show-signature

추가 팁 : 이미 커밋을 수정하고 있다면 실제 이름을 원할 수 있습니다 (사용 참조 git log). 필요하지 않은 github 핸들 이름을 사용하고있을 수 있습니다. 올바른 이메일 만 필요하며 사용자 이름 필드에는 전체 이름을 사용해야하며 github는 github 핸들 이름으로 올바르게 추적합니다. 따라서 사용자 이름을 수정하고 마지막 커밋에 서명하려면 다음을 사용하십시오.

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

또한 나중에 사용자 이름에 대한 전체 이름을 설정합니다.

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

비슷한 문제가있었습니다. Gentoo Linux의 Robin Johnson 덕분에 이전의 모든 푸시되지 않은 커밋에 서명을 추가 할 수 있습니다.

$ 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
$

참조 URL : https://stackoverflow.com/questions/13043357/git-sign-off-previous-commits

반응형