Как отбросить локальные коммиты в Git?
Я работал над чем-то, и решил, что он полностью облажался...после совершения некоторых из них. Поэтому я попробовал следующую последовательность:
git reset --hard
git rebase origin
git fetch
git pull
git checkout
в этот момент я получил сообщение
Your branch is ahead of 'origin/master' by 2 commits.
Я хочу отказаться от своих локальных коммитов, без необходимости стирать мой локальный каталог и перезагружать все. Как я могу это сделать?
6 ответов
git reset --hard origin/master
удалить все коммиты не в origin/master
здесь origin
- это имя РЕПО и master
- это название ветки.
в стороне, помимо ответа mipadi (который должен работать, Кстати), вы должны знать, что делаете:
git branch -D master
git checkout master
и делает именно то, что вы хотите без having to redownload everything
(ваша цитата перефразировано). Это связано с тем, что ваше локальное РЕПО содержит копию удаленного РЕПО (и эта копия не совпадает с вашим локальным каталогом, она даже не совпадает с вашей проверенной веткой).
Wiping вне ветвь совершенно безопасно и реконструировать что ветвь очень быстра и не включает сетевой трафик. Помните, что Git-это в первую очередь локальное репо по дизайну. Даже у удаленных филиалов есть копия на локальном. Существует только немного метаданных, которые говорят git, что конкретная локальная копия на самом деле является удаленной веткой. В git все файлы находятся на вашем жестком диске все время.
Если у вас нет других ветвей, кроме master, вы должны:
git checkout -b 'temp'
git branch -D master
git checkout master
git branch -D temp
что я делаю, так это пытаюсь сбросить hard to HEAD. Это уничтожит все локальные коммиты:
git reset --hard HEAD^
вам нужно запустить
git fetch
чтобы получить все изменения, а затем вы не получите сообщение с "ваша ветка впереди".
Я видел случаи, когда пульт дистанционного управления вышел из синхронизации и нуждался в обновлении. Если a reset --hard
или branch -D
не работает,
git pull origin
git reset --hard
Я должен был сделать :
git checkout -b master
как git сказал, что он не существует, потому что он был стерт с
git -D master