Как вернуть репозиторий Git в предыдущую фиксацию

Как я могу вернуться из текущего состояния в моментальный снимок, сделанный на определенной фиксации?

Если я делаю git log, то я получаю следующий вывод:

$ git log
commit a867b4af366350be2e7c21b8de9cc6504678a61b'
Author: Me <me@me.com>
Date:   Thu Nov 4 18:59:41 2010 -0400

blah blah blah...

commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4
Author: Me <me@me.com>
Date:   Thu Nov 4 05:13:39 2010 -0400

more blah blah blah...

commit 0766c053c0ea2035e90f504928f8df3c9363b8bd
Author: Me <me@me.com>
Date:   Thu Nov 4 00:55:06 2010 -0400

And yet more blah blah...

commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Author: Me <me@me.com>
Date:   Wed Nov 3 23:56:08 2010 -0400

Yep, more blah blah.

Как вернуться к фиксации с 3 ноября, т.е. зафиксировать 0d1d7fc?

6051
задан Crazy Serb 06 нояб. '10 в 19:58
источник поделиться

38 ответов

  • 1
  • 2

Это сильно зависит от того, что вы подразумеваете под "revert".

Временно переключитесь на другую фиксацию

Если вы хотите временно вернуться к нему, обмануть себя, а затем вернуться туда, где вы находитесь, все, что вам нужно сделать, это проверить желаемую фиксацию:

# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32

Или, если вы хотите совершить коммиты, пока вы там, идите вперед и создайте новую ветку, пока вы на ней:

git checkout -b old-state 0d1d7fc32

Чтобы вернуться туда, где вы были, просто просмотрите ветку, в которой вы были снова. (Если вы внесли изменения, как всегда, при переключении ветвей, вам придётся иметь дело с ними по мере необходимости. Вы можете сбросить их, чтобы выбросить их, вы могли бы спрятать, проверить, приложить поп, чтобы взять их с собой, вы могли бы совершить их к ветке, если вы хотите там филиал.)

Жесткое удаление неопубликованных коммитов

Если, с другой стороны, вы хотите действительно избавиться от всего, что вы сделали с тех пор, есть две возможности. Один, если вы не опубликовали ни одного из этих коммитов, просто выполните сброс:

# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.

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

Отменить опубликованные коммиты с новыми коммитами

С другой стороны, если вы опубликовали эту работу, вы, вероятно, не захотите сбросить ветвь, так как она эффективно переписывает историю. В этом случае вы действительно можете вернуть фиксации. С Git revert имеет очень специфическое значение: создайте фиксацию с помощью обратного патча, чтобы отменить ее. Таким образом, вы не переписываете какую-либо историю.

# This will create three separate revert commits:
git revert a867b4af 25eee4ca 0766c053

# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD

#Similarly, you can revert a range of commits using commit hashes:
git revert a867b4af..0766c053 

# Reverting a merge commit
git revert -m 1 <merge_commit_sha>

# To get just one, you could use 'rebase -i' to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .

# Then commit. Be sure and write a good message describing what you just did
git commit

git-revert manpage действительно покрывает много этого в описании. Еще одна полезная ссылка - это раздел git-scm.com, в котором обсуждается git-revert.

Если вы решите, что не хотите возвращаться в конце концов, вы можете вернуть реверс (как описано здесь) или вернуть обратно до возврата (см. Предыдущий раздел).

Вы также можете найти этот ответ полезным в этом случае:
Как переместить HEAD обратно в предыдущее место? (Отдельная головка)

7876
ответ дан Cascabel 06 нояб. '10 в 20:04
источник поделиться

Возврат рабочей копии к последней фиксации

Чтобы вернуться к предыдущему фиксации, игнорируя любые изменения:

git reset --hard HEAD

где HEAD является последним фиксатором в вашей текущей ветке

Возврат рабочей копии к более старой фиксации

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

# Resets index to former commit; replace '56e05fced' with your commit code
git reset 56e05fced 

