Фиксация мерзавца возражает заголовкам

Я думаю, что это должно работать.

map <F4> !indent %<CR>

Я думаю, что это зависит от Вашей системы, что точно произойдет затем, но по крайней мере необходимо перезагрузить файл.

Но, что indent на самом деле выполнение? Это походит на то, что Вы пробуете, может быть достигнут намного более легким способом.

3
15.10.2014, 16:23
1 ответ

Перед всем, сделайте резервную копию вашего локального репозитория.

Предположим, ваш испорченный коммит .

Прежде всего, создайте новый объект коммита на основе испорченного:

git commit-tree -m "New message line 1" -m "Line 2" <corrupt>^{tree} -p <corrupt>^1

Примечание: адаптируйте свою команду (-p для добавления родителей, -m для строк сообщений коммита и т.д.). Смотрите man-страницу git-commit-tree для работы с именем автора/электронной почтой и т.д.

Вы получите новый коммит SHA-1: .

Теперь сделайте замену коммита (graft):

git replace <corrupted> <fixed>

Это сделает "graft", который искусственно заменит ваш испорченный коммит на исправленный.

Эта модификация обратима: вы можете удалить её или показать через команду git-replace (см. её man-страницу!) или заглянув в каталог .git/refs/replace/.

Чтобы сделать его постоянным, используйте git filter-branch но вся изменённая часть будет состоять из новых объектов коммита (то есть, новых SHA-1).

# HEAD should point to the most recent commit (certainly master)...
git filter-branch <fixed>~1..HEAD

Наконец, отделите вашу замену (теперь постоянную в вашей истории):

git replace -d <corrupted>

Это хорошо работает с одной мастер-веткой, но если у вас несколько активных веток (созданных после ), вам придётся перебазировать их все следующим образом:

git rebase --onto <new-root-branch> <old-root-branch> <branch>

Где:

  • - это коммит, с которого ветвь должна начинаться сейчас (новый базовый SHA-1);
  • - это коммит, с которого ветвь начиналась до вызова ветви фильтра;
  • - это ветвь, которую нужно перебазировать.

Найдите эти SHA-1 с помощью команд журнала, таких как:

git log --graph --decorate --all --pretty=oneline

Когда вы дважды проверили, что всё в порядке (ветви и т.д.), и когда все, связанные с вашим git-репозиторием, полностью в курсе происходящего, вы можете git push --force свои изменения.

0
27.01.2020, 21:42

Теги

Похожие вопросы