Понадобилось мне сегодня поменять дату у сделанного коммита, в связи с чем пришлось покопаться в документации к 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
А зачем менять дату? :)
ОтветитьУдалитьДо компьютера добрался только заполночь, ну и что бы статистику по непрерывным коммитам на гитхабе не портить, пришлось мухлевать :)
УдалитьЧитер :)
ОтветитьУдалитьНазвание блога и девиз - класные
КласСные :)
УдалитьСпасибо )
Удалить