# Moves pointer back to previous HEAD
git reset --soft HEAD@{1}

git commit -m "Revert to 56e05fced"

# Updates working copy to reflect the new commit
git reset --hard

Кредиты переходят к аналогичному вопросу о переполнении стека, Возврат к фиксации с помощью SHA-хеша в Git?.

1272
ответ дан boulder_ruby 21 авг. '12 в 9:19
источник поделиться

Здесь много сложных и опасных ответов, но на самом деле это легко:

git revert --no-commit 0766c053..HEAD
git commit

Это вернет все, начиная с HEAD, до хэша commit, что означает, что оно воссоздает это состояние фиксации в рабочем дереве, как если бы каждая фиксация с тех пор была возвращена. Затем вы можете зафиксировать текущее дерево, и оно создаст совершенно новую фиксацию, существенно эквивалентную фиксации, которую вы "вернули".

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

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

1230
ответ дан Yarin 12 февр. '14 в 7:18
источник поделиться

Лучшим вариантом для меня и, возможно, для других является опция Git reset:

git reset --hard <commidId> && git clean -f

Это был лучший вариант для меня! Это просто, быстро и эффективно!


Примечание: Как уже упоминалось в комментариях, не делайте этого, если вы делитесь своей веткой с другими людьми, у которых есть копии старых коммитов

Также из комментариев, если вы хотите использовать менее "ballzy" метод, вы можете использовать

git clean -i

155
ответ дан Pogrindis 22 окт. '13 в 14:53
источник поделиться

Если вы хотите "разогнать", стереть последнее сообщение фиксации и поместить измененные файлы в очередь, вы должны использовать команду:

git reset --soft HEAD~1
  • --soft указывает, что незаблокированные файлы должны быть сохранены как рабочие файлы, противоположные --hard, которые отбрасывают их.
  • HEAD~1 - последняя фиксация. Если вы хотите откат 3 фиксации, вы можете использовать HEAD~3. Если вы хотите откат к определенному номеру ревизии, вы также можете сделать это, используя свой SHA-хэш.

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

Источник: http://nakkaya.com/2009/09/24/git-delete-last-commit/

103
ответ дан Stephen Ostermiller 04 марта '14 в 20:25
источник поделиться

Прежде чем ответить, добавьте немного фона, объяснив, что это за HEAD.

First of all what is HEAD?

HEAD - это просто ссылка на текущую фиксацию (последнюю) в текущей ветке. В любой момент времени может быть только один HEAD (исключая git worktree).

Содержимое HEAD хранится внутри .git/HEAD и содержит 40 байтов SHA-1 текущего фиксации.


detached HEAD

Если вы не используете последнюю фиксацию - это означает, что HEAD указывает на предыдущую фиксацию в истории, она называется detached HEAD.

Enter image description here

В командной строке это будет выглядеть так: SHA-1 вместо имени ветки, поскольку HEAD не указывает на конец текущей ветки:

Enter image description here


Несколько вариантов восстановления после отсоединенной головки:


git checkout

git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back

Это проверит новую ветвь, указывающую на требуемую фиксацию. Эта команда будет проверять заданную фиксацию.

На этом этапе вы можете создать ветку и начать работу с этого момента:

# Checkout a given commit.
# Doing so will result in a 'detached HEAD' which mean that the 'HEAD'
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>

# Create a new branch forked to the given commit
git checkout -b <branch name>

git reflog

Вы всегда можете использовать reflog. git reflog отобразит любое изменение, которое обновило HEAD и проверив нужную запись reflog, вернет HEAD к этой фиксации.

Каждый раз, когда HEAD изменяется, будет новая запись в reflog

git reflog
git checkout HEAD@{...}

Это вернет вас к вашей желаемой фиксации

Enter image description here


git reset HEAD --hard <commit_id>

"Переместите" свою голову назад к желаемому фиксации.

# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
  • Примечание: (Начиная с Git 2.7) вы также можете использовать git rebase --no-autostash.

