Отменить все изменения git: GIT. Отменить локальные изменения / Тяпк
Отмена изменений в Git – Zencoder
Обширная и достаточно сложная тема. Однако необходимая, если стоит задача изучить и иметь возможность работать в Git.
Эта тема касается отмены изменений в Git. Так как эта система контроля версий представляет из себя три ветки — рабочая директория, буфер, репозиторий — то будут рассмотрены все три способа.
Отмена изменений в рабочей директории
Для отмены изменений в рабочей директории необходимо выполнить одну команду:
git checkout -- name_of_file
Данная команда говорит Git вернуть состояние файла до того, каким оно было зафиксировано в репозитории. Другими словами, произойдет сброс изменений файла в рабочей директории проекта.
Обязательным условием использования команды является двойной дефис. Это “говорит” команде
, что в данном случае нужно оставаться в текущей ветке (branche).
Отмена изменений в буфере
Для отмены изменений в буфере нужно использовать команду:
git reset HEAD name_of_file
Эта команда “вернет” файл из буфера в рабочую директорию.
Отмена изменений в репозитории
Что касается репозитория, то здесь ситуация намного сложнее. Связано это с тем, что все коммиты в репозитории взаимосвязаны между собой.
Нельзя просто так взять и изменить какой-либо определенный коммит — все они находятся в своеобразной цепочке и один коммит проистекает из предыдущего коммита.
Другими словами, у каждого коммита есть свой коммит-родитель и коммит-потомок. Изменить какой-либо коммит — это значит вырвать его из этой цепочки взаимосвязей. Тем самым нарушится целостность всего репозитория и работа Git также нарушится. Ведь дело в том, что сама суть системы контроля версий Git основана на такой взаимосвязанной цепочке коммитов — один коммит проистекает из другого, второй из первого, третий из второго и так далее.
Как же поступить в данной ситуации?
Не все так мрачно, как кажется на первый взгляд. На самом деле существует много способов отмены изменений в репозитории. Ниже мы познакомимся с ними.
Опция amend
Если следовать из логического рассуждения, представленного выше, то получается, что в цепочке коммитов должен быть крайний коммит — тот, который был внесен совсем недавно. У этого коммита есть коммит-родитель, но нет коммита-потомка, так как этот коммит — крайний в цепочке.
Соответственно, раз у этого коммита нет потомков, то изменение этого коммита не повлечет за собой нарушение целостности всей цепочки коммитов. Измениться только этот коммит — и только.
Изменить крайний коммит можно просто перезаписав его. Для этой цели служит ключ . Команда в целом представляет из себя следующее:
git commit --amend -m "Add some commit"
Как только будет выполнена подобная команда, крайний коммит (тот, на котором находится указатель HEAD) будет перезаписан и это очень легко проследить — достаточно сравнить контрольную сумму SHA этого коммита до и после изменений.
Команда checkout
С помощью команды можно выполнять откат репозитория до нужной версии. Данный способ основан на самом факте существования цепочки коммитов, в которой в роли узлов выступают сами коммиты.
Образно можно представить данную ситуацию очень наглядно — как обычную магнитофонную ленту в старых кассетных магнитофонах. То место на ленте, где произошла последняя остановка и на котором находится звукозаписывающая головка — это и есть крайний коммит. Предыдущие коммиты — это места на ленте, когда происходила остановка записи в те самые моменты.
Команда может заставить указатель HEAD вернуться назад, на предыдущее место остановки — на предыдущий коммит. И необязательно этот коммит должен быть предыдущим — он может быть любым более ранним.
Все что для этого нужно — это указать тот коммит, к которому должен вернуться HEAD. Указать коммит просто — у каждого коммита есть уникальный идентификатор — контрольная SHA-сумма.
Команда возврата к нужному коммиту выглядит таким образом:
git checkout -- 4a2f59a32bd1074c42 name_of_file
Можно указать только часть SHA-суммы, так как это показано выше.
И тогда Git произведет сброс состояния (которые были сделаны в последнем коммите) файла в буфер. Если ввести команду
то увидим, что в буфере будут изменения, готовые для коммита. Это те самые изменения файла
, которые мы “выбросили” из репозитория.
Дальше выполняем “выброс” изменений файла из буфера в рабочую директорию, чтобы мы смогли внести правки в этот файл:
git reset HEAD name_of_file
Все, что будет внесено в этот файл, а затем закоммичено — будет иметь уже другую контрольную сумму. А следовательно — это уже будет совсем другой коммит.
Зеркалирование коммитов
Одной из разнообразных команд Git для внесения изменений в репозиторий является команда .
Суть ее очень проста — она отменяет все изменения, зафиксированные в крайнем коммите; и создает новый коммит, который является потомком предыдущего коммита, но в тоже время его зеркальной копией, противоположностью.
Синтаксис команды revert также прост:
git revert 4a2f59a32bd1074c42
где — это часть SHA-суммы крайнего коммита.
Команда reset
Команда также может изменять репозиторий Git. Делает она это путем смещения указателя HEAD на нужный коммит.
После такого смещения HEAD все более поздние коммиты никуда не пропадут из репозитория — они все еще там. Но теперь любое закоммиченное изменение произведет перезапись более поздних коммитов — и тогда они будут потеряны навсегда.
Ситуация очень похожа на то образное сравнение цепочки коммитов Git с магнитофонной лентой. Стоит отмотать ленту на 10-20 минут назад и снова начать запись, то все более поздние записи (относительно этого места) будут перезаписаны.
У команды есть три ключа, которые незначительно видоизменяют ее работу:
Команда
1 | git reset --soft 4a2f59a32bd1074c42 |
произведет смещение указателя HEAD на указанный коммит 4a2f59a32bd1074c42. При этом Git произведет сброс изменений в буфер. В результате буфер и рабочая директория будут идентичными между собой; а репозиторий будет переведен в более ранее состояние.
Команда
1 | git reset --mixd 4a2f59a32bd1074c42 |
аналогична предыдущей. Также будет произведено смещение указателя HEAD. Но теперь Git сбросит изменения в рабочую директорию. Репозиторий и буфер будут идентичными друг другу и находиться в более раннем состоянии.
Команда
1 | git reset --hard 4a2f59a32bd1074c42 |
самая “жесткая”. Также будет произведено смещение указателя HEAD на указанный коммит, но при этом будет произведен сброс всех трех деревьев Git — репозитория, буфера и рабочей директории. Все три будут идентичными друг другу.
Команда clean
В системе Git существует команда для удаления не отслеживаемых файлов в рабочей директории.
Разница между командой и
заключается в том, что при удалении файлов из рабочей директории первой командой они вроде как удаляются. Но на самом деле удаленные файлы все еще остаются в системе Git. Просто они помещены в раздел мусора и являются теперь мусором.
Команда как раз и выполняет очистку мусора в системе. Она удаляет все не отслеживаемые и неиспользуемые файлы.
Но даже это она делает очень осторожно. Если просто запустить , то ничего не произойдет. Система Git скажет, что команду
необходимо запускать либо с ключом
, либо с ключом
.
Запуск — это тестовый запуск команды удаления. Ничего удалено не будет — система лишь покажет, что она собирается удалить, какие файлы.
А вот запуск произведен реальное удаление всех файлов, которые Git считает мусором. И в этом случае эти файлы будут потеряны навсегда.
На этом все.
git
Как отменить commit и не облажаться / Хабр
Не только разработчикам-новичкам, но и ярым профессионалам приходится прибегать к отмене каких-либо изменений. И тогда, первое, что приходит на ум, — это команда git revert
, как самый безопасный способ. И тут есть подводные камни, про которые я хочу рассказать.
Возьмем простую ситуацию: разработчик решает реализовать математические функции. Но на половине пути понимает, что данную задачу было бы хорошо декомпозировать, допустим, на две подзадачи:
- Реализовать арифметические операции (сложение, вычитание, деление и т.д.)
- Реализовать числовые операции (максимальное значение, минимальное значение, модуль числа и т.д.)
Проверять будет проще да и тестировать. Но он уже начал ее реализовывать, коммиты уже созданы, и что же делать? Не переписывать же!
Рассмотрим дерево коммитов. Видим, что наш разработчик создал ветку functions
, класс Arithmetic, отвечающий за реализацию арифметических операций (коммит А), и класс Numerical, отвечающий за реализацию числовых операций (коммит N). Итого два класса и два коммита.
git revert
Решено, дабы ничего не переписывать, наследоваться от functions
и создать две ветки numerical
и arithmetic
. И соответственно отменить ненужные коммиты. То есть выполнить git revert N
в ветке arithmetic и git revert A
в ветке numerical. Гениально и просто!
Работа кипит и осталось дело за малым — смерджить мастер с данными ветками.
И что же мы получили? Ни класса Arithmetic, ни класса Numerical!
А все дело в том, что команда git revert
создает новый коммит с отменой изменений и не удаляет из истории коммиты. И в нашем случае после слияния веток получается 4 коммита:
A ⟶ N ⟶ revert A ⟶ revert N
То есть вариант с отменой изменений с помощью команды revert
вышел нам боком.
git reset
И тут мы вспоминаем, что есть такая команда как reset
, вот она в отличии от revert
точно удаляет коммиты из истории. Но есть одно НО… она сбрасывает все коммиты до указанного. Такое поведение нам не подходит, так как мы хотим выбрать какие коммиты удалить.
git rebase
Есть еще одно решение — использовать команду git rebase
для отмены изменений.
Вернемся к моменту создания двух веток numerical
и arithmetic
и выполним
git rebase -i –root
Теперь на уровне каждого коммита, который мы хотим отменить заменим pick на drop. И тогда выбранные нами коммиты сбросятся из истории. Например в ветке numerical
:
Тогда в истории у нас останутся только нужные нам коммиты.
Теперь при слиянии веток в master
получим оба класса.
Данный метод рабочий, только при условии работы в частной ветке, но если эти манипуляции провести в общей ветке, то при публикации (git push
) git
сообщает, что ветка устарела, так как в ней отсутствуют коммиты и отменяет публикацию.
Чтобы не бороться с git, старайтесь декомпозировать задачи заранее, а то можете словить сюрприз. Сталкивались ли вы с такими ситуациям, и если да, то как выходили из них?
Отмена изменений в GIT
Случай, который происходит довольно редко, но метко — это «Ааааа, я накосячил в git!!!». У меня случилось такое сегодня, когда я сделал rebase со squash’ем локальной ветки, не имея этих коммитов в другой ветке. Git не задумываясь слил мои коммиты в один и перенёс его, а мне нужно было сохранить исходную ветку, создав новый squash-коммит.
В общем, здесь я вспомнил про логи и отмену изменений. Git умеет отменять практически любые изменения. Все связанное с передвижением HEAD’а можно отменить reset’ом. В моём случае отмена rebase делается следующим способом…
Смотрим последние изменения (безопасно):
git reflog # для выхода жмем q # или смотреть последние 10 действий git reflog -n 10 # или тоже самое, но короче git reflog -10
Например, мой вывод
$ git reflog -n 6 703952e HEAD@{0}: rebase -i (finish): returning to refs/heads/BPN-3546 703952e HEAD@{1}: rebase -i (squash): BPN-3546 Add content type for Gauge in Drupal 9a23f7e HEAD@{2}: rebase -i (squash): # This is a combination of 2 commits. c1b984f HEAD@{3}: rebase -i (pick): BPN-3546 Add content type for Gauge in Drupal c6be61c HEAD@{4}: rebase -i (start): checkout refs/heads/Gauge cf81cc3 HEAD@{5}: commit (amend): BPN-3546 Add content type for Gauge in Drupal
Дальше находим необходимую точку и откатываем код до её состояния. Здесь я вижу, что последние 5 чекпоинтов связаны с ребейзом. Я их пропускаю и двигаю HEAD назад на 6 изменений.
Здесь нужно понимать, что нельзя отменить какое-то одно, определённое действие совершённое ранее (если оно не последнее в истории). Можно лишь вернуться в фиксированную точку во времени, отменив все действия от текущего момента.
Флаг --hard
будет означать, что добавленные изменения будут удалены.
Например, если вы откатываете коммит, в котором добавили файл, то после отката этот файл будет удалён из репозитория.Здесь можно использовать флаг --soft
, который означает, что после отката коммита файл останется как не зафиксированные изменения.
git reset --hard HEAD@{5} # для Windows могут понадобиться кавычки git reset --hard "HEAD@{5}"
Полезные ссылки
git отменить все незафиксированные или несохраненные изменения — git
Я пытаюсь отменить все изменения, произошедшие со времени моего последнего коммита. Я попробовал git reset --hard
и git reset --hard HEAD
после просмотра этого поста . Я отвечаю с головой теперь на 18c3773… но когда я смотрю на свой локальный источник, все файлы все еще там. Что я упускаю из виду?
git
command-line
undo
git-reset
Поделиться
Источник
Antarr Byrd
28 декабря 2012 в 20:46
6 Ответов
1345
Это приведет к удалению всех файлов, которые вы могли бы поместить с
git add
:git reset
Это приведет к отмене всех локальных незафиксированных изменений (должны быть выполнены в корневом РЕПО):
git checkout .
Вы также можете вернуть незафиксированные изменения только к определенному файлу или каталогу:
git checkout [some_dir|file.txt]
Еще один способ отменить все незафиксированные изменения (дольше вводить, но работает из любого подкаталога):
git reset --hard HEAD
Это приведет к удалению всех локальных неотслеживаемых файлов, так что останется только git отслеживаемых файлов:
git clean -fdx
WARNING:
-x
также удалит все игнорируемые файлы, включая те, которые указаны в.gitignore
! Вы можете использовать-n
для предварительного просмотра удаляемых файлов.
Подводя итог: выполнение приведенных ниже команд в основном эквивалентно fresh git clone
из исходного кода (но он ничего не перекачивает, поэтому намного быстрее):
git reset
git checkout .
git clean -fdx
Обычно это делается в скриптах сборки, когда вы должны убедиться, что ваше дерево абсолютно чистое — не имеет никаких модификаций или локально созданных объектных файлов или артефактов сборки, и вы хотите, чтобы оно работало очень быстро и не клонировало весь репозиторий каждый раз.
Поделиться
mvp
28 декабря 2012 в 21:04
127
Если вы хотите «отменить» все незафиксированные изменения, просто запустите:
git stash
git stash drop
Если у вас есть какие-либо неотслеживаемые файлы (проверьте, запустив git status
), они могут быть удалены при запуске:
git clean -fdx
git stash
создает новый тайник, который станет stash@{0} . Если вы хотите проверить сначала, вы можете запустить git stash list
, чтобы увидеть список ваших тайников. Это будет выглядеть примерно так:
stash@{0}: WIP on rails-4: 66c8407 remove forem residuals
stash@{1}: WIP on master: 2b8f269 Map qualifications
stash@{2}: WIP on master: 27a7e54 Use non-dynamic finders
stash@{3}: WIP on blogit: c9bd270 some changes
Каждый тайник назван в честь предыдущее сообщение.
Поделиться
Abram
18 июля 2014 в 20:59
18
существует также git stash
-which «stashes» ваши локальные изменения и может быть повторно применен в более позднее время или удален, если больше не требуется
больше информации о тайниках
Поделиться
keshav
28 декабря 2012 в 21:17
11
Я использую исходное дерево…. Можно ли отменить все несохраненные изменения в 2 простых шага:
1) просто нужно сбросить статус файла рабочего пространства
2) Выберите все файлы unstage (command +a), щелкните правой кнопкой мыши и выберите Удалить
Это так просто 😀
Поделиться
user1872384
14 июля 2016 в 17:19
5
Для тех, кто добрался сюда в поисках возможности отменить git clean -f -d
, с помощью которого был удален файл, созданный в eclipse ,
Вы можете сделать то же самое из UI, используя «restore from local history» для ref: Restore from local history
Поделиться
Abdul Rahman K
28 августа 2015 в 09:31
2
Государства, переходящие от одного коммита к новому коммиту
0. last commit,i.e. HEAD commit
1. Working tree changes, file/directory deletion,adding,modification.
2. The changes are staged in index
3. Staged changes are committed
Действие для перехода в состояние
0->1: manual file/directory operation
1->2: git add .
2->3: git commit -m "xxx"
Проверка diff
0->1: git diff
0->2: git diff --cached
0->1, and 0->2: git diff HEAD
last last commit->last commit: git diff HEAD^ HEAD
Вернуться к последней фиксации
2->1: git reset
1->0: git checkout . #only for tracked files/directories(actions include modifying/deleting tracked files/directories)
1->0: git clean -fdx #only for untracked files/directories(action includes adding new files/directories)
2->1, and 1->0: git reset --hard HEAD
Эквивалент git clone, без повторной загрузки чего-либо
git reset; git checkout .; git clean -fdx
Поделиться
Zii
01 июля 2016 в 08:54
Похожие вопросы:
Делает ли git stash stash все изменения или только незафиксированные
Если я буду прятать изменения с помощью git, будет ли он прятать только незафиксированные файлы или он будет прятать все, что не было перемещено в git?
SourceTree рассматривает извлеченные файлы как незафиксированные изменения
В некоторых неизвестных случаях, когда я вытаскиваю с помощью SourceTree, он рассматривает все вытащенные файлы как незафиксированные изменения и не позволит больше вытаскивать/толкать, если не…
Как отменить git —abort
Можно ли отменить отмену git? Сценарий заключается в том, что я был слияние двух ветвей, когда команды git слить его показывает сообщение об ошибке, у вас есть незафиксированные изменения, поэтому я…
Как отменить все незафиксированные изменения в Perforce?
Что такое команда p4 , чтобы выбросить все мои незафиксированные изменения в моей рабочей области Perforce? При использовании Git аналогичная команда выглядит следующим образом: git reset —hard
Отменить все незафиксированные изменения, измененные файлы, добавленные файлы и не добавленные файлы.
Как лучше всего отбросить незафиксированные изменения с помощью Git? Я читаю это, но хочу полностью понять, что делает каждый шаг. git отменить все незафиксированные или несохраненные изменения git…
Отменить одним файлом местных незафиксированные изменения в эгит (например, svn вернуться)
Сценарий: у меня есть локальные незафиксированные изменения в исходном файле, которые я хочу отменить и вернуть исходный файл в его первоначальное состояние. В командной строке git я бы сделал git…
Переместить коммиты ветвей в текущий каталог как незафиксированные изменения в рабочем каталоге?
Допустим, что я работаю над branchA , и мне нужно временно зафиксировать все незафиксированные изменения. Так что я создаю branchB и все фиксирую. Через некоторое время мне нужно переместить все эти…
Сделать git пуш плохо, когда есть несохраненные изменения
Обычно я использую что-то вроде следующего, чтобы проверить мои изменения, и если они в порядке, отправьте их в удаленный репозиторий: mvn install && git push Отлично работает, за…
Git — переключение ветвей все незафиксированные изменения исчезли
Я сделал так много изменений в стольких файлах в моем локальном РЕПО git. Но когда я переключил ветку с помощью mac Git-Client без фиксации изменений, появилось окно предупреждения о том, что есть…
Как вернуть мои незафиксированные изменения после git rebase?
У меня были некоторые незафиксированные изменения на моем локальном компьютере,и я хотел отправить запрос на вытягивание. Я сделал git pull —rebase и забыл совершить свои локальные изменения. git…
Как отменить последний Git-коммит
Из статьи вы узнаете, как правильно отменить последний Git-коммит. Приведена не только теория, но также необходимые команды.
Работая с системой управления версиями Git, вы рано или поздно столкнетесь с распространенной проблемой: случайный коммит ненужных критических изменений. Неплохо, если это только ваш проект, но если речь идет о чем-то более масштабном, предназначенном для целой команды разработчиков, такие ситуации оказываются очень неприятными. Разберемся, как это исправить.
Звучит как нонсенс, но только на первый взгляд. Суть в том, что выполняется пустой коммит, который удаляет нежелательные изменения после предыдущего.
Выполните:
git revert HEAD
Команда revert
означает возврат состояния к HEAD
– последнему коммиту в ветке.
Появится следующее сообщение:
Если открытие редактора не нужно, к исходной команде добавляется --no-edit
. Смотрим, как это работает:
git revert HEAD --no-edit
Чтобы удостовериться, что все сделано правильно, выполняется:
git log
Предыдущий неправильный коммит будет присутствовать в логах, но также вы увидите его удаление:
Проверьте Git-статус следующей командой:
git status
Если нужно откатиться к конкретному коммиту, вместо HEAD вписывается его хеш или тег (можно посмотреть в логах/истории). Иногда такая отмена невозможна из-за конфликтов, то есть произошли изменения, которые Git не может отменить. Увидеть конфликтный файл для дальнейшего решения проблемы поможет git status
.
Как видите, revert
оставляет «следы» в истории ветки, а иногда нужно подобную ошибку скрыть. К возможностям reset
относятся:
- Переписывание текущей ветки, которая будет указывать на необходимый коммит.
- Сброс буферной зоны (опционально).
- Сброс рабочего каталога (опционально).
Для начала отметьте нужную ветку:
git tag oops
Теперь выполните сброс до коммита oops:
git reset --hard t1
Посмотрите историю:
git hist
Однако все равно ничто не теряется. Запустите команду отображения всех коммитов:
git hist --all
Вы увидите, что ошибочные коммиты все еще на месте, просто удалены из нашей ветки. Опасность данного отката состоит в том, что в случае командной работы такой сброс может сбить с толку других разработчиков, поэтому настоятельно рекомендуется использовать revert
.
Различные способы удаления локальных изменений Git — git
Причина добавления ответа в данный момент :
До сих пор я добавлял заключение и «ответы» к самому моему первоначальному вопросу, делая вопрос очень длинным, следовательно, переходя к отдельному ответу.
Я также добавил более часто используемые команды git, которые помогают мне на git, чтобы помочь кому-то еще.
В основном для очистки всех локальных коммитов
$ git reset --hard
и
$ git clean -d -f
Первым шагом перед выполнением коммитов является настройка вашего имени пользователя и email, которое появляется вместе с вашим коммитом.
#Sets имя, которое вы хотите прикрепить к вашим транзакциям фиксации
$ git config --global user.name "[name]"
#Sets тот email, который вы хотите получить в момент совершения транзакции
$ git config --global user.email "[email address]"
#List глобальная конфигурация
$ git config --list
#List пульт дистанционного управления URL
$ git remote show origin
#check статус
git status
#List все локальные и удаленные филиалы
git branch -a
#create создать новую локальную ветвь и начать работать над этой ветвью
git checkout -b "branchname"
или же это может быть сделано в виде двухэтапного процесса
создать ветку: git branch branchname
работа над этой веткой: git checkout branchname
#commit локальные изменения [двухэтапный процесс: — добавление файла в индекс, что означает добавление в промежуточную область. Затем зафиксируйте файлы, которые присутствуют в этой промежуточной области]
git add <path to file>
git commit -m "commit message"
#checkout какой-то другой местный филиал
git checkout "local branch name"
#remove все изменения в локальной ветке [предположим, что вы внесли некоторые изменения в локальной ветке, например, добавили новый файл или изменили существующий файл, или сделали локальную фиксацию, но это больше не нужно]
git clean -d -f
и git reset --hard
[очистить все локальные изменения, внесенные в локальную ветвь, за исключением локальной фиксации]
git stash -u
также удаляет все изменения
Примечание:
ясно, что мы можем использовать либо
(1) комбинация git clean –d –f
и git reset --hard
OR
(2) git stash -u
для достижения желаемого результата.
Примечание 1: тайник, так как это слово означает » хранить (что-то) безопасно и тайно в определенном месте.- Это всегда можно восстановить с помощью git stash pop. Так что выбор между двумя вышеперечисленными вариантами-это вызов разработчика.
Примечание 2: git reset --hard
удалит изменения рабочего каталога. Перед выполнением этой команды обязательно сохраните все локальные изменения, которые вы хотите сохранить.
# Переключитесь на главную ветвь и убедитесь, что вы в курсе событий.
git checkout master
git fetch
[это может быть необходимо (в зависимости от конфигурации git) для получения обновлений на origin / master ]
git pull
# Объединить ветвь объекта в главную ветвь.
git merge feature_branch
# Сброс главной ветви в исходное состояние.
git reset origin/master
#Accidentally удалил файл из локального, как его восстановить обратно?
Выполните команду git status
, чтобы получить полный путь к файлу удаленного ресурса
git checkout branchname <file path name>
вот и все!
#Merge главная ветвь с каким-то другим почерком
git checkout master
git merge someotherbranchname
Местное отделение #rename
git branch -m old-branch-name new-branch-name
#delete местного отделения
git branch -D branch-name
Удаленную ветку #delete
git push origin --delete branchname
или
git push origin :branch-name
#revert фиксация уже отправлена в удаленный репозиторий
git revert hgytyz4567
#branch из предыдущей фиксации с использованием GIT
git branch branchname <sha1-of-commit>
#Change сообщение о фиксации самой последней фиксации, которая уже была удалена
git commit --amend -m "new commit message"
git push --force origin <branch-name>
# Удаление всех локальных коммитов в этой ветке [удаление локальных коммитов]
Чтобы отбросить все локальные коммиты на этой ветке, чтобы сделать локальную ветвь идентичной «upstream» этой ветви, просто запустите
git reset --hard @{u}
Ссылка: http://sethrobertson.github.io/GitFixUm/fixup.html
или do git reset --hard origin/master
[если локальная ветвь является главной]
# Отменить фиксацию, уже отправленную в удаленный репозиторий?
$ git revert ab12cd15
#Delete предыдущей фиксации от местных филиалов и удаленных филиалов
Пример использования: вы только что внесли изменения в свою локальную ветвь и сразу же перешли в удаленную ветвь, внезапно осознав, О нет! Мне не нужны эти перемены. А теперь что делать?
git reset --hard HEAD~1
[для удаления этой фиксации из локальной ветви. 1 обозначает сделанный вами коммит ONE]
git push origin HEAD --force
[обе команды должны быть выполнены. Для удаления из удаленной ветки]. В настоящее время извлеченная ветвь будет называться ветвью, в которой вы производите эту операцию.
#Delete некоторые из недавних коммитов из локального и удаленного РЕПО и сохранения в нужный вам коммит. ( своего рода возврат коммитов из локального и удаленного)
Предположим, у вас есть 3 коммита, которые вы отправили в удаленную ветку с именем ‘ develop
‘
commitid-1 done at 9am
commitid-2 done at 10am
commitid-3 done at 11am. // latest commit. HEAD is current here.
Вернуться к старой фиксации (изменить состояние ветви)
git log --oneline --decorate --graph
// чтобы увидеть все ваши коммиты
git clean -d -f
/ / очистите все локальные изменения
git reset --hard commitid-1
/ / локально возвращаясь к этому commitid
git push -u origin +develop
/ / переместите это состояние в удаленное. + делать силовой толчок
# Удалить локальное слияние git:
Case:
Я нахожусь на главной ветви и слил главную ветвь с новой рабочей ветвью phase2
$ git status
На ветке мастер
$ git merge phase2
$ git status
На ветке мастер
Ваша ветка опережает ‘origin/master’ на 8 коммитов.
Вопрос: Как избавиться от этого локального слияния git? Попробовал git reset --hard
и git clean -d -f
-оба не сработали.
Единственное, что сработало , — это любой из нижеперечисленных:
$ git reset —hard origin / master
или
$ git сброс —жесткий HEAD~8
или
$ git reset --hard 9a88396f51e2a068bb7
[sha commit code — это тот, который присутствовал до того, как все ваши коммиты слияния произошли]
#create файл gitignore
touch .gitignore
/ / создать файл в mac или unix пользователей
образец .gitignore содержание:
.project
*.py
.settings
Ссылка на шпаргалку GIT: https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf
Отменить слияние Git, которое еще не было запущено — git
В своей ветви master я сделал git merge some-other-branch
локально, но никогда не продвигал изменения в origin master. Я не собиралась сливаться, поэтому хотела бы все исправить. Когда я делал git status
после слияния, я получал это сообщение:
# On branch master
# Your branch is ahead of 'origin/master' by 4 commits.
Основываясь на некоторых инструкциях, которые я нашел , я попытался бежать
git revert HEAD -m 1
но теперь я получаю это сообщение с git status
:
# On branch master
# Your branch is ahead of 'origin/master' by 5 commits.
Я не хочу, чтобы моя ветвь была впереди по количеству коммитов. Как мне вернуться к этому моменту?
git
undo
git-merge
Поделиться
Источник
Matt Huggins
05 марта 2010 в 19:24
25 Ответов
3823
С помощью git reflog
проверьте, какая фиксация является одной из предшествующих слиянию (git reflog
будет лучшим вариантом, чем git log
). Затем вы можете сбросить его с помощью:
git reset --hard commit_sha
Есть и другой способ:
git reset --hard HEAD~1
Это вернет вам 1 коммит.
Имейте в виду, что любые измененные и незафиксированные/неэкранированные файлы будут сброшены в их неизмененное состояние . Чтобы сохранить их, либо прячьте изменения, либо смотрите опцию --merge
ниже.
Как @Velmont предложил ниже в своем ответе, в этом прямом случае используя:
git reset --hard ORIG_HEAD
это может дать лучшие результаты, так как должно сохранить ваши изменения. ORIG_HEAD
будет указывать на фиксацию непосредственно перед слиянием, так что вам не придется искать его самостоятельно.
Еще один совет-использовать переключатель --merge
вместо --hard
, так как он не сбрасывает файлы без необходимости:
git reset --merge ORIG_HEAD
—поглощать
Сбрасывает индекс и обновляет файлы в рабочем дереве, которые отличаются между <commit> и HEAD, но сохраняет те, которые отличаются между индексом и рабочим деревом (т. е. которые имеют изменения, которые не были добавлены).
Поделиться
Marcin Gil
05 марта 2010 в 19:34
1356
Предполагая, что ваш местный мастер не опередил origin/master,, вы должны быть в состоянии сделать это
git reset --hard origin/master
Тогда ваша локальная ветвь master
должна выглядеть идентично origin/master
.
Поделиться
randomguy3
17 марта 2011 в 18:06
Поделиться
Yuri Geinish
02 июня 2011 в 16:31
924
Странно, что не хватало самой простой команды. Большинство ответов работают, но отмена слияния, которое вы только что сделали, это простой и безопасный способ :
git reset --merge ORIG_HEAD
Ref ORIG_HEAD
будет указывать на исходную фиксацию до слияния.
(Параметр --merge
не имеет никакого отношения к слиянию. Это так же , как git reset --hard ORIG_HEAD
, но безопаснее, так как он не касается незафиксированных изменений.)
Поделиться
odinho — Velmont
29 января 2013 в 15:46
349
С более новыми версиями Git, если вы еще не зафиксировали слияние и у вас есть конфликт слияния , вы можете просто сделать это:
git merge --abort
От man git merge
:
[This] можно запустить только после того, как слияние привело к конфликтам.
git merge --abort
прервет процесс слияния и попытается восстановить состояние перед слиянием.
Поделиться
Travis Reeder
12 февраля 2013 в 02:13
119
Вы должны вернуться к предыдущей фиксации. Это должно сработать:
git reset --hard HEAD^
Или даже HEAD^^
, чтобы отменить этот обратный фиксат. Вы всегда можете дать полную ссылку на SHA, если не уверены, сколько шагов назад вы должны сделать.
В случае, если у вас возникли проблемы и ваша главная ветвь не имела локальных изменений, вы можете сбросить значение origin/master
.
Поделиться
MBO
05 марта 2010 в 19:31
81
В последнее время я использую git reflog
, чтобы помочь с этим. Это в основном работает только в том случае, если слияние JUST произошло, и оно было на вашей машине.
git reflog
может вернуть что-то вроде:
fbb0c0f HEAD@{0}: commit (merge): Merge branch 'master' into my-branch
43b6032 HEAD@{1}: checkout: moving from master to my-branch
e3753a7 HEAD@{2}: rebase finished: returning to refs/heads/master
e3753a7 HEAD@{3}: pull --rebase: checkout e3753a71d92b032034dcb299d2df2edc09b5830e
b41ea52 HEAD@{4}: reset: moving to HEAD^
8400a0f HEAD@{5}: rebase: aborting
Первая строка указывает на то, что произошло слияние. 2-я строка — это время до моего слияния. Я просто git reset --hard 43b6032
, чтобы заставить эту ветку отслеживать до слияния,и продолжить.
Поделиться
Parris
19 декабря 2014 в 17:51
47
С современной Git, вы можете:
git merge --abort
Старый синтаксис:
git reset --merge
Старая школа:
git reset --hard
Но на самом деле, стоит заметить, что git merge --abort
эквивалентно только git reset --merge
, учитывая, что MERGE_HEAD
присутствует. Об этом можно прочесть в Git помощи команды merge.
git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.
После неудачного слияния, когда нет MERGE_HEAD
, неудачное слияние может быть отменено с git reset --merge
, но не обязательно с git merge --abort
, поэтому они не являются только старым и новым синтаксисом для одной и той же вещи .
Лично я нахожу git reset --merge
гораздо более мощным и полезным в повседневной работе, так что это тот, который я всегда использую.
Поделиться
Martin G
08 мая 2015 в 19:13
36
Ладно, ответы других людей здесь были близки, но это не сработало. Вот что я сделал.
Делающий это…
git reset --hard HEAD^
git status
…
дал мне следующий статус.
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 3 and 3 different commit(s) each, respectively.
Затем мне пришлось ввести одну и ту же команду git reset
еще несколько раз. Каждый раз, когда я это делал, сообщение менялось на одно, как вы можете видеть ниже.
> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 3 and 3 different commit(s) each, respectively.
> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 2 and 3 different commit(s) each, respectively.
> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 1 and 3 different commit(s) each, respectively.
> git reset --hard HEAD^
HEAD is now at [...truncated...]
> git status
# On branch master
# Your branch is behind 'origin/master' by 3 commits, and can be fast-forwarded.
В этот момент я увидел, что сообщение о состоянии изменилось, поэтому я попытался сделать git pull
, и это, похоже, сработало:
> git pull
Updating 2df6af4..12bbd2f
Fast forward
app/views/truncated | 9 ++++++---
app/views/truncated | 13 +++++++++++++
app/views/truncated | 2 +-
3 files changed, 20 insertions(+), 4 deletions(-)
> git status
# On branch master
Короче говоря, мои приказы сводились к этому:
git reset --hard HEAD^
git reset --hard HEAD^
git reset --hard HEAD^
git reset --hard HEAD^
git pull
Поделиться
Matt Huggins
05 марта 2010 в 19:54
21
Вы можете использовать git reflog
, чтобы найти предыдущий заказ. Иногда это хорошее состояние, в которое вы хотите вернуться.
Конкретно,
$ git reflog
$ git reset --hard HEAD@{0}
Поделиться
stephjang
17 января 2014 в 22:36
13
Если вы еще не сделали этого, вы можете только использовать
$ git checkout -f
Это отменит слияние (и все, что вы сделали).
Поделиться
Idealmind
18 января 2013 в 15:25
13
Добрался до этого вопроса также глядя, чтобы вернуться к соответствию origin (то есть, NO совершает перед origin). Исследуя дальше, обнаружил, что есть команда reset
именно для этого:
git reset --hard @{u}
Примечание: @{u}
-это сокращение от origin/master
. (И, конечно же, вам нужен этот удаленный репозиторий, чтобы это работало.)
Поделиться
leanne
16 февраля 2017 в 21:54
11
Я смог решить эту проблему с помощью одной команды,которая не требует поиска идентификатора фиксации.
git reset --hard remotes/origin/HEAD
Принятый ответ не сработал для меня, но эта команда достигла тех результатов, которые я искал.
Поделиться
Ralph Ritoch
25 июля 2018 в 09:55
10
Просто для дополнительной опции, чтобы посмотреть, я в основном следовал модели ветвления, описанной здесь: http://nvie.com/posts/a-successful-git-branching-model/ и как таковой обычно сливался с --no-ff
(без быстрой перемотки вперед).
Я только что прочитал эту страницу, поскольку случайно слил тестовую ветвь вместо моей ветви выпуска с master для развертывания (website, master — это то, что работает). Тестовая ветвь имеет две другие ветви, объединенные в нее, и составляет около шести коммитов.
Поэтому, чтобы отменить весь коммит, мне просто нужен был один git reset --hard HEAD^
, и он вернул все слияние. Поскольку слияния не были быстро переадресованы, слияние было блоком, и один шаг назад — это «branch not merged».
Поделиться
Damien Byrne
09 июня 2011 в 00:54
10
Вы можете использовать только две команды для отмены слияния или перезапуска с помощью определенной фиксации:
git reset --hard commitHash
(вы должны использовать фиксацию, которую хотите перезапустить, например. 44a587491e32eafa1638aca7738)git push origin HEAD --force
(отправка новой локальной главной ветви в origin/master)
Удачи вам и вперед!
Поделиться
Matheus Abreu
12 декабря 2014 в 23:16
10
Самый простой ответ дает одиньо-Вельмонт
Сначала сделай git reset --merge ORIG_HEAD
Для тех, кто хочет сбросить настройки после внесения изменений, сделайте это
(Потому что это первый пост, увиденный для любых вопросов git reset merge)
git push origin HEAD --force
Это будет сброшено таким образом, что вы не получите объединенные изменения обратно после вытягивания.
Поделиться
Harsha
02 ноября 2017 в 23:22
10
Если вы находитесь в середине слияния вы всегда можете прервать его
git merge --abort
Поделиться
llioor
13 декабря 2018 в 14:05
7
Если ваше слияние и соответствующие коммиты еще не были запущены, вы всегда можете переключиться на другую ветвь, удалить исходную и создать ее заново.
Например, я случайно слил ветку Development в master и хотел ее отменить. Используя следующие шаги:
git checkout develop
git branch -D master
git branch -t master origin/master
Вуаля! Мастер находится на той же стадии, что и источник, и Ваше неверно слитое состояние стирается.
Поделиться
Stephan
26 июня 2012 в 11:15
4
Если вам нужно решение командной строки, я предлагаю просто пойти с ответом MBO.
Если вы новичок, вам может понравиться графический подход:
- Kick off
gitk
(из командной строки или щелкните правой кнопкой мыши в браузере файлов, если у вас есть это) - Вы можете легко обнаружить коммит слияния там — первый узел сверху с двумя родителями
- Перейдите по ссылке на первый / левый родитель (тот, который находится в вашей текущей ветви перед слиянием, обычно красный для меня)
- На выбранной фиксации щелкните правой кнопкой мыши «сбросить ветку сюда», выберите жесткий сброс там
Поделиться
inger
21 марта 2013 в 14:38
4
Стратегия: создайте новую ветку, в которой все было хорошо.
Обоснование: возврат к слиянию-это сложно. Существует слишком много решений, зависящих от многих факторов, таких как фиксация или принудительное слияние, а также наличие новых фиксаций после слияния. Кроме того, вам все еще нужно иметь относительно глубокое понимание git, чтобы адаптировать эти решения к вашему случаю. Если вы слепо следуете некоторым инструкциям, вы можете получить «empty merge», где ничего не будет объединено, и дальнейшие попытки слияния заставят Git сказать вам «Already up to date».
Решение:
Допустим, вы хотите объединить dev
в feature-1
.
Найдите ревизию, которую вы хотите получить слиянием:
git log --oneline feature-1 a1b2c3d4 Merge branch 'dev' into 'feature-1' <-- the merge you want to undo e5f6g7h8 Fix NPE in the Zero Point Module <-- the one before the merge, you probably want this one
Проверьте это (вернуться назад во времени):
git checkout e5f6g7h8
Создайте оттуда новую ветку и проверьте ее:
git checkout -b feature-1
Теперь вы можете перезапустить слияние:
Слияние:
git merge dev
Исправьте конфликты слияния.
Фиксация:
git commit
Когда вы будете удовлетворены результатами, удалите старую ветку:
git branch --delete feature-1
Поделиться
pyb
11 июня 2015 в 15:42
1
Я думаю, что вы можете сделать git rebase -i [hash] [branch_name]
, где [hash]
-это идентификация hash для того, как далеко назад вы хотите перемотать плюс один (или сколько коммитов назад вы хотите пойти), а затем удалить строки для коммитов в Редакторе, которые вам больше не нужны. Сохранить файл. Выход. Молиться. И он должен быть перемотан назад. Возможно , вам придется сделать git reset --hard
, но на данный момент это должно быть хорошо. Вы также можете использовать это для извлечения определенных коммитов из стека, если вы не хотите хранить их в своей истории, но это может оставить ваш репозиторий в состоянии, которое вам, вероятно, не нужно.
Поделиться
tychoish
08 марта 2010 в 02:55
1
Во-первых, убедитесь, что вы все сделали правильно.
Затем сбросьте хранилище в предыдущее рабочее состояние:
$ git reset f836e4c1fa51524658b9f026eb5efa24afaf3a36
или с помощью
--hard
( это удалит все локальные, не зафиксированные изменения! ):$ git reset f836e4c1fa51524658b9f026eb5efa24afaf3a36 --hard
Используйте hash, который был там до вашего ошибочно объединенного коммита.
Проверьте, какие коммиты вы хотите повторно зафиксировать в верхней части предыдущей правильной версии, выполнив следующие действия::
$ git log 4c3e23f529b581c3cbe95350e84e66e3cb05704f commit 4c3e23f529b581c3cbe95350e84e66e3cb05704f ... commit 16b373a96b0a353f7454b141f7aa6f548c979d0a ...
Примените ваши правые фиксации в верхней части правой версии вашего репозитория, используя:
С помощью cherry-pick (изменения, внесенные некоторыми существующими коммитами)
git cherry-pick ec59ab844cf504e462f011c8cc7e5667ebb2e9c7
Или вишня-выбор диапазона фиксации:
Сначала проверьте правильные изменения перед их объединением:
git diff 5216b24822ea1c48069f648449997879bb49c070..4c3e23f529b581c3cbe95350e84e66e3cb05704f
Сначала проверьте правильные изменения перед их объединением:
git cherry-pick 5216b24822ea1c48069f648449997879bb49c070..4c3e23f529b581c3cbe95350e84e66e3cb05704f
где это диапазон правильных коммитов, которые вы совершили (исключая ошибочно Совершенное слияние).
Поделиться
kenorb
29 января 2013 в 15:09
1
Если вы совершили слияние:
git reset HEAD~1
# Make sure what you are reverting is in fact the merge files
git add .
git reset --hard
Поделиться
Dorian
10 ноября 2016 в 15:57
0
Самый простой из самых простых шансов, гораздо проще, чем все сказанное здесь:
Удалите локальную ветвь (локальную, а не удаленную) и снова потяните ее. Таким образом, вы отмените изменения в своей главной ветви, и все будут затронуты изменением, которое вы не хотите нажимать. Начни все сначала.
Поделиться
Luis
15 июля 2016 в 14:16
0
Если вы заметили, что вам нужно вернуться сразу после слияния, и вы больше ничего не сделали после попытки слияния, вы можете просто выполнить эту команду:
git reset --hard HEAD@{1}
.
По сути, ваше слияние sha
будет указывать на HEAD@{0}
, если ничего больше не было зафиксировано после слияния, и поэтому HEAD@{1}
будет предыдущей точкой перед слиянием.
Поделиться
Dut A.
26 апреля 2016 в 18:52
Похожие вопросы:
Git удалить удаленное слияние и ветвление
Я работаю над своей веткой разработки. Я проверил ветку ‘branch-xxx’, зафиксировал свои изменения, а затем объединил ветку в Developer, только чтобы узнать, что этот кусок кода глючит! Как я могу…
Git отменить автоматическое слияние только для определенного файла, а не для всей ветви
Есть ли способ отменить автоматическое слияние одного файла, который был изменен вместо всей ветви в Git? Я хочу отменить это слияние: Автоматическое слияние public/stylesheets/application.css к…
Отменить фиксацию от мастера, используя запросы (защищенный мастер)
Можно ли вернуть фиксацию слияния на master из ветви функции, которая уже была перемещена на удаленный сервер? E.g. создать ветвь объекта из фиксации слияния в master, отменить фиксацию и объединить…
Как сделать Git честь отмененного слияния, которое не было запрошено?
Я уже сталкивался с этой ситуацией примерно 3 или 4 раза. Иногда Git захочет выполнить слияние. Это происходит в ответ на git commit <filename> -m <message> , за которым следует git push…
Как отменить слияние, которое было сделано до моего последнего коммита?
Длинная история короче: Я слился воедино Я ввел новые изменения. Я хочу отменить слияние, но сохранить новые изменения. Я знаю, что git reset —hard <hash> отменит фиксацию, и если я сделаю…
Bigquery отменяет или останавливает задание пакетного запроса, которое еще не запущено (Status.State = «PENDING»)
Если по какой-то причине требуется остановить/отменить задание пакетного запроса, которое еще не запущено (Status.State = PENDING), возможно ли это сделать? (используемая библиотека: net…
Как отменить слияние на Bitbucket?
Я создал слияние (в ветку ‘master’), которое теперь находится в репо Bitbucket. Короче говоря, мне нужно отменить это слияние. Я знаю, что вы можете сделать это на самом сайте Github, но Bitbucket…
Отменить слияние git, когда оно было выдвинуто
Как я могу отменить слияние, когда я уже нажал на мастер после слияния? Вот мои шаги: git add -A git commit -m some message git fetch origin master:master git rebase master (resolve merge conflicts)…
Отменить слияние в git и восстановить состояние с помощью rebase
Допустим, у меня есть этот график: A — B — C1.1 — D — E — F -G (master) \_ C2.1 _/(feature) И я хочу отменить слияние, добавить что-то вроде C1.2 в главную ветвь,а затем повторно объединить и…
Отменить git автоматическое слияние
После переключения ветвей я применил stash (как показано ниже), что привело к автоматическому слиянию. git stash apply Auto-merging src/clojure/project_src.clj On branch upgrade_project Changes…
Многочисленные возможности отмены в Git
GitLab Документы
Версия
GitLab.com (13.5-до)
- GitLab.com (13.5-до)
13,4
13,3
13,2
12.10
11.11
- Архивы
- GitLab.com (13.5-до)
GitLab
Омнибус
Бегун
Диаграммы
Документы GitLab
Установить
Требования
Пакеты омнибус
Kubernetes
Докер
Из источника
Лазурь
Облачная платформа Google (GCP)
Amazon Web Services (AWS)
Аналитика
Уровень экземпляра
Групповой уровень
Уровень проекта
Инфраструктура
Добавление и удаление кластеров
Добавить кластеры EKS
Добавить кластеры GKE
Кластеры на уровне группы
Кластеры на уровне экземпляра
Канарские развертывания
Кластерные среды
Развернуть доски
Управляемые приложения GitLab
Настройка Crossplane
Инфраструктура как код
Агент Kubernetes
Управленческий проект
Журналы пода
Runbooks
Бессерверный
Развертывание функций AWS Lambda
Защита ваших развернутых приложений
Группы
Аналитика вклада
Пользовательские шаблоны проектов на уровне группы
Эпос
Управляйте эпосами
Прокси-сервер зависимости
Групповой импорт / экспорт
Insights
Аналитика проблем
Итерации
Публичный доступ
SAML SSO для GitLab.com группы
Обеспечение SCIM
Подгруппы
Дорожные карты
Проекты
Безопасность приложений
Конфигурация безопасности
Сканирование контейнеров
Мониторинг угроз
Сканирование зависимостей
Список зависимостей
Статическое тестирование безопасности приложений
Секретное обнаружение
Динамическое тестирование безопасности приложений
API-фаззинг
Анализ покрытия
Панель безопасности
Автономные среды
Страницы уязвимостей
Интеграция сканера безопасности
Терминология Secure and Defend
Значки
Массовое редактирование
Владельцы кода
Соблюдение
Соответствие лицензии
Панель соответствия
Создать проект
Шаблоны описания
Развернуть ключи
Развернуть токены
Поиск файлов
GitLab Pages
Начиная
Домены по умолчанию, URL-адреса и базовые адреса
CI / CD для GitLab Pages
Пользовательские домены и сертификаты SSL / TLS
Интеграция Let’s Encrypt
Контроль доступа
Перенаправления
Изучение страниц GitLab
Интеграции
Обзор
Бамбук CI
Bugzilla
Пользовательский трекер проблем
Раздор
Электронные письма при нажатии
GitHub
Hangouts Chat
HipChat
Иркер
Jira
Панель разработки Jira
Mattermost уведомления
Команды с косой чертой Mattermost
Команды Microsoft
Макет CI
Прометей
Redmine
Уведомления Slack
Slack команды с косой чертой
Slack приложение
Вебхуки
YouTrack
Insights
Запросы на слияние
Разрешить сотрудничество
Утверждения
Тестирование производительности браузера
Создание запросов на слияние
Изменения кирки вишни
Качество кода
Нагрузочное тестирование производительности
Зависимости мерж-реквестов
Перемотка вперед
Слияние при успешном завершении конвейера
Разрешить конфликты
Отмена изменений
Просмотр и управление мерж-реквестами
Сквош и слияние
Версии
Рабочие процессы
Работа в процессе
Члены
Перенос проектов
Bitbucket Cloud
Сервер Bitbucket
ClearCase
CVS
FogBugz
Гемназия
GitHub
GitLab.com
Гитеа
Jira
Perforce Helix
Фабрикатор
Репо по файлу манифеста
Репо по URL
SVN
TFVC
Параметры push
Релизы
Репозитории
ветви
Атрибуты Git
Git LFS
Заблокированные файлы
Имя файла
История файлов
Зеркальное отображение
Защищенные филиалы
Защищенные теги
Правила push
Уменьшить размер репозитория
Подписанные коммиты
Подсветка синтаксиса
Веб-редактор
Веб-IDE
Требования
Настройки
Импорт / экспорт проекта
Токены доступа к проекту
Делитесь проектами
Фрагменты
Статический редактор сайта
Вики
вопросы
Конфиденциальные вопросы
Проблемы с перекрестными ссылками
CSV экспорт
CSV импорт
Управление дизайном
Сроки выполнения
Доски выпуска
Данные о выпуске и действия
Этикетки
Управление проблемами
Вехи
Графики выгорания
Несколько правопреемников
Связанные вопросы
Служба поддержки
Сортировка и упорядочивание списков задач
Вес
Увеличить масштаб встреч по вопросам
Операции
Панель показателей
Настроить оповещения для показателей
Встраивание показателей в Markdown
Встраивание метрик в Grafana
Пользовательские панели мониторинга
Свойства YAML панели инструментов
Настройки приборной панели
Типы панелей для дашбордов
Использование переменных
Шаблоны переменных для дашбордов
Библиотека метрик
Мониторинг ресурсов AWS
HAProxy
Kubernetes
NGINX
NGINX Ingress
NGINX Ingress VTS
Отслеживание ошибок
Отслеживание
Управление происшествиями
Оповещения
Интеграция предупреждений
Оповещения
Инциденты
Страница статуса
Флаги функций
CI / CD
Вступление
Начиная
Включить или отключить
Использование ключей SSH
Переход с CircleCI
Переход с Jenkins
.gitlab-ci.yml Ссылка
Включает примеры
Авто DevOps
Начиная
Требования
Настроить
Этапы
Обновление PostgreSQL
Кеширование
Чат
Развертывание в облаке
Интеграция с докером
Сборка докера
Образы докеров
Канико
Переменные среды
Предопределенные переменные
Где можно использовать переменные
Устаревшие переменные
Среды
Защищенная среда
Примеры
Тестирование производительности браузера
Clojure
Развертывание с Dpl
Эликсир
Сквозное тестирование
Разработка игр
Java с загрузкой Spring
Java с Maven
PHP с PHPunit и atoum
PHP с NPM и SCP
PHP с Laravel и Envoy
Python на Heroku
Рубин на Heroku
Scala на Heroku
Внешние репозитории
Bitbucket Cloud
GitHub
Дополнительные развертывания
Интерактивные веб-терминалы
Большие репозитории
Отчеты по метрикам
Трубопроводы
Архитектура
Эффективность трубопровода
Направленный ациклический граф
Многопроектные трубопроводы
Родительско-дочерние конвейеры
Конвейеры для запросов на слияние
Конвейеры для объединенных результатов
Объединить поезда
Артефакты работы
Расписания
Настройки
Запуск конвейеров
Обзор приложений
Бегунов
Примеры услуг
MySQL
PostgreSQL
Redis
Исправление проблем
CI Lint
Пакеты и реестры
Реестр пакетов
Реестр контейнеров
Прокси-сервер зависимости
Репозиторий композитора
Репозиторий Конана
Перейти прокси
Репозиторий Maven
Реестр НПМ
Репозиторий NuGet
Репозиторий PyPI
API
Ресурсы
.gitignore (шаблоны)
.gitlab-ci.yml (шаблоны)
Запросы доступа
Внешний вид (приложение)
Приложения
Аудит событий
Аватар
Наградные смайлы
Значки (проект)
Значки (группа)
ветви
Широковещательные сообщения
Кластеры (проект)
Кластеры (группа)
Кластеры (экземпляр)
Совершает
Реестр контейнеров
Настраиваемые атрибуты
Аннотации на панели инструментов
Зависимости
Прокси-сервер зависимости
Развернуть ключи
Развертывания
Обсуждения
Dockerfile (шаблоны)
Среды
Эпос
События
Особенности флаги
Списки пользователей с флагами функций
Периоды заморозки
Географические узлы
Аналитика групповой активности
Группы
импорт
Доски выпуска (проект)
Доски выпуска (группа)
вопросы
Проблемы (эпический)
Статистика проблем
Вакансии
Артефакты работы
Ключи
Этикетки (проект)
Ярлыки (группа)
Лицензия
Лицензии (шаблоны)
Ссылки (проблема)
Ссылки (эпические)
Управляемые лицензии
Markdown
Члены
Утверждение мерж-реквестов
Запросы на слияние
Объединить поезда
Вехи (проект)
Вехи (группа)
Пространства имён
Примечания (комментарии)
Настройки уведомлений
Пакеты
Страницы доменов
Токены личного доступа
Графики трубопроводов
Триггеры конвейера
Трубопроводы
Псевдонимы проекта
Импорт / экспорт проекта
Перемещение хранилища репозитория проекта
Статистика проекта
Шаблоны проектов
Проекты
Защищенные филиалы
Защищенные теги
Релизы
Ссылки на выпуск
Репозитории
Файлы репозитория
Подмодули репозитория
События итерации ресурсов
События ярлыка ресурса
Ключевые события ресурса
События состояния ресурса
События веса ресурса
Бегунов
SCIM
Поиск
Сервисы
Настройки (приложение)
Показатели Sidekiq
Sidekiq очереди
Фрагменты
Фрагменты (проект)
Статистика (приложение)
Предложения
Системные хуки
Теги
Списки дел
Пользователи
Переменные (проект)
Переменные (группа)
Версия
Уязвимости
Выводы уязвимости
Вики
GraphQL
Начиная
Справочник по GraphQL
Создать аудиторский отчет (пример)
Определите доски задач (пример)
от v3 до v4
Lint.gitlab-ci.yml
GitLab как провайдер OAuth3
Пользователь
Отчеты о нарушениях
Счет
Активные сессии
Удалить аккаунт
Разрешения
Токены личного доступа
Настройки профиля
Двухфакторная аутентификация
Обсуждения
Общее
Аутентификация
SSH
Интеграции
Git
Частичный клон
Устранение неполадок Git
Полезные команды
Настройки GitLab.com
.
Отменить изменения в репозитории Git — Справка
Отменить незафиксированные изменения
Вы всегда можете отменить локально сделанные изменения, прежде чем зафиксировать их:
- В представлении «Локальные изменения» выберите один или несколько файлов, которые вы хотите отменить. , и выберите Откат в контекстном меню или нажмите Ctrl + Alt + Z . Все изменения, внесенные в выбранные файлы с момента последней фиксации, будут отменены, и они исчезнут из активного списка изменений.
Положение представления «Локальные изменения» зависит от того, какой метод вы используете для фиксации изменений. Если вы используете диалоговое окно «Фиксация», незавершенные изменения управляются на вкладке «Локальные изменения» в окне инструмента «Контроль версий». Начиная с IntelliJ IDEA версии 2020.1, вы можете переключиться на немодальный интерфейс фиксации: в диалоговом окне «Настройки / Настройки» Ctrl + Alt + S перейдите и выберите параметр «Использовать немодальный интерфейс фиксации» (по умолчанию включен для новых установок) ).В этом случае локальные изменения и списки изменений управляются из окна инструмента фиксации Alt + 0 .
Отменить последнюю фиксацию
IntelliJ IDEA позволяет отменить последнюю фиксацию в текущей ветке.
Вы не можете отменить фиксацию, если она была перенесена в защищенную ветку, то есть ветвь, для которой принудительно —push не разрешено (настройте защищенные ветви в диалоговом окне «Настройки / Предпочтения» Ctrl + Alt + S в разделе «Контроль версий | Git).
Откройте окно инструмента Git Alt + 9 и перейдите на вкладку Журнал.
Выберите последнюю фиксацию в текущей ветке и выберите «Отменить фиксацию» в контекстном меню.
В открывшемся диалоговом окне выберите список изменений, в который будут перемещены изменения, которые вы собираетесь отменить. Вы можете выбрать существующий список изменений из списка «Имя» или указать имя нового списка изменений (по умолчанию используется сообщение фиксации).
Выберите опцию Установить активным, если вы хотите сделать список изменений с изменениями, которые вы собираетесь отменить, активным списком изменений.
Выберите параметр «Отслеживать контекст», если вы хотите, чтобы IntelliJ IDEA запомнила ваш контекст и перезагружала в настоящее время открытые файлы в редакторе, когда этот список изменений становится активным.
Отменить отправленную фиксацию
Если вы заметили ошибку в конкретной фиксации, которая уже была отправлена, вы можете отменить эту фиксацию.Эта операция приводит к новой фиксации, которая отменяет эффект фиксации, которую вы хотите отменить. Таким образом, история проекта сохраняется, так как исходная фиксация остается нетронутой.
- Найдите фиксацию, которую нужно отменить, на вкладке «Журнал» в окне инструмента Git Alt + 9 , щелкните ее правой кнопкой мыши и выберите «Отменить фиксацию» в контекстном меню. Этот параметр также доступен из контекстного меню фиксации в представлении истории файла.Откроется диалоговое окно «Применить изменения» с автоматически созданным сообщением о фиксации.
Если вы примените это действие к нескольким коммитам, выбранным в представлении журнала, будет создана отдельная фиксация для отмены каждого из них.
Если выбранная фиксация содержит несколько файлов, и вам нужно отменить только некоторые из них, отмените выбор файлов, которые вы не хотите трогать.
Нажмите «Принять», чтобы зафиксировать набор изменений, который отменяет изменения в выбранных файлах в этой конкретной фиксации.
Отменить выбранные изменения
IntelliJ IDEA позволяет отменить выбранные изменения из нажатой фиксации, если эта фиксация содержит несколько файлов и вам нужно отменить только некоторые из них.
В представлении журнала выберите фиксацию, содержащую изменения, которые вы хотите отменить.
- На панели «Измененные файлы» щелкните правой кнопкой мыши файл, который нужно восстановить, и выберите «Вернуть выбранные изменения» в контекстном меню.
Это приводит к новой фиксации, которая отменяет изменения, которые вы хотите отменить.
Отбросить фиксацию
В отличие от отмены фиксации, которая отражается в истории веток, вы можете отменить нажатую фиксацию в текущей ветке, не оставляя следов операции.
Как и любая операция, которая перезаписывает историю ветвей, для удаления фиксации требуется нажатие —force, и ее нельзя выполнить в защищенных ветвях (их можно настроить в диалоговом окне «Настройки / Предпочтения» Ctrl + Alt + S в разделе «Контроль версий | Git» .
Сбросить ветку до определенного коммита
Если вы заметили ошибку в наборе недавних коммитов и хотите повторить эту часть, вы можете откатить репозиторий до определенного состояния. Это делается путем сброса HEAD текущей ветки до указанной фиксации (и, при необходимости, сброса индекса и рабочего дерева, если вы предпочитаете не отражать отмену в истории).
Откройте окно инструмента контроля версий Alt + 9 и перейдите на вкладку Журнал.
Выберите фиксацию, на которую вы хотите переместить HEAD, и выберите «Сбросить текущую ветвь сюда» из контекстного меню.
- В открывшемся диалоговом окне Git Reset выберите способ обновления рабочего дерева и индекса и нажмите Reset:
Soft: все изменения из коммитов, которые были сделаны после выбранной фиксации, будут поэтапными (это означает они будут перемещены в представление «Локальные изменения», чтобы вы могли просмотреть их и при необходимости зафиксировать позже).
Смешанный: изменения, сделанные после выбранной фиксации, будут сохранены, но не будут помещены в промежуточную фиксацию.
Жесткий: все изменения, сделанные после выбранной фиксации, будут отменены (как поэтапные, так и зафиксированные).
Сохранить: зафиксированные изменения, сделанные после выбранной фиксации, будут отброшены, но локальные изменения останутся нетронутыми.
Получить предыдущую ревизию файла
Если вам нужно вернуть один файл вместо отмены всей фиксации, которая включает изменения в несколько файлов, вы можете вернуться к определенной версии этого файла:
Выберите нужный файл в любом представлении (в окне инструмента «Проект», в редакторе, в представлении «Локальные изменения» и т. Д.).
Выберите Git | Показать историю из главного меню VCS или из контекстного меню выбора. Вкладка «История» добавляется в окно инструмента Git, на котором отображается история выбранного файла, что позволяет просматривать и сравнивать его версии.
Когда вы определили версию, к которой хотите выполнить откат, выберите ее в списке и выберите «Получить» в контекстном меню.
Последнее изменение: 29 июня 2020 г.
.