Как удалить первый коммит в git?
Мне любопытно, как удалить первый коммит в git.
Что такое ревизия перед совершением какой-либо вещи? Есть ли у этой ревизии имя или тег?
7 ответов:
для меня самый безопасный способ-использовать :
git update-ref -d HEAD
он удалит именованную ссылку
HEAD
, поэтому сбросить (мягко, вы не потеряете свою работу) все ваши коммиты вашей текущей ветви.если вы хотите объединить первый коммит со вторым, вы можете использовать
rebase
команда:git rebase -i --root
последний способ может заключаться в создании сиротской ветви, ветви с тем же содержанием, но без каких-либо зафиксируйте историю и зафиксируйте на ней свой новый контент:
git checkout --orphan <new-branch-name>
перед первым коммитом ничего нет, так как каждый коммит ссылается на родительский коммит. Это делает первый коммит особенным (сиротский коммит), поэтому нет способа ссылаться на предыдущее "состояние".
Так что если вы хотите исправить фиксацию, вы можете просто
git commit --amend
: это изменит фиксацию без создания другого.Если вы просто хотите начать все сначала, удалить
.git
репозиторий, и сделать еще один сgit init
вы можете просто отредактировать свой первый коммит (так как всегда есть первый коммит в репозитории git). Рассмотрите возможность использования
git commit --amend --reset-author
вместоgit commit --amend
.
выезд во временную ветку:
git checkout --orphan TEMP_BRANCH
добавить все файлы:
git add-A
зафиксировать изменения:
git commit-am "Initial commit"
удалить старую ветку:
git branch-D master
переименовать временную ветку в master:
git branch-M master
наконец, принудительное обновление нашего репозитория:
git push-F origin master
Если вы хотите сохранить другие ветви, но, например, заставить главную ветвь начать заново без общей истории для других ветвей, один безопасный способ добиться этого-создать новый репозиторий и поместить его содержимое в свой старый:
cd .. git init newrepo cd newrepo # make some initial commits git push ../oldrepo master:newmaster
это создает ветвь "newmaster" в старом репозитории, с историей, которая не является общей ни с одной из других ветвей. Конечно, вы можете просто перезаписать мастер, а также, с `git push-f.
Если вы хотите уничтожьте все ветви и все существующее содержимое, а затем просто запустите
rm -rf .git/
.
другой способ вы можете сделать это:
- проверка на ветку, которую вы хотите сохранить (скажем, dev)
git checkout dev
- теперь удалите ветку, которую вы хотите сбросить
git branch -D master
- Теперь создайте пустую ветку с тем же именем
git checkout --orphan master
конечно, все это будет зависеть от вашего usecase, но если у вас есть более чем одной ветви, удалить
.git
каталог не имеет смысла.