Эта схема иллюстрирует, какая команда выполняет что. Как вы можете видеть, reset && checkout изменяет HEAD.

Enter image description here

103
ответ дан CodeWizard 06 февр. '15 в 0:56
источник поделиться

Я пробовал много способов отменить локальные изменения в Git, и кажется, что это работает лучше всего, если вы просто хотите вернуться к последнему состоянию фиксации.

git add . && git checkout master -f

Краткое описание:

  • Он не будет создавать никаких коммитов, как это делает git revert.
  • Он не будет отсоединять ваш ГОЛОВ, как git checkout <commithashcode>.
  • Он перекроет все ваши локальные изменения и удалит все добавленные файлы с момента последнего фиксации в ветке.
  • Он работает только с именами ветвей, поэтому вы можете вернуться только к последнему фиксации в ветке таким образом.

Я нашел гораздо более удобный и простой способ достижения результатов, приведенных выше:

git add . && git reset --hard HEAD

где HEAD указывает на последнюю фиксацию в вашей текущей ветке.

Это тот же код, что и boulder_ruby, но я добавил git add . до git reset --hard HEAD, чтобы стереть все новые файлы, созданные с момента последнего коммита, так как это то, что большинство людей ожидают, когда вернусь к последней фиксации.

97
ответ дан Roman Minenok 29 июля '12 в 14:01
источник поделиться

Вы можете сделать это с помощью следующих двух команд:

git reset --hard [previous Commit SHA id here]
git push origin [branch Name] -f

Он удалит предыдущую фиксацию Git.

Если вы хотите сохранить свои изменения, вы также можете использовать:

git reset --soft [previous Commit SHA id here]

Затем он сохранит ваши изменения.

76
ответ дан kiran boghra 12 дек. '14 в 9:52
источник поделиться

Скажем, у вас есть следующие коммиты в текстовом файле с именем ~/commits-to-revert.txt (я использовал git log --pretty=oneline для их получения)

fe60adeba6436ed8f4cc5f5c0b20df7ac9d93219
0c27ecfdab3cbb08a448659aa61764ad80533a1b
f85007f35a23a7f29fa14b3b47c8b2ef3803d542
e9ec660ba9c06317888f901e3a5ad833d4963283
6a80768d44ccc2107ce410c4e28c7147b382cd8f
9cf6c21f5adfac3732c76c1194bbe6a330fb83e3
fff2336bf8690fbfb2b4890a96549dc58bf548a5
1f7082f3f52880cb49bc37c40531fc478823b4f5
e9b317d36a9d1db88bd34831a32de327244df36a
f6ea0e7208cf22fba17952fb162a01afb26de806
137a681351037a2204f088a8d8f0db6e1f9179ca

Создайте Bash оболочку script для возврата каждого из них:

#!/bin/bash
cd /path/to/working/copy
for i in `cat ~/commits-to-revert.txt`
do
    git revert $i --no-commit
done

Это возвращает все обратно в предыдущее состояние, включая создание файлов и каталогов, а также удаляет их, передает их в вашу ветку и сохраняет историю, но вы вернули ее обратно в ту же структуру. Почему Git не имеет git revert --to <hash> вне меня.

51
ответ дан Lance Caraccioli 14 окт. '11 в 0:51
источник поделиться

Дополнительные альтернативы решениям Jefromi

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

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

Альтернатива 1: Жесткий и мягкий сброс

Это очень немного измененная версия решения Charles Bailey для Вернуть фиксацию SHA-хешем в Git?:

# Reset the index to the desired commit
git reset --hard <commit>

# Move the branch pointer back to the previous HEAD
git reset --soft HEAD@{1}

# Commit the changes
git commit -m "Revert to <commit>"

В основном это работает, используя тот факт, что мягкие сбросы оставят состояние предыдущего фиксации, поставленного в области index/staging-area, которую вы затем можете зафиксировать.

Альтернатива 2: Удалите текущее дерево и замените его новым

Это решение исходит из svick-решения для Checkout old commit и делает его новым фиксатором:

