Ответы на вопрос Как изменить существующие неопубликованные коммиты? опишите способ изменения предыдущих сообщений коммита, которые еще не были переданы в апстрим. Новые сообщения наследуют временные метки оригинальных коммитов. Это кажется логичным, но есть ли способ также переустановить время?
git
timestamp
commit
git-rewrite-history
Dhskjlkakdh
источник
источник
git commit --amend --reset-author
Ответы:
Используйте
git filter-branch
с фильтром env, который устанавливаетGIT_AUTHOR_DATE
иGIT_COMMITTER_DATE
для конкретного хэша коммита, который вы хотите исправить.Это аннулирует это и все будущие хэши.
Пример:
Если вы хотите изменить даты коммита
119f9ecf58069b265ab22f1f97d2b648faf932e0
, вы можете сделать это примерно так:источник
Вы можете сделать интерактивную перебазировку и выбрать редактировать для коммита, дату которого вы хотели бы изменить. Когда процесс rebase останавливается для внесения изменений в коммит, который вы вводите, например:
После этого вы продолжаете интерактивный ребаз.
ОБНОВЛЕНИЕ (в ответ на комментарий Studgeek): чтобы изменить дату фиксации вместо даты автора:
Строки выше устанавливают переменную окружения GIT_COMMITTER_DATE, которая используется в коммите на изменение.
Все проверено в Git Bash.
источник
rebase
, вы можете просто сделатьgit commit --amend
+ var fixedDate = strftime(new Date(), "%c"); + var result = shelljs.exec("git commit --amend --date=\"" + fixedDate + "\" --no-edit");
Лучший способ обработать все эти предложения в одной команде:
Это установит дату последнего коммита и дату автора как "прямо сейчас".
источник
LANG= GIT_COMMITTER_DATE="`date`" git commit --amend --date "`date`"
--date "now"
. Git> = 2 будет интерпретировать это.Просто делай
git commit --amend --reset-author --no-edit
. Для старых коммитов вы можете сделать интерактивную перебазировку и выбратьedit
коммит, дату которого вы хотите изменить.Затем измените коммит
--reset-author
и--no-edit
измените дату автора на текущую дату:Наконец, продолжите интерактивную ребазу:
источник
--reset-author
, это новое в git 1.6.6 (ссылка gitlog.wordpress.com/2010/01/13/git-1-6-6 )--reset-author
будет сбрасывать как Автор, так и Дата автора до настоящего времени.Я написал скрипт и пакет Homebrew для этого. Супер прост в установке, вы можете найти его на
PotatoLabs/git-redate
странице GitHub .Синтаксис:
Вам просто нужно запустить,
git redate
и вы сможете редактировать все даты в vim из последних 5 коммитов (также есть-c
опция для того, сколько коммитов вы хотите вернуть, по умолчанию это 5). Дайте мне знать, если у вас есть какие-либо вопросы, комментарии или предложения!источник
Каждый коммит связан с двумя датами, датой коммиттера и датой автора. Вы можете просмотреть эти даты с:
Если вы хотите изменить дату автора и дату принятия последних 6 коммитов, вы можете просто использовать интерактивное перебазирование:
,
Для всех фиксаций , где вы хотите , чтобы изменить дату, заменить
pick
наedit
(или простоe
), а затем сохранить и выйти из редактора.Теперь вы можете изменить каждый коммит, указав дату автора и дату коммиттера в формате ISO-8601:
Первая дата - это дата коммита, вторая - дата автора.
Затем перейдите к следующему коммиту с:
Повторяйте процесс, пока вы не исправите все свои коммиты. Проверьте вашу прогрессию с
git status
.источник
git checkout name-of-current-branch
.--no-edit
вgit commit --amend --no-edit --date=2017-10-08T09:51:07
держать старое сообщение коммита.GIT_COMMITTER_DATE
как описано здесь eddmann.com/posts/...источник
Основываясь на theosp «s ответ , я написал скрипт
git-cdc
(для изменения даты совершения) , что я положил мнеPATH
.Имя важно: в
git-xxx
любом местеPATH
вы можете ввести:Этот скрипт находится в bash, даже в Windows (поскольку Git будет вызывать его из среды msys )
С этим вы можете ввести:
Это сбрасывает дату авторизации / коммита коммита до HEAD (
@~
) на указанную дату.Это сбрасывает дату авторизации / фиксации комита до HEAD (
@~
) в тот же час, но 2 дня назад.Илья Семенов упоминает в комментариях :
источник
git cdc @~ "2014-07-04 20:32:45
противном случае он не распознал бы время и, следовательно, получил бы время 00:00:00 (это становится третьим аргументом).brew install coreutils
), добавить его в PATH (PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
) и затем использовать синтаксис «2 дня назад».2 days ago
" работает?Как редактировать несколько дат коммитов
Другие ответы не очень удобны для редактирования нескольких дат фиксации. Я вернулся к этому вопросу через несколько лет, чтобы поделиться техникой.
Чтобы изменить даты последних 4 коммитов:
Отредактируйте ребазу следующим образом, вставив
exec
строки, чтобы изменить даты по мере необходимости:источник
--amend
/--date
. Проще, чем мой собственный ответ, используя переменные среды. Upvoted.GIT_AUTHOR_DATE
только обновления .exec git commit --amend --no-edit --date "now"
если это предыдущий последний коммит.
если вы уже нажали на orgin и можете принудительно использовать:
если вы не можете форсировать толчок и если он толкается, вы не можете изменить коммит! ,
источник
Вот удобный псевдоним, который изменяет время фиксации и автора последнего коммита на время, принятое
date --date
:Применение:
git cd <date_arg>
Примеры:
Редактировать: вот более автоматизированная версия, которая проверяет, что индекс является чистым (без незафиксированных изменений) и повторно использует последнее сообщение о коммите, или дает сбой в противном случае (защита от ошибок):
источник
Я создал этот пакет npm, чтобы изменить дату старых коммитов.
https://github.com/bitriddler/git-change-date
Пример использования:
Вам будет предложено выбрать коммит, который вы хотите изменить, а затем ввести новую дату.
Если вы хотите изменить коммит по конкретному хешу, запустите
git-change-date --hash=[hash]
источник
Следующая функция bash изменит время любого коммита в текущей ветви.
Будьте осторожны, чтобы не использовать, если вы уже выдвинули коммит или если вы используете коммит в другой ветке.
источник
if [[ -z "$commit" ]]
->if [[ -z "$date_timestamp" ]]
GIT_COMMITTER_DATE=
в конце метода, чтобы предотвратить дальнейшие фиксации вручную, чтобы сохранить указанную дату.Чтобы изменить дату автора и дату принятия:
источник
Если вы хотите получить точную дату другого коммита (скажем, вы перебазировали отредактированный коммит и хотите, чтобы в нем была дата оригинальной версии перед перебазой):
Это исправляет дату фиксации HEAD, которая в точности совпадает с датой фиксации a383243 (включайте больше цифр, если есть неоднозначности). Также появится окно редактора, чтобы вы могли редактировать сообщение о коммите.
Это дата автора, о которой вы обычно заботитесь - см. Другие ответы на дату коммиттера.
источник
Если вы хотите выполнить принятый ответ ( https://stackoverflow.com/a/454750/72809 ) в стандартной командной строке Windows, вам потребуется следующая команда:
Ноты:
^
), но мне это не удалось.Большое спасибо в блоге Колина Свингена . Хотя его код не работал для меня, он помог мне найти правильное решение.
источник
Если коммит еще не выдвинут, я могу использовать что-то вроде этого:
после этого git bash открывает редактор с уже примененной датой, поэтому вам нужно просто сохранить его, набрав в командном режиме редактора VI ": wq", и вы можете нажать его
источник
--no-edit
опцию.git push -f
отправить измененную фиксацию с помощью (принудительное обновление). Это может иметь побочные эффекты, хотя. (особенно если у многих людей есть локальные клоны хранилища)Для тех, кто использует Powershell
Кредит https://mnaoumov.wordpress.com/2012/09/23/git-change-date-of-commit/
источник
Уже есть много хороших ответов, но когда я хочу изменить дату для нескольких коммитов в один день или в один месяц, я не могу найти правильный ответ. Поэтому я создаю новый сценарий для этого с объяснением, надеюсь, он кому-нибудь поможет:
Дата будет изменена:
источник