Подтвердить что ты не робот

Git вывести предыдущие коммиты?

Мне было интересно, как подписать (-s) предыдущие коммиты, которые я сделал в прошлом в git?

4b9b3361

Ответ 1

Чтобы подписать предыдущий коммит, используйте опцию Изменить:

git commit --amend --signoff

Изменение: поправка подписывает только последний коммит. Чтобы подписать несколько коммитов, filter-branch и interpret-trailers как предложено vonc et. и др. должен быть использован. Вот что сработало для меня.

Сначала сконфигурируйте git для замены sign токена на Signed-off-by. Это должно быть сделано только один раз и необходимо на следующем шаге.

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

Команда git filter-branch с ключом --msg-filter фильтр один раз для каждого коммита. Фильтром может быть любая команда оболочки, которая получает сообщение коммита на stdin и выводит на stdout. Вы можете написать свой собственный фильтр или использовать git interpret-trailers, который не имеет смысла. Вот пример, который будет подписывать последние два коммита текущей ветки, используя текущего пользователя и адрес электронной почты:

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) Изменение сообщений фиксации приводит к изменению идентификатора фиксации, что означает, что пересылка по уже опубликованным ветвям должна быть принудительной либо с --force либо с более совершенным --force -with-lease.

Примечание 2) если вы намереваетесь написать свой собственный скрипт, помните, что git filter-branch меняет текущий каталог на <repo>/.git-rewrite/t. Использование относительного пути к сценарию обычно не работает. Вместо этого скрипт должен находиться в вашем $PATH или указываться как абсолютный путь.

Ответ 2

Попробуйте это, чтобы переделать старые коммиты с помощью -S:

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

После этого вам нужно git push -f. Но будьте осторожны, идентификаторы commit будут меняться, а другие люди перестанут синхронизироваться.

Ответ 3

Принимая во внимание, что изменения изменяют сообщение коммита, для этого используется 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. 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 protected]>'" \
    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 <[email protected]>'" \
  HEAD

Ответ 4

Для меня, просто мигрирующий знак, на самом деле не проверял мои фиксации на github.

Решение, которое работает для меня, возвращается, а затем подписывает каждое сообщение с помощью -S

git commit --amend -S

Также, если вы проверяете, действительно ли ваша фиксация подписана, а ваша электронная почта/имя просто не добавлена, используйте эту команду

git show HEAD --show-signature

Дополнительный совет: Если вы уже исправляете свои фиксации, вам может понадобиться ваше реальное имя (см. раздел git log). Возможно, вы используете имя дескриптора github, которое не требуется. Нужен только правильный адрес электронной почты, и в поле имени пользователя вы должны использовать свое полное имя, а github правильно проверит его с помощью имени дескриптора github. Поэтому, чтобы исправить ваше имя пользователя и подписать последнее использование commit:

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

а также укажите полное имя для имени пользователя в

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

Ответ 5

У меня была аналогичная проблема. Здесь, благодаря Робин Джонсону из Gentoo Linux, есть трюк, чтобы добавить подпись ко всем моим предыдущим разблокированным коммитам:

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