суббота, 9 мая 2015 г.

Меняем комментарий, автора, email и дату коммита в git



Понадобилось мне сегодня поменять дату у сделанного коммита, в связи с чем пришлось покопаться в документации к git, как оказалось сделать это не сложно, причем менять можно любые параметры начиная от комментария, заканчивая датой. И что бы в следующий раз по документации не рыскать, опубликую найденную информацию тут.
 



Начнем экспериментировать, создадим новый файл:
$ echo "hello" > test_file.txt

Посмотрим с какой датой он создался, ожидаемо она будет сегодняшней (9 мая):
$ stat -c %y test_file.txt
2015-05-09 19:02:31.046985035 +0300

Изменим дату на 9 апреля:
$ touch -d '2015-04-09 9:00:00' test_file.txt
$ stat -c %y test_file.txt
2015-04-09 09:00:00.000000000 +0300

Теперь добавим его в гит и закоммитим попросив использовать не сегодняшнюю дату, а дату модификации файла:
$ git add test_file.txt
$ git commit --date="$(stat -c %y test_file.txt)" -m "testing" test_file.txt

Посмотрим, лог:
$ git --no-pager log -1 --stat --pretty=fuller
commit c1b860141b44bd71e7b4c2c434f94c5318535f5c
Author:     ReanGD <test@test.ru>
AuthorDate: Thu Apr 9 09:00:00 2015 +0300
Commit:     ReanGD <test@test.ru>
CommitDate: Sat May 9 19:04:06 2015 +0300

    testing

 test_file.txt | 1 +
 1 file changed, 1 insertion(+)

Оказывается git оперирует двумя датами:
  •  AuthorDate - актуальная дата модификации файла, которая получилась, как и хотелось 9 апреля
  • CommitDate - дата фактического коммита, она все еще 9 мая, дальше я покажу как поменять и ее
Попробуем изменить AuthorDate для уже сделанного коммита еще на месяц раньше.
$ current_date=$(git log -1 --format=format:%ai)
$ new_date=$(date -d "$current_date - 1 month" --rfc-2822)
$ git commit --amend --date="$new_date" -C HEAD
[master 7430544] testing
 Date: Mon Mar 9 09:00:00 2015 +0300
 1 file changed, 1 insertion( + )
 create mode 100644 test_file.txt

Тут параметр "-C" говорит гиту не менять комментарий сделанного коммита. При желании можно явно задать дату (формат даты лучше посмотреть в документации):
$ git commit --amend --date='2015-02-09 09:00:00.000000000 +0300' -C HEAD
[master 33ddab4] testing
 Date: Mon Feb 9 09:00:00 2015 +0300
 1 file changed, 1 insertion( + )
 create mode 100644 test_file.txt

Если сильно хочется, можно поменять и CommitDate, выставив переменную окружения GIT_COMMITTER_DATE:
$ GIT_COMMITTER_DATE="2015-01-09 09:00:00.000000000 +0300" git commit --amend --date='2015-01-09 09:00:00.000000000 +0300' -C HEAD
$ git --no-pager log -1 --stat --pretty=fuller
commit ba04e3691f0ad5ef9b2104df3a4ebc3d24df36e2
Author:     ReanGD <test@test.ru>
AuthorDate: Fri Jan 9 09:00:00 2015 +0300
Commit:     ReanGD <test@test.ru>
CommitDate: Fri Jan 9 09:00:00 2015 +0300

    testing

 test_file.txt | 1 +
 1 file changed, 1 insertion(+)

И AuthorDate и CommitDate - теперь даты 9 января

Аналогично можно поменять у уже сделанного коммита имя, email автора и комментарий:
$ git commit --amend --author="New Author <new@email.com>" -m "new comment"
[master 0263aa2] new comment
 Author: New Author <new@email.com>
 Date: Fri Jan 9 09:00:00 2015 +0300
 1 file changed, 1 insertion( + )
 create mode 100644 test_file.txt

5 комментариев:

  1. Ответы
    1. До компьютера добрался только заполночь, ну и что бы статистику по непрерывным коммитам на гитхабе не портить, пришлось мухлевать :)

      Удалить
  2. Читер :)
    Название блога и девиз - класные

    ОтветитьУдалить