2014-02-11 2 views
8

Я пытаюсь найти эквивалент svn Revert в Git. В svn, когда я нажимаю файл, а затем нажмите revert, это приведет к отмене всех локальных изменений. файл возвращается к последнему commit. Я не могу найти ту же самую команду в Git. Поскольку я новичок, я не хочу испортить свою работу.Что такое svn revert эквивалент в git?

Скажем, я совершил фиксацию Init. Затем я внес некоторые изменения. Теперь я хотел бы вернуться к состоянию Init.

Спасибо за помощь

ответ

6

Потому что области постановки, это не так просто, как svn revert. В зависимости от того, что вы сделали, и чем вы являетесь, вам нужно использовать либо git checkout, либо git reset. Вы должны быть осторожны с git reset, хотя, поскольку вы можете переписать историю и потерять работу.

Допустим, у вас есть совершить график:

A <-- B <-- C <-- D 

И вы в настоящее время D с некоторыми изменениями. Чтобы просто отказаться от всех изменений (поэтапно или нет), вы можете использовать git reset --hard HEAD или git reset --hard D. Оба сбросят состояние вашей рабочей копии.

Если вы хотите, чтобы состояние вашей рабочей копии, идентично A, но не потерять фиксации B и C, то вы должны использовать: git checkout A -- . из верхней части рабочей копии. Это установит состояние вашей рабочей копии на содержимое A. На этом этапе ваше рабочее дерево загрязнено, поэтому вам нужно зафиксировать тот факт, что вы хотели вернуться. Совершить график в этой точке будет:

A <-- B <-- C <-- D <-- A' 

Где A' новое обязательство (с другим идентификатором), который приносит свою работу обратно в эквивалент фиксации A.

Если вы хотите потерять фиксацию B и C, вы можете использовать git reset --hard A. Это вернет указатель ветки назад, чтобы зафиксировать A. Теперь вы переписываете историю, поэтому будьте осторожны. Если вы работаете с другими членами команды в этом филиале, вы не хотите этого делать. Если это ваша собственная ветка, вам, вероятно, нужно будет использовать git push -f, где -f означает --force, при нажатии на свое дистанционное репо.Вы также должны убедиться, что вы установили push.default либо current, либо upstream, чтобы избежать нажатия всех соответствующих ветвей и случайно перемотать чью-то работу.

FWIW, я написал blog post about reverting changes in Git несколько лет назад. Это по-прежнему актуально и сегодня. Вы можете найти это полезным.

+0

Большое вам спасибо. – Richard77

+0

Добро пожаловать! – jszakmeister

1
git reset --hard Init 

получите ваш HEAD обратно Init. Вы можете сначала создать ветку или метку, чтобы сохранить любую другую работу, которую вы сделали.

7

Пока файлы не поставил, я обычно использую

git checkout -- . 

Вы также можете использовать

git checkout HEAD -- path/to/some/file.txt 

к проверке одного файла из HEAD, или любой другой совершить

Смежные вопросы