Git: массовое изменение дат принятия - PullRequest
1 голос
/ 26 марта 2020

Когда мне нужно изменить даты коммитов для разных коммитов, я использую интерактивный ребаз и меняю их один за другим.

Как я могу изменить их все в одной команде? Другими словами, мне нужно применить данную команду ко всем коммитам, которые будут перечислены в интерактивном ребазе.

Спасибо

Ответы [ 3 ]

0 голосов
/ 26 марта 2020

git rebase поддерживает параметр --exec , который будет делать именно это.

-x <cmd>

--exec <cmd>

Добавлять «exe c » после каждой строки, создавая коммит в окончательной истории. будет интерпретироваться как одна или несколько команд оболочки. Любая неудачная команда прервет перебазирование с кодом выхода 1.

0 голосов
/ 26 марта 2020

Filter-Repo

git filter-branch устарело. Вместо этого используйте git filter-repo. Вам нужно будет установить его.

Вот отличная статья о том, как использовать git -filter-repo для изменения даты фиксации. Документация git -filter-repo довольно хорошо объясняет концепцию --commit-callback.

Очень простой пример

Давайте сбросим часовой пояс всех дат фиксации на ноль.

# Save this as ../change_time.py
def handle(commit):
    "Reset the timezone of all commits."
    date_str = commit.author_date.decode('utf-8')
    [seconds, timezone] = date_str.split()
    new_date = f"{seconds} +0000"
    commit.author_date = new_date.encode('utf-8')

handle(commit)

# You need to be in a freshly-cleaned repo. Or use --force.
git clone <...> your_repo
cd your_repo
# First just a dry run.
git filter-repo --dry-run --commit-callback "$(cat ../change_time.py)"
# And now do it for real
git filter-repo --commit-callback "$(cat ../change_time.py)"
0 голосов
/ 26 марта 2020

Адаптировано из { ссылка }:

#!/bin/sh

git filter-branch --env-filter '
GIT_AUTHOR_DATE="2000-12-21 23:45:00"
GIT_COMMITTER_DATE="`date`" # now
export GIT_AUTHOR_DATE GIT_COMMITTER_DATE
' --tag-name-filter cat -- --branches --tags

См. https://git-scm.com/docs/git-filter-branch для справки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...