git rm -r .
git checkout <commit> .
git commit

Аналогично альтернативе # 1, это воспроизводит состояние <commit> в текущей рабочей копии. Сначала нужно сделать git rm, потому что git checkout не удалит файлы, добавленные с <commit>.

48
ответ дан user456814 29 июня '14 в 20:51
источник поделиться

Вот гораздо более простой способ вернуться к предыдущему фиксации (и иметь его в неуправляемом состоянии, делать с ним все, что вам нравится):

git reset HEAD~1

Итак, нет необходимости в фиксации идентификаторов и т.д.:)

45
ответ дан Paul Walczewski 29 февр. '16 в 11:40
источник поделиться

ОК, возврат к предыдущему фиксации в git довольно прост...

Верните назад , не сохраняя изменения:

git reset --hard <commit>

Верните назад с сохранением изменений:

git reset --soft <commit>

Объясните:, используя git reset, вы можете reset указать определенное состояние, которое обычно используется с хешем фиксации, как вы видите выше.

Но, как вы видите, разница заключается в использовании двух флагов --soft и --hard, по умолчанию git reset с использованием флага --soft, но это хорошая практика, всегда использующая флаг, я объясняю все флаги:


- мягкий

Флаг по умолчанию, как объяснено, не нужно его предоставлять, не изменяет рабочее дерево, а добавляет все файлы изменений, готовые к фиксации, поэтому вы возвращаетесь к статусу фиксации, который изменяется на файлы, не выполняются.


- жесткий

Будьте осторожны с этим флагом, он сбрасывает рабочее дерево и все изменения в отслеживаемые файлы, и все будет позади!


Я также создал изображение ниже, которое может произойти в реальной жизни, работая с git:

git reset для фиксации

41
ответ дан Alireza 20 июля '17 в 18:55
источник поделиться

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

# Revert local master branch to November 3rd commit ID
git reset --hard 0d1d7fc32e5a947fbd92ee598033d85bfc445a50

# Revert remote master branch to November 3rd commit ID
git push -f origin 0d1d7fc32e5a947fbd92ee598033d85bfc445a50:master

Я нашел ответ из сообщения в блоге Удалить удаленный репозиторий Git для определенного коммита.

41
ответ дан markreyes 10 мая '16 в 20:21
источник поделиться

Ничто здесь не работало для меня, кроме этой точной комбинации:

git reset --hard <commit_hash>
git push origin <branch_name> --force

Ключ здесь - это принудительное нажатие, никаких дополнительных сообщений о фиксации/фиксации и т.д.

40
ответ дан serdarsenay 13 февр. '18 в 1:40
источник поделиться

Существует команда (не часть ядра Git, но она находится в пакете git-extras) специально для возврата и выполнения старых коммитов:

git back

На странице man она также может использоваться как таковая:

# Remove the latest three commits
git back 3
30
ответ дан Shadow Man 08 авг. '13 в 21:30
источник поделиться

После всех изменений, когда вы нажимаете все эти команды, вам, возможно, придется использовать:

git push -f ...

И не только git push.

30
ответ дан sivi 05 сент. '13 в 17:03
источник поделиться

Выберите требуемый фиксатор и проверьте его

git show HEAD
git show HEAD~1
git show HEAD~2 

пока не получите требуемую фиксацию. Чтобы заставить HEAD указывать на это, do

git reset --hard HEAD~1

или git reset --hard HEAD~2 или что-то еще.

23
ответ дан tonythomas01 26 февр. '14 в 15:52
источник поделиться

Вернитесь к последнему фиксации и игнорируйте все локальные изменения:

git reset --hard HEAD
19
ответ дан Mohammed Irfan Tirupattur 26 июля '16 в 16:13
источник поделиться

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

git add -A .
git reset --hard HEAD

Просто git reset --hard HEAD избавится от изменений, но он не избавится от "новых" файлов. В их случае они случайно перетащили важную папку где-то случайную, и все эти файлы обрабатывались как новые с помощью Git, поэтому reset --hard не исправил ее. Запустив git add -A . заранее, он явно отслеживал их все с помощью Git, который был уничтожен с помощью reset.

