Git: как откатиться до последнего push / commit - PullRequest
17 голосов
/ 18 февраля 2012

Я программирую. Я добавляю красивый код, фиксирую и добавляю его в репозиторий, например:

git add *
git commit
//writes message
git push unfuddle master

Теперь я иду и всё испорчу. Я не давал команду git, так как я нажимаю красоту. Как заставить мои локальные файлы вернуться к тому, что было зафиксировано?

git pull говорит, что мой локальный репо "обновлен"

git checkout спамит мой экран и, похоже, ничего не меняет.

Для ясности: я не пытаюсь изменить свое удаленное репо, просто сделайте мое локальное репо похожим на сервер.

Мое текущее решение состоит в том, чтобы удалить папку и отложить репо. Это не может быть правдой.

Ответы [ 8 ]

17 голосов
/ 18 февраля 2012

Вы можете сбросить до HEAD: git reset --hard HEAD

7 голосов
/ 18 февраля 2012

UPDATE:

Лучший способ сделать это -

git stash -u

Не

git reset --hard HEAD

это операция, которую нельзя отменить, и вы можете по-настоящему уничтожить свою работу, если вы не используете машину времени на Mac или новую службу резервного копирования в Windows 8. В Linux может быть подобная схема, хотя я не использую один.

Если вы также хотите, чтобы проигнорированные файлы были обнулены, вы можете

git clean -xdf
3 голосов
/ 18 февраля 2012

Поскольку вы еще ничего не зафиксировали, следующая команда сбросит ваши измененные файлы:

git checkout .
3 голосов
/ 18 февраля 2012

git pull говорит, что мой локальный репозиторий "обновлен"

git pull сообщает, что ваш репозиторий обновлен, потому что ваш локальный репозиторий и ваш удаленный репозиторий указывают ната же самая ГОЛОВА (последний коммит).Это связано с вашим git push, который синхронизировал remote с вашим локальным хранилищем.

Git не сравнивает изменения, которые не были зафиксированы вудаленная ветвь, когда она решает, что тянуть;таким образом, с точки зрения Gits, ваши локальные и удаленные репозитории находятся в один и тот же момент времени, даже если ваш локальный репозиторий имеет неизмененные изменения (изменения, которыеВы не git add ред).

Внизу этой страницы есть хорошая диаграмма, которая показывает вам, как работает процесс - вы вносите некоторые изменения, ставите их (запуском git add), а затем, наконец, фиксируете ихв хранилище (через творчески названный git commit).

Для ясности: я не пытаюсь изменить свое удаленное репо, просто сделайте мое локальное репо похожим на сервер.

Другие указали методы длясделайте это: git reset --hard HEAD (сбросьте индекс [промежуточные файлы] и рабочее дерево [неразмеченные файлы] до последнего коммита), но стоит понять, чего вы пытаетесь достичь - если бы я знал как git отслеживал мои файлы, когда я в первый раз испортил свое рабочее дерево, я бы сэкономил часы фреттинга.

2 голосов
/ 13 августа 2012

можно попробовать

git stash
git pull origin your-branch
1 голос
/ 18 февраля 2012

Если вы ничего не совершили, вы можете просто сделать $ git reset --hard.Если вы совершили какие-то действия, вы можете сделать git reset --hard origin/master, чтобы вернуться к версии, которая находится на пульте.

1 голос
/ 18 февраля 2012

Вы пробовали git checkout -f master?

0 голосов
/ 15 марта 2017

git checkout branchname git reset --hard c4e0424 git push origin +branchname

Вы можете использовать --soft вместо --hard
--hard Вы потеряете свои изменения
--soft оставьте свои измененные файлы коммита

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...