Изменить первое завершение проекта с помощью Git?
Я хочу что-то изменить в первом коммите моего проекта, потеряв все последующие коммиты. Есть ли способ сделать это?
Я случайно перечислил свое сырое сообщение в комментарии в исходном коде, и я хотел бы изменить его, поскольку я получаю спам от индексации ботов GitHub.
Ответы
Ответ 1
Как упоминалось ecdpalma ниже, git 1.7.12+ (август 2012) улучшил опцию --root
для git rebase
:
"git rebase [-i] --root $tip
" теперь можно использовать для перезаписи всей истории, ведущей к "$tip
", вплоть до корневой фиксации.
Новое поведение было первоначально обсуждалось здесь:
Я лично считаю, что "git rebase -i --root
" нужно просто работать, не требуя "--onto
" и позволить вам "редактировать" даже первый в истории.
Понятно, что никто не беспокоился, так как люди гораздо реже переписываются в самом начале истории, чем в противном случае.
Патч следует.
(исходный ответ, февраль 2010 г.)
Как упоминалось в git FAQ (и этот вопрос SO), идея такова:
- Создать новую временную ветку
- Перемотайте его на фиксацию, которую хотите изменить, используя
git reset --hard
- Измените это commit (это будет верхняя часть текущего HEAD, и вы можете изменить содержимое любого файла)
-
Разверните ветку поверх измененной фиксации, используя:
git rebase --onto <tmp branch> <commit after changed> <branch>`
Трюк заключается в том, чтобы убедиться, что информация, которую вы хотите удалить, не будет повторно введена позже в другом месте в вашем файле. Если вы подозреваете, что вам нужно использовать filter-branch --tree-filter
, чтобы убедиться, что содержимое этого файла не содержит каких-либо данных, передающих разумные данные.
В обоих случаях вы переписываете SHA1 каждого коммита, поэтому будьте осторожны, если вы уже опубликовали ветвь, которую вы изменяете. Вы, вероятно, не должны это делать, если ваш проект еще не открыт, а другие люди не работают на основе коммитов, которые вы собираетесь переписать.
Ответ 2
Как указано в 1.7.12 Примечания к выпуску, вы можете использовать
$ git rebase -i --root
Ответ 3
git rebase -i
позволяет вам удобно редактировать любые предыдущие фиксации, , за исключением корневой фиксации. Следующие команды показывают, как это сделать вручную.
# tag the old root, "git rev-list ..." will return the hash of first commit
git tag root `git rev-list HEAD | tail -1`
# switch to a new branch pointing at the first commit
git checkout -b new-root root
# make any edits and then commit them with:
git commit --amend
# check out the previous branch (i.e. master)
git checkout @{-1}
# replace old root with amended version
git rebase --onto new-root root
# you might encounter merge conflicts, fix any conflicts and continue with:
# git rebase --continue
# delete the branch "new-root"
git branch -d new-root
# delete the tag "root"
git tag -d root
Ответ 4
Если вы хотите изменить только первое коммитирование, вы можете попробовать git переустановить и исправить фиксацию, похожую на эту запись:
Как изменить указанный коммит в git?
И если вы хотите изменить все коммиты, содержащие сырое электронное письмо, лучше всего выбрать фильтр-ветку. Пример того, как изменить адрес электронной почты глобально на книге Pro Git, и вы можете найти эту ссылку полезной http://git-scm.com/book/en/Git-Tools-Rewriting-History