У меня есть репозиторий в bitbucket, который выровнен с онлайн-репозиторием (origin), и в то же время использую Atlassian Sourcetree в качестве инструмента для управления им.
Допустим, он имеет 20 коммитов.
Sourcetreeпо какой-то причине у него есть доля забавного изменения настроек проекта, и я ошибочно нажал 2 коммита (скажем, коммит 15 и 16, как какой-то другой коллега, который тоже использует машину.
Я хочу поместить свое имя и почту в этикоммиты.
Давайте представим дерево вот так (без веток, просто мастер)
Номер коммита -> комментарий -> идентификатор коммита -> автор / почта
- 18 -> зафиксировать комментарий, блабла -> 29huh23 -> me me@mycompany.com
- 17 -> совершить 17 функцию XYZ -> abs2881 -> me me@mycompany.com
- 16 ->функция фиксации 16 KWZ -> anu2716 -> кто-то другой@othercompany.com
- 15 -> функция фиксации 15 IHZ -> 11suhs2 -> кто-то другой@othercompany.com
- 14 -> фиксация 14функция UYZ -> 1uuhw87 -> меня me@mycompany.com
кто-то другой@othercompany.com должен стать мной.
Я являюсь администратором репо.
Как это сделать простым способом?Это возможно из Sourcetree?Должен ли я сделать это из терминала?
Может ли это быть реальным решением вручную изменить файлы в папке .git, создать новый репозиторий и зафиксировать там?
Вопрос не является дублирующим, как предлагаетсяповторяющиеся ответы не работают.
РЕДАКТИРОВАТЬ - ПРАВИЛЬНАЯ ПРОЦЕДУРА ДЛЯ ЛЮБОГО СМОТРЕТЬ КАК ЭТО СДЕЛАТЬ БЕЗ СЛИШКОМ ИССЛЕДОВАНИЯ
Поскольку все отмечают это как дубликат, а это не так, так как другие процедуры НЕПОЛНЕНЫ и оставляют кого-то (такого как я), который не очень крут с git, проблемами и вопросами, правильная процедура:
Из SourceTree, запустите терминал с терминаломкнопка в правом верхнем углу, когда репо открыто.
Затем вставьте это и выполните с заменами, подходящими для вашего случая
#!/bin/sh
git filter-branch --env-filter '
OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
Это, однако, создаст вторичную «резервную» ветвь,потому что при переписывании истории, что оставило у меня много сомнений.
Мне пришлось сделать этот дополнительный шаг, чтобы удалить «резервную копию» ветви и действоватьпросто добавьте новую историю в репозиторий и найдите новую историю с правильным именем / почтой:
git push --force --tags origin 'refs/heads/*'
Здесь полное руководство.
Спасибо всем, кто указалменя в правильном направлении.