Как отменить последние коммиты в Git?

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

Как я могу отменить эти коммиты из локального репозитория?

17659
задан Hamza Yerlikaya 29 мая '09 в 21:09
источник поделиться

83 ответов

  • 1
  • 2
  • 3
$ git reset --soft HEAD~1  

Сброс перемотает текущую ветвь HEAD в указанную ревизию. В нашем примере выше мы хотели бы вернуться к той, которая была до текущей версии, - фактически, чтобы наша последняя фиксация была отменена.
Обратите внимание на флаг --soft: это гарантирует, что изменения в отмененных версиях сохраняются. После выполнения команды вы найдете изменения как незафиксированные локальные изменения в вашей рабочей копии.

$ git reset --hard HEAD~1  

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

14
ответ дан Joseph Mathew 26 окт. '17 в 21:11
источник поделиться

Вот сайт: Oh shit, git! ,

Вот много рецептов, как отменить вещи в git. Некоторые из них:

О, дерьмо, мне нужно изменить сообщение на мой последний бой!

git commit --amend
# follow prompts to change the commit message

О, дерьмо, я случайно совершил что-то, чтобы справиться с этим, должно быть, было в совершенно новой отрасли!

# create a new branch from the current state of master
git branch some-new-branch-name
# remove the commit from the master branch
git reset HEAD~ --hard
git checkout some-new-branch-name
# your commit lives in this branch now :)
11
ответ дан Eugen Konkov 28 февр. '18 в 11:34
источник поделиться

В IntelliJ IDEA вы можете просто открыть журнал репозитория Git, нажав Alt + 9, затем щелкните правой кнопкой мыши по какому-либо тегу из списка коммитов и выберите: "Сбросить текущую ветвь до..."

11
ответ дан Krzysztof Walczewski 20 июня '17 в 13:05
источник поделиться

Я нашел этот сайт, который описывает, как отменить все, что вы сделали в репозитории.

Некоторые команды:

git commit --amend        # Change last commit
git reset HEAD~ --soft    # Undo last commit
10
ответ дан Eugen Konkov 15 дек. '16 в 19:21
источник поделиться

Ради полноты я дам один очевидный очевидный метод, который был упущен предыдущими ответами.

Поскольку фиксация не была нажата, пульт не изменился, поэтому:

  1. Удалите локальное репо.
  2. Клонирование удаленного репо.

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

10
ответ дан Dominic Cerisano 28 июня '17 в 0:34
источник поделиться

Шаг 1: Получить Git commit-id: - git log

Шаг 2: Используйте Git reset: git reset --hard commit-id

Шаг 3: Если вы уже нажали свои изменения на пульте дистанционного управления, вы можете использовать git push для возврата изменения на пульт: git push origin branch-name -f

9
ответ дан Tom_cook 04 авг. '17 в 20:57
источник поделиться

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

В нижеприведенном изображении я проверяю ветку проверки (используя Git command git checkout -b test) в качестве локального и контрольного статуса (с использованием Git-команды git status) локального ветки, ничего не зафиксировать.

enter image description here

На следующем изображении изображения, которое вы видите здесь, я сделал несколько изменений в файле Filter1.txt и добавил этот файл в область сцены, чем зафиксировал мои изменения с некоторым сообщением (с помощью команды Git git commit -m "Doing commit to test revert back").

"-m для сообщения фиксации"

enter image description here

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

enter image description here

Таким образом, в приведенном выше изображении вы можете видеть идентификатор фиксации с каждой фиксацией и с вашим сообщением о фиксации теперь, что бы вы не вернули, или отмените копию, которая зафиксирует идентификатор и попадет ниже команды Git. git revert {"paste your commit id"}. Пример:

git revert 9ca304ed12b991f8251496b4ea452857b34353e7

enter image description here

Я вернул обратно свой последний коммит. Теперь, если вы проверите свой статус Git. Вы можете увидеть измененный файл, который является Filter1.txt, и все же выполнить commit.

enter image description here

9
ответ дан Raj S. Rusia 06 марта '18 в 15:26
источник поделиться

ГЛАВА:

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

git committ:

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

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

Метод 1: (если вы не знаете номер фиксации, но хотите перенести на первое место)

git reset HEAD~1  #it will move your head to last commit

Способ 2: (если вы знаете, что совершите переадресацию на ваш известный коммит)

git reset 0xab3 # номер фиксации

Примечание: если вы хотите узнать, что недавняя фиксация попытается это сделать, git log -p -1

вот графическое представление,

enter image description here

9
ответ дан Mohideen ibn Mohammed 18 июля '17 в 14:05
источник поделиться

Найдите последний хеш-код фиксации, просмотрев журнал:

git log

затем

git reset <the previous co>
9
ответ дан Praveen Singh 03 июня '17 в 22:32
источник поделиться

enter image description here

Предполагая, что вы работаете в Visual Studio, если вы входите в историю веток и просматриваете все свои коммиты, просто выберите событие до фиксации, которую вы хотите отменить, щелкните его правой кнопкой мыши и выберите " Revert. Легко.

9
ответ дан Uchiha Itachi 16 нояб. '16 в 0:07
источник поделиться

Снятие и отмена фиксации лучше всего, когда вы хотите, чтобы история была чистой, когда вы предлагаете заплатки в публичном филиале и т.д.

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

git rebase --onto HEAD~1 HEAD

Но если вы хотите сбросить 1 из многих коммитов, вы сказали

a → b → c → d → master

и вы хотите отказаться от commit 'c'

git rebase --onto b c

Это создаст 'b', поскольку новая база 'd' устраняет 'c'

6
ответ дан Khem 23 мая '18 в 2:52
источник поделиться

Попробуйте это, жесткий сброс предыдущей фиксации, где эти файлы не были добавлены, а затем:

git reset --hard <commit_hash>

Убедитесь, что у вас есть резервная копия изменений на всякий случай, поскольку это жесткий сброс, что означает, что они будут потеряны (если только вы не спрятали ранее)

5
ответ дан serdarsenay 17 апр. '18 в 18:41
источник поделиться

Поскольку вы передали некоторые вещи в своем филиале, идентификатор commit можно найти, если вы введете:

$ git log

Обратите внимание на предыдущий идентификатор фиксации вашего фиксации и выполните мягкий сброс.

Предположим, что ваш идентификатор фиксации - "C2", а предыдущий идентификатор фиксации - "C1", а затем сброс $ git C1

Ни HEAD не указывает на C1. C2 теперь нестационарен.

Если вы хотите удалить свои изменения из ветки вместе с нестационарностью, выполните сброс $ git --hard C1

5
ответ дан SKM 24 нояб. '17 в 10:16
источник поделиться
git reset --hard your_last_good_commit_hash_here

git push --force origin master
4
ответ дан sony vizio 17 марта '17 в 0:20
источник поделиться

Повторно опубликованный из моего ответа на другой экземпляр этого вопроса: Как раскрыть мой последний коммит в Git

Чтобы сохранить изменения от фиксации, которую вы хотите отменить

git reset --soft HEAD^

Чтобы уничтожить изменения от фиксации, которую вы хотите отменить

git reset --hard HEAD^

Вы также можете сказать

git reset --soft HEAD~2

для возврата двух коммитов.

Как упоминалось в charsi, если вы находитесь в Windows, вам нужно будет поставить HEAD или зафиксировать хеш в кавычках.

git reset --soft "HEAD^"
git reset --soft "asdf"
3
ответ дан Alex Kinnee 21 янв. '18 в 8:13
источник поделиться

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

git reset --soft

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

Теперь, если вы хотите удалить ненужные файлы в рабочем дереве, вы можете использовать

git clean -f //use -d with -f if you want to process directories too

Теперь вы можете делать свои изменения и совершать снова с помощью:

git commit -m "removed unwanted files from last commit"
1
ответ дан Vivek Maru 18 дек. '17 в 13:08
источник поделиться
git reset --soft HEAD~1  // For soft delete
git reset --hard HEAD~1  // Complete removal

Вы можете использовать бесплатную программу gitkraken для удобства управления.

1
ответ дан Tijo John 15 янв. '18 в 16:07
источник поделиться
git push --delete (branch_name) //this will be removing the public version of your branch

git push origin (branch_name) //This will add the previous version back
1
ответ дан Omkaar.K 18 мая '18 в 10:00
источник поделиться

На моей стороне я использую GitKraken и просто нужно нажать на кнопку отмены/повтора...

0
ответ дан E.Racineux 20 янв. '18 в 23:12
источник поделиться

Git Revert to Old Commit

git reset --hard hash-to-reverted

git push origin HEAD --force

0
ответ дан JosephStar 09 июля '18 в 1:37
поделиться

Если вы хотите отменить последнюю фиксацию, выполните следующий шаг:

1. git log: - для того, чтобы узнать commit-id, который вы хотите отменить

2. git revert commit-id: - используя эту команду, вы можете отменить фиксацию

или

1. git reset --hard HEAD ~ 1: - используйте это для сброса фиксации, вы также можете использовать commit-id вместо HEAD ~ 1

0
ответ дан Jitendra virani 06 февр. '18 в 8:31
источник поделиться

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

-2
ответ дан emory 11 окт. '17 в 3:48
источник поделиться

Visual Studio Code Git options

Я использую VS Code, и есть удобная интеграция git, которая позволяет мне отменить последнюю фиксацию одним щелчком мыши.

-2
ответ дан Lalnuntluanga Chhakchhuak 12 сент. '17 в 15:06
источник поделиться
  • 1
  • 2
  • 3

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