2012-10-24 34 views
31

Tôi đã tự hỏi làm thế nào để ký (-s) tắt cam kết trước đó mà tôi đã thực hiện trong quá khứ trong git?Git ký tắt cam kết trước đó?

+0

séc http://schacon.github.com/git/git-commit.html –

+0

thể trùng lặp của http://stackoverflow.com/questions/1962094/what-is-the-sign-off-feature-in-git-for –

+1

Tôi tự hỏi nếu nó không phải là mỉa mai không an toàn để làm điều này. Bằng cách ký bạn nhiều hơn hoặc ít hơn nói "Tôi yêu cầu các cam kết trước đó là an toàn".Nhưng nếu bạn đã nhân bản chúng, vv, và bạn không thực hiện một kiểm tra thực tế trên các, bạn do đó nhà nước một cái gì đó bạn không thể kiểm tra. Hãy tưởng tượng một hacker bằng cách nào đó thao tác một cam kết. Tuy nhiên, việc ký kết thực sự ngăn không cho người khác can thiệp vào cam kết trong giai đoạn sau. Nhưng có lẽ bạn nên thêm điều này vào tin nhắn? –

Trả lời

46

Để signoff cam kết trước đó, sử dụng sửa đổi tùy chọn:

git commit --amend --signoff

6

Xem xét các lần đăng xuất sửa đổi thông báo cam kết, sử dụng git filter-branch để đạt được điều đó.

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

(ví dụ từ "git filter-branch magic")

Hoặc, sau Curt J. Sampson 's suggestion, sử dụng 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 

caveat: điều này sẽ thay đổi SHA1 các cam kết hiện tại của bạn, và bạn có thể buộc phải đẩy kết quả, điều này có thể có vấn đề nếu các cam kết của bạn đã được những người khác chia sẻ.

+0

Cân nhắc sử dụng 'git interpreted-trailers' với' git filter-branch --msg-filter' thay vì thêm 'Signed-off-by:' hoặc trailers khác bằng tay. Điều này sẽ cho phép bạn, ví dụ: tránh sao chép đoạn giới thiệu. –

+0

@ CurtJ.Sampson Yes! Cảm ơn bạn. Tôi đã ghi lại tài liệu đó ngày hôm qua: https://stackoverflow.com/a/41361273/6309. – VonC

+0

@ CurtJ.Sampson Tôi đã sửa đổi câu trả lời cho phù hợp. – VonC

10

Hãy thử này để làm lại cam kết cũ với một -S:

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

Sau đó, bạn phải git push -f. Nhưng hãy cẩn thận, các id cam kết sẽ thay đổi và những người khác sẽ không đồng bộ.

+1

Điều này sẽ ký tắt TẤT CẢ các cam kết, phải không? Làm cách nào để tôi chỉ đăng xuất các lần commit X cuối cùng? –

+5

@ ÁkosVandra nếu bạn vẫn đang tìm kiếm câu trả lời: '' git filter-branch -f --commit-filter 'git commit-tree -S "$ @"' HEAD ~ X..HEAD'', trong đó X là số lần commit X cuối cùng. ví dụ. cho 2 lần commit cuối cùng: '' git filter-branch -f --commit-filter 'git commit-tree -S "$ @"' HEAD ~ 2..HEAD'' –

1

Đối với tôi chỉ là dấu hiệu ghi đè, đã không thực sự xác minh cam kết của tôi trên github.

Giải pháp đó là làm việc đối với tôi là sẽ trở lại, và sau đó ký vào từng tờ cam kết với -S

git commit --amend -S 

Ngoài ra nếu bạn kiểm tra xem bạn cam kết thực sự là ký và email/tên của bạn chỉ đơn giản là không nối, sử dụng lệnh này

git show HEAD --show-signature 

Mẹo bổ sung: Nếu bạn đã sửa đổi cam kết của bạn, bạn có thể muốn tên thật của bạn trong họ (xem sử dụng git log). Bạn có thể đang sử dụng tên xử lý github của bạn, điều này không cần thiết. Chỉ email chính xác là cần thiết và trong trường tên người dùng, bạn nên sử dụng tên đầy đủ của bạn và github sẽ theo dõi nó chính xác với tên xử lý github của bạn. Vì vậy, để sửa tên người dùng của bạn và đăng cuối cùng cam kết sử dụng:

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

và cũng đặt tên đầy đủ tên người dùng trong tương lai bằng cách

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

Tôi đã có một vấn đề tương tự. Ở đây, nhờ Robin Johnson từ Gentoo Linux là một thủ thuật để thêm chữ ký cho tất cả các cam kết unpushed trước đây của tôi:

$ 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 
$ 
Các vấn đề liên quan