17
ответ дан Chris Moschini 11 окт. '15 в 3:10
источник поделиться

Это еще один способ прямого reset для недавнего фиксации

git stash
git stash clear

Он напрямую очищает все изменения, которые вы делали с момента последнего коммита.

PS: У него небольшая проблема; он также удаляет все недавно сохраненные изменения тайника. Я думаю, в большинстве случаев это не имеет значения.

17
ответ дан Point Networks 05 мая '16 в 14:43
источник поделиться

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

git reset --hard origin/master

https://superuser.com/questions/273172/how-to-reset-master-to-origin-master

17
ответ дан nevster 05 февр. '15 в 4:28
источник поделиться

Чтобы сохранить изменения от предыдущей фиксации в HEAD и перейти к предыдущей фиксации, выполните:

git reset <SHA>

Если изменения не требуются от предыдущей фиксации к HEAD и просто отмените все изменения, выполните следующие действия:

git reset --hard <SHA>
17
ответ дан Vishnu Atrai 28 июля '15 в 11:35
источник поделиться

Вы можете выполнить все эти начальные шаги самостоятельно и вернуться к git-репо.

  1. Вытащите последнюю версию своего репозитория из Bitbucket, используя команду git pull --all.

  2. Запустите команду git log с -n 4 с вашего терминала. Число после -n определяет количество коммитов в журнале, начиная с последнего фиксации в вашей локальной истории.

    $ git log -n 4

  3. Сбросьте git reset --hard HEAD~N истории вашего репозитория, используя git reset --hard HEAD~N где N - количество фиксаций, которые вы хотите вернуть назад. В следующем примере голова будет установлена одна фиксация, последняя фиксация в истории репозитория:

  4. Нажмите на изменение в git repo с помощью git push --force чтобы принудительно нажать на изменение.

Если вы хотите, чтобы репозиторий git имел предыдущую фиксацию

git pull --all
git reset --hard HEAD~1
git push --force
15
ответ дан Nanhe Kumar 06 апр. '17 в 15:20
источник поделиться

Revert - это команда откат коммитов.

git revert <commit1> <commit2> 

Пример:

git revert 2h3h23233

Он способен принимать диапазон от HEAD, как показано ниже. Здесь 1 говорит: "Верните последнюю фиксацию".

git revert HEAD~1..HEAD

а затем do git push

13
ответ дан Sireesh Yarlagadda 20 авг. '15 в 17:45
источник поделиться

Если ситуация срочная, и вы просто хотите сделать то, что задал вопросик в быстро и грязно, при условии, что ваш проект находится под каталогом "my проект":

  • Скопируйте весь каталог и назовите его чем-то другим, например "my project-copy"

  • У

    git reset --hard [first-4-letters&numbers-of-commit's-SHA]
    

Затем у вас есть две версии в вашей системе... вы можете проверять или копировать или изменять файлы, представляющие интерес, или что-то еще, из предыдущего коммита. Вы можете полностью отбросить файлы под "моим проектом - копией", если вы решили, что новая работа никуда не годится...

Очевидная вещь, если вы хотите продолжить состояние проекта, не отказываясь от работы, так как эта извлеченная фиксация - это снова переименовать ваш каталог: удалите проект, содержащий извлеченный фиксатор (или укажите ему временное имя) и переименуйте каталог "мой проект - копия" обратно в "мой проект". Тогда, вероятно, сделать еще одну фиксацию довольно скоро.

Git - это блестящее создание, но вы не можете просто "поднять его на лету": также люди, которые пытаются объяснить это слишком часто, предполагают предварительное знание других VCS [версия Системы управления] и слишком далеко зашли слишком далеко, и совершить другие преступления, например, использовать взаимозаменяемые термины для "проверки" - способами, которые иногда кажутся почти рассчитанными, чтобы запутать новичка.

Чтобы сэкономить много внимания, вам нужно в значительной степени прочитать книгу на Git - я бы рекомендовал "Управление версиями с помощью Git" . И если вы можете мне доверять (точнее, мои шрамы), когда я говорю "нужно", из этого следует, что вы также можете сделать это СЕЙЧАС. Значительная часть сложности Git происходит от ветвления, а затем и для ее устранения. Но из вашего вопроса нет причин, почему люди должны ослеплять вас наукой.

Особенно, если, например, это отчаянная ситуация, и вы новичок с Git!

PS: Еще одна мысль: на самом деле довольно просто сохранить репозиторий Git ( "repo" ) в каталоге, отличном от того, в котором находятся рабочие файлы. Это означало бы, что вам не пришлось бы копировать весь репозиторий Git, используя вышеуказанное быстрое и грязное решение. См. Ответ Fryer с помощью --separate- git -dir здесь. Будьте предупреждены, хотя: Если у вас есть репозиторий "отдельная директория", который вы не копируете, и вы выполняете жесткий reset, все версии, следующие за фиксацией reset, будут потеряны навсегда, если только вы не должны, как вам абсолютно необходимо, регулярно резервировать свой репозиторий, предпочтительно облако (например, Google Диск) среди других мест.

11
ответ дан mike rodent 19 марта '15 в 20:33
источник поделиться

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

Сначала вам нужно удалить развитие из источника:

git push origin :develop (note the colon)

Затем вам нужно получить статус, который вы хотите, позвольте мне предположить, что хеш фиксации EFGHIJK:

git reset --hard EFGHIJK

Наконец, нажмите снова развернуть:

git push origin develop
9
ответ дан George Ninan 20 марта '17 в 10:33
источник поделиться

Попробуйте выполнить сброс до требуемого фиксации -

git reset <COMMIT_ID>

(чтобы проверить, что COMMIT_ID использует git log)

Это приведет к сбросу всех измененных файлов в состояние без добавления.

Теперь вы можете checkout все не добавленные файлы

git checkout.

Проверьте git log чтобы проверить свои изменения.

ОБНОВИТЬ

Если у вас есть одно и только сообщение в вашем репо, попробуйте

git update-ref -d HEAD

9
ответ дан optimistanoop 07 мая '17 в 2:03
источник поделиться

Если вы хотите исправить некоторую ошибку в последнем коммите, хорошей альтернативой будет использование команды git commit -amend. Если последняя фиксация не указана какой-либо ссылкой, это будет делать трюк, поскольку она создает фиксацию с тем же родителем, что и последняя фиксация. Если нет ссылки на последнюю фиксацию, она просто будет отброшена, и эта фиксация будет последней фиксацией. Это хороший способ исправления коммитов, не возвращая фиксации. Однако он имеет свои собственные ограничения.

8
ответ дан Upul Doluweera 01 июля '15 в 14:35
источник поделиться

Внимание! Эта команда может привести к потере истории фиксации, если пользователь ошибочно допустил ошибку. Всегда имейте дополнительную резервную копию своего git где-то еще на всякий случай, если вы ошибаетесь, чем вам немного безопаснее. :)

У меня была аналогичная проблема, и я хотел вернуться к предыдущему Commit. В моем случае я не был настроен на то, чтобы сохранить новую фиксацию, поэтому я использовал Hard.

Вот как я это сделал:

git reset --hard CommitId && git clean -f

Это будет возвращено в локальном репозитории, здесь после использования git push -f будет обновлять удаленный репозиторий.

git push -f
7
ответ дан maytham-ɯɐɥʇʎɐɯ 08 янв. '18 в 17:15
источник поделиться

Откат (или возврат):

  • git revert --no-commit "commit-code-to-remove" HEAD (например, git revert --no-commit d57a39d HEAD)
  • git commit
  • git нажмите

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

Если вы обнаружили что-то не так:

git revert --abort

7
ответ дан Jagraj Singh 01 нояб. '16 в 17:29
источник поделиться
  • 1
  • 2

Другие вопросы по меткам