Мне интересно, как удалить первый коммит в git.
Что такое ревизия, прежде чем совершать какие-либо вещи? У этой ревизии есть имя или тег?
git
repository
commit
git-commit
Цзянь Вэйхан
источник
источник
git rebase -i --root
. Подробности см. В следующем ответе SO: stackoverflow.com/questions/2246208/…git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
Ответы:
Для меня самый безопасный способ - использовать
update-ref
команду:Он удалит именованную ссылку
HEAD
, поэтому он сбросит (мягко, вы не потеряете свою работу) все ваши коммиты вашей текущей ветки .Если вы хотите объединить первый коммит со вторым, вы можете использовать
rebase
команду:Последний способ может состоять в том, чтобы создать потерянную ветвь, ветвь с тем же содержимым, но без истории изменений, и зафиксировать в ней новый контент:
источник
Перед первым коммитом ничего нет, так как каждый коммит ссылается на родительский коммит. Это делает первый коммит особенным (сиротский коммит), поэтому нет никакого способа сослаться на предыдущее «состояние».
Поэтому, если вы хотите исправить коммит, вы можете просто
git commit --amend
: это изменит коммит без создания другого.Если вы просто хотите начать все сначала, удалите
.git
репозиторий и сделайте еще один сgit init
источник
--amend
Также не будет обновлять автор правильно , если он изначально был неправильно настроен. Это то, что мне было нужно, поэтому я использовал принятый ответ, а затем просто сделал новый коммит.источник
Вы можете просто отредактировать свой первый коммит (так как в git-репо всегда есть первый коммит). Попробуйте использовать
git commit --amend --reset-author
вместо обычногоgit commit --amend
.источник
Я искал способ отменить все git коммиты из репо, как будто их никогда не было.
Ребазинг будет работать до определенного момента. Тем не менее, самый первый (хронологически самый старый git commit) всегда будет проблематичным, так как у него нет родителя, поэтому произойдет ошибка.
Ни один из этих ответов не решил это для меня. Но после долгих поисков и проб и ошибок я обнаружил, что это работает!
Надеюсь, это поможет вам. Хорошего дня.
источник
Еще один способ сделать это:
git checkout dev
git branch -D master
git checkout --orphan master
Конечно, все это будет зависеть от вашего варианта использования, но если у вас более одной ветви, удаление
.git
каталога не имеет смысла.источник
Если вы хотите сохранить другие ветки, но, например, сделать так, чтобы
master
ветка начиналась заново без общей истории с другими ветками, одним из безопасных способов добиться этого является создание нового хранилища и загрузка его содержимого в старое:Это создает
newmaster
ветку в старом репозитории с историей, которая не является общей для других ветвей. Конечно, вы можете просто перезаписатьmaster
, сgit push -f
.Если вы хотите уничтожить все ветви и весь существующий контент, просто запустите
источник
git rebase --root
, вероятно, именно этого хотел OP, но, учитывая, что у этого ответа есть два возражения, я воздержусь от его удаления, если кто-то все еще сочтет его актуальным.Если вы только что зафиксировали его, но не нажали, просто удалите каталог .git и
git init
снова ...источник
Ответ на вопрос зависит от того:
Вы хотите удалить первый И ТОЛЬКО коммит на ветке (оставив другие ветви такими, какими они были), или
Вы хотите удалить первый коммит в некоторой ветви, в то время как «оставляя на месте» последующие коммиты (и другие ветви).
Второй из них относительно проще. По сути, вам необходимо выполнить ребазинг - большинство ответов здесь о том, как это сделать.
Выполнение второго (удаление первого и единственного коммита из ветви с одновременным оставлением других ветвей) сложнее. Или, по крайней мере, особенно сложнее, если вы хотите, чтобы это произошло и чтобы изменения отразились обратно в GitHub или Bitbucket. Насколько я могу судить, в Git нет никакого способа толкать или принудительно толкать ветку без коммитов. И, опять же, насколько я понимаю, нет никакого способа создать новую пустую ветку без коммитов в GitHub или Bitbucket. Таким образом, вам по сути нужно создать новый репозиторий, чтобы создать полностью пустую ветвь, а затем добавить обратно те ветки, которые вы хотите (включая коммиты, которые вы хотите) - согласно ответу @ user1338062.
Поэтому я надеюсь, что этот ответ проясняет то, что, возможно, не было очевидным - что необходимо использовать два разных подхода для двух разных (более или менее разумных) сценариев, которые обе вещи, которые вы, возможно, захотите сделать, чтобы чтобы полностью освоить делать то, что просит ОП.
источник