Перейти к содержимому

Как откатить коммит git

  • автор:

Как откатить коммит? [дубликат]

Значит такая ситуация, мне нужно было вернуться назад на несколько коммтов ( git checkout v2.0 не создавая новую ветку), чтоб проверить что то в прошлой версии, потом я забыл про то, что откатился и сделал несколько изменений и закоммитил( git commit -m ‘commit’ ), теперь думаю как вырезать этот последний коммит?

Отслеживать
8,592 4 4 золотых знака 29 29 серебряных знаков 53 53 бронзовых знака
задан 7 авг 2017 в 18:04
11k 18 18 золотых знаков 64 64 серебряных знака 128 128 бронзовых знаков
git reset —hard HEAD~1 А вообще лучше создавайте бранчи — дёшево и практично!
7 авг 2017 в 18:06

@0andriy и что это уберет последний коммит? Просто у меня ситуация, что я нахожусь на ветке мастер, просто откатился на несколько коммитов назад, а теперь мне нужно вернуться обратно вперед, только не оставляя после себя ничего

7 авг 2017 в 18:10

git reset —hard $HASH_TO , где $HASH_TO — это хэш комита, который вам нужен в итоге. Почитайте мануал в конце концов, а?

7 авг 2017 в 18:12

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

git revert [название коммита] — откатит изменения в виде следующего коммита. Т.е., создан коммит «Mistake», при использовании revert будет создан еще один коммит «Revert mistake».

Отслеживать
8,592 4 4 золотых знака 29 29 серебряных знаков 53 53 бронзовых знака
ответ дан 7 авг 2017 в 18:35
Albert Akmukhametow Albert Akmukhametow
119 6 6 бронзовых знаков

Если вам ещё нужны изменения, выполненные в самой последней фиксации*, то восстановить её можно будет после переключения обратно на нужную ветку. Пока что нужно запомнить хэш этой фиксации командой git show —format=%H HEAD . Обозначим её вывод как $HASH .

Затем просто переключитесь обратно, к предыдущей ветке с помощью git chechout — . Если вы попали не туда, куда требовалось, укажите вашу ветку в явном виде. Кроме того, вы можете увидеть подсказку от git с хэшем фиксации, откуда вы только что ушли, с предложением создать новую ветку, на неё указывающую.

Затем примените ту самую фиксацию поверх нового состояния командой git cherry-pick $HASH . В результате этого, ваши изменения должны оказаться в нужной вам ветке.

Это же описание, но в виде сценария оболочки.

HASH=$(git show --format=%H HEAD) git checkout - git cherry-pick $HASH 

Как отменить последний коммит

Допустим, вы работаете над кодом в Git и вдруг что-то пошло не по плану. Вам нужно отменить ваш последний коммит. Как это сделать? Давайте разберемся!

Отменить последний коммит можно двумя способами. В этой статье мы рассмотрим оба.

Команда git revert

Команда git revert создает коммит, который возвращает изменения, внесенные с указанным коммитом. С помощью этой команды можно отменить последний коммит:

git revert

Найти имя коммита, который нужно вернуть, можно при помощи команды git log. Первый коммит в выдаче и будет вашим последним созданным коммитом.

Вы можете скопировать его хэш (цифробуквенный идентификатор) и использовать его в команде revert.

Команда git reset

Отменить последний коммит можно также при помощи команды git reset. Но будьте осторожны: это изменит историю коммитов. Пользуйтесь этой командой пореже.

Эта команда смещает HEAD на последний коммит. По умолчанию используется опция —mixed. Все изменения после указанного коммита останутся в рабочем каталоге как неотслеживаемые.

git reset HEAD~1

Опция —soft позволяет сохранить незакоммиченные изменения (если они были) как staged.

git reset --soft HEAD~1

Если вы хотите сбросить все до последнего коммита, а также удалить все неподготовленные изменения, можно использовать опцию —hard.

git reset --hard HEAD~1

Таким образом вы вернетесь в положение до последнего коммита, но вместе с тем сотрете все изменения, не попавшие в коммит.

Что лучше использовать: reset или revert?

Используйте reset исключительно для сброса коммитов, существующих лишь локально. Эта команда меняет историю коммитов. А это может негативно сказаться на работе удаленных членов команды, которые могли основывать что-то на коммите, который вы сотрете.

Команда revert создает новый коммит, отменяющий изменения, и не перезаписывает историю коммитов. Так что, если коммит, который вы хотите вернуть, уже был запушен в общий репозиторий, лучше использовать revert.

Заключение

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

Теперь вы знаете, что делать, если вы вдруг заметите баг в вашем последнем коммите, или окажется, что изменения вовсе не должны были попасть в коммит!

Как можно откатить изменения к последнему коммиту (вернуть репозиторий Git к предыдущему коммиту)

flat image where car devolves to a horse

Git имеет огромное количество инструментов по исправлению ошибок, возникающих во время работы. Для возврата репозитория к состоянию предыдущего коммита («откатить» последние изменения) или удаления коммитов, можно воспользоваться командой git-revert. Эта команда создает новый коммит (называемый обратным), отменяющий изменения, внесенные в старом коммите.

Например, если известно, что последний коммит внес в программу сбой и его нужно убрать, достаточно выполнить следующую команду

git revert HEAD

В процессе выполнения команды откроется редактор, в котором можно будет отредактировать описание нового коммита.

Проверь себя

Бесплатные тесты по HTML, CSS, JS и GIT

Если коммит, нуждающийся в откате, не последний, достаточно просто указать в команде его хэш, например:

git revert 0dd263

Если нужно обратить (сделать revert) несколько коммитов, можно указать GIT промежуток истории, например:

git revert 0dd263..HEAD

В процессе выполнения этой команды будут сделаны обратные коммиты, начиная с коммита 0dd263, не включая его и до крайнего (на который указывает HEAD). Например, если в этот промежуток попало два коммита, будут сделаны два обратных коммита, поочередно отменяющие изменения каждого из исходных. Как и в предыдущих случаях, для каждого из коммитов будет открыт редактор, в котором можно будет изменить текст коммита (commit message).

Команда git revert имеет набор опций, расширяющих ее возможности, например —no-commit или если кратко, то -n. Эта опция останавливает GIT на этапе добавления изменения в индекс, после чего автор может сделать коммит самостоятельно. Это может быть полезным в случае, если делается revert нескольких коммитов и мы хотим поместить весь фикс в один обратный коммит, а не в несколько. То есть переписав предыдущий пример следующим образом, будет создан один обратный коммит, а не 2:

git revert --no-commit 0dd263..HEAD git commit -m "revert last 2 features"

С другими опциями этой команды вы можете ознакомиться на этой страничке документации. Команда git revert — это безопасный и простой способ возврата репозитория к предыдущему состоянию. так как история не изменяется, а дополняется, что позволяет делать правки ранее опубликованных коммитов.

Git как вернуться (откатиться) к коммиту.

Выбираем нужный коммит, и в консоли (и сразу откатываемся на нем):

git checkout ID_коммита

Чтобы посмотреть, состояние проекта на определенном моменте, для этого есть команде git log. Один из способов просмотреть лог (последние 10 коммитов):

git log —oneline -10

Теперь чтобы вернуться на последний актуальный коммит:

git checkout master

Чтобы переключиться на определенный коммит, и создать отдельно ветку – набираем в консоли:

git checkout -b имя_новой_ветки ID_коммита

2. Теперь рассмотрим случай, когда возвращаться не нужно, а требуется только удалить все свои незакомиченные изменения (которые ещё не индексировались командой git add):

git stash save —keep-index

при этом появится ещё одно состояние проекта (карман).

Удалить все индексированные и неиндексированные изменения:
git stash save

Вернуть обратно:
git stash apply

Если «карман» не нужен, его можно удалить:
git stash drop

И наконец, если необходимо переключиться на предыдущий коммит, отменить все последующие и продолжить разработку с него, лучший способ – это использовать git revert.

Эта команда создает новые коммиты на каждый последующий от текущего состояния.

Синтаксис следующий:
git revert IDs_коммитов
или
git revert ID_коммита..ID_коммита

Замет нужно всё это дело подтвердить коммитом:
git commit -m ‘что и зачем’

3. Допустим запушили с помощью git push —force
чтобы только ваши изменения были в репозитории (на другие коммиты нам начхать). Крайне нежелательная команда, но что поделаешь…

Протолкнули со свистом. А что же делать с тестовым сайтом? Как на нем теперь вернуться в рабочее состояние?

Используем следующий набор команд:
git fetch —all
git reset —hard origin/master
git pull origin master

А чтобы не фиксировать изменения прав доступа:
git config core.filemode false
И глобально:
git config —global core.filemode false

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *