Как удалить первый коммит в git?


Мне любопытно, как удалить первый коммит в git.

Что такое ревизия перед совершением какой-либо вещи? Есть ли у этой ревизии имя или тег?

7 87

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/.

другой способ вы можете сделать это:

  1. проверка на ветку, которую вы хотите сохранить (скажем, dev) git checkout dev
  2. теперь удалите ветку, которую вы хотите сбросить git branch -D master
  3. Теперь создайте пустую ветку с тем же именем git checkout --orphan master

конечно, все это будет зависеть от вашего usecase, но если у вас есть более чем одной ветви, удалить .git каталог не имеет смысла.

Если вы только что зафиксировали его, но не нажали его, то просто удалите .ГИТ и git init снова...