Я работал над чем-то, и решил, что это было полностью испорчено ... после совершения некоторых из них. Поэтому я попробовал следующую последовательность:
git reset --hard
git rebase origin
git fetch
git pull
git checkout
В какой момент я получил сообщение
Your branch is ahead of 'origin/master' by 2 commits.
Я хочу отказаться от своих локальных коммитов, не стирая мой локальный каталог и не перезагружая все. Как я могу это сделать?
git fetch
иgit pull
- pull - это комбинация выборки и слияния.Ответы:
удалит все коммиты не
origin/master
там, гдеorigin
находится имя репо иmaster
имя ветки.источник
origin/master
это ветка, которая отслеживаетmaster
веткуorigin
удаленного репо.origin/master
это ссылка наmaster
ветку удаленного вызоваorigin
.Кроме того, помимо ответа от mipadi (который, кстати, должен работать), вы должны знать, что делаете:
также делает именно то, что вы хотите без
having to redownload everything
(ваша цитата перефразирована). Это потому, что ваше локальное хранилище содержит копию удаленного хранилища (и эта копия не совпадает с вашей локальной папкой, она даже не совпадает с вашей извлеченной веткой).Удаление ветки совершенно безопасно, а восстановление этой ветки происходит очень быстро и не требует сетевого трафика. Помните, что git - это, прежде всего, локальный репозиторий. Даже удаленные филиалы имеют копии на локальных. Есть только немного метаданных, которые сообщают git, что конкретная локальная копия на самом деле является удаленной ветвью. В git все файлы постоянно находятся на вашем жестком диске.
Если у вас нет других веток, кроме master, вам следует:
источник
Cannot delete the branch 'master' which you are currently on.
git checkout -b temp;git branch -D master;git checkout master;git branch -D temp
origin/master
на своей локальной машине. Это ваша локальная (полная) копия удаленной ветки. Настоящая удаленная ветка естьorigin master
.git branch -D master
этом нет необходимости, поскольку, как указывалось выше, это приводит к ошибке.Что я делаю, так это стараюсь сбросить в HEAD. Это уничтожит все локальные коммиты:
источник
^
представляет родительский коммит, поэтому восстановлениеHEAD^
сбрасывает непринятые изменения и перемещает ветвь к предыдущему коммиту, фактически «удаляя» самый последний коммит (хотя коммит все еще существует, ветвь просто не указывает на него). В ответе будет только один локальный коммит, а остальные - незафиксированные изменения. @karim @giangВам нужно бежать
Чтобы получить все изменения, а затем вы не получите сообщение с «ваша ветка впереди».
источник
Я видел случаи, когда пульт был не синхронизирован и нуждался в обновлении. Если
reset --hard
илиbranch -D
не работает, попробуйтеисточник
reset --hard
работает в этой ситуацииreset --hard
должно сработать здесь. Тем не менее, я просто указываю на то, что иногда не удается правильно сбросить ветку, и agit pull origin
будет синхронизироваться с пультом дистанционного управления и позволитreset --hard
функционировать должным образом.Я должен был сделать:
как мерзавец сказал, что его не существует, потому что он был стер с
источник