Как старый коммит сделать основным

Добавил пользователь Валентин П.
Обновлено: 05.10.2024

Изменение последнего коммита

Сегодня мы поговорим о том, как можно быстро отменить выполненые изменения. На любой стадии может возникнуть необходимость что-либо отменить. Будьте осторожны, ибо не всегда можно отменить сами отмены. Это одно из немногих мест в Git'е, где вы можете потерять свою работу если сделаете что-то неправильно.

Сейчас мы рассмотрим самый частый случай - редактирование коммита, который вы только что выполнили.

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

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

Эта команда берёт индекс и применяет его к последнему коммиту. Если после последнего коммита не было никаких проиндексированных изменений (например, вы запустили приведённую команду сразу после предыдущего коммита), то состояние проекта будет абсолютно таким же и всё, что вы измените, это комментарий к коммиту.

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

Эффект от выполнения этой команды такой, как будто вы не выполнили предыдущий коммит, а еще раз выполнили команду git add и выполнили коммит.

Вот так просто можно изменить последний выполненный коммит.

Помните, что всё, что является частью коммита в Git'е, почти всегда может быть восстановлено. Даже коммиты, которые находятся на ветках, которые были удалены, и коммиты переписанные с помощью --amend могут быть восстановлены. Несмотря на это, всё, что никогда не попадало в коммит, вы скорее всего уже не увидите снова.

В том случае, если изменения, внесённые пользователем, находятся в режиме накопления, применить их к ветке можно с помощью команды git stash apply. Также можно запустить git diff — эта команда поможет выявить различия. Для того, чтобы затем избавиться от накопленных данных, нужно запустить команду:

Если существует более одного накопления, найти нужное можно с помощью команды:

git stash list затем можно применить его, воспользовавшись его индексом:

Необходимо учитывать, что отсчёт индексов ведётся от нуля.

Восстановление удалённого тега

В том случае, если необходимо восстановить случайно удалённый тег, начать можно с его поиска:

После того, как нужный тег найден, его следует восстановить:

Восстановление удалённого файла

Если вы случайно удалили файл, его можно быстро восстановить:

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

Восстановление удалённой ветки

С помощью комманды git reflog можно узнать хеш (SHA1) последнего коммита в удалённой ветке. Скопируйте этот хеш и используйте в команде:

После этого восстановить удалённую ветку можно будет вот такой командой:

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

Использование алиасов команд в командной строке

Устали каждый раз печатать git status? Этой команде можно присвоить простой алиас, который проще и быстрее вбивать в git.

— теперь нужно писать только git st

Можно пойти дальше и присвоить алиасы более сложным командам:

Теперь алиас git logme будет выводить все наши коммиты.

Коммит в неправильную ветку

Нужно переключиться на новую ветку, которую вы забыли предварительно создать:

А затем переключиться к оригинальной ветке:

Чтобы это сделать, можно воспользоваться командой git log и сохранить хеш (SHA1) последнего коммита, который нужно оставить.. Например, это a31a45c.

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

Обновление конкретного подмодуля

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

Откат к конкретному коммиту в истории

Эта команда установит HEAD на конкретный коммит. Также можно воспользоваться хешем коммита.

Отмена коммита до публикации изменений

Если вы сделали коммит, который впоследствии понадобилось отредактировать или полностью стереть, поможет команда git reset.

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

Отмена коммита после отправки его в master-репозиторий

Рассмотрим процедуру возврата одного или нескольких коммитов, которые нужно стереть из удалённой ветки. Обозначить конкретный коммит можно с помощью его хеша:

Отмена только коммита, который является вторым после последнего:

Простая отмена последнего коммита:

Отмена локальных изменений файлов

Простейшим способом избавиться от нежелательных изменений для файлов и папок является восстановление состояния последнего коммита. Сделать это можно с помощью специальной команды:

Кроме того, можно восстановить конкретный путь к файлу:

Отображение всех коммитов одного файла

Если вы хотите просмотреть все коммиты с изменениями конкретного файла, воспользуйтесь командой git log --follow -p -- myfile

Аргумент —follow позволяет вывести все изменения над файлом, даже если в процессе работы он был переименован.

Отображения числа коммитов от каждого участника

Хотите узнать, сколько коммитов сделал каждый участник команды?

Эта команда выведет список, отсортированный в порядке убывания количества коммитов: git shortlog -s -n

Отобразить коммиты, содержащие удалённые файлы

Узнать, в каких коммитах содержатся удалённые файлы, можно с помощью команды:

Она покажет список коммитов, в которых удалялись файлы.

Отсортировать коммиты по автору

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

Очистка всех скрытых состояний

Очистить все скрытые состояния можно следующей командой:

Переименование локальной и удалённой ветки

А затем — удалённую ветку: переименовать её напрямую нельзя, поэтому нужно будет её удалить, и затем опубликовать заново уже с новым именем. Прежде чем приступать к этим процедурам, следует убедиться, что никто из членов команды не работает с этой веткой! Удаляем ветку: git push origin :fix-bug25

А теперь заново публикуем её с новым именем: git push origin hotfix-users

Переименование тега

Чтобы переименовать существующий тег:

Перестать отслеживать существующие файлы

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

Она удалит изменённые файлы из зоны подготовленных файлов (staging area). Затем нужно запустить команду:

Подготовка удалённых файлов

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

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

Пометить конфликтующий файл, как разрешённый

Чтобы пометить один или несколько конфликтующих файлов, как разрешённые, чтобы их можно было нормально изменять, воспользуйтесь командой:

Затем можно запустить git commit, чтобы разрешить конфликты и опубликовать изменения.

Просмотр всех неотправленных коммитов

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

Кроме того, можно использовать:

Просмотр старой ревизии файла

Существует возможность просмотреть содержимое файла в конкретный момент времени в прошлом. Для этого нужно использовать команду:

Публикация локальной ветки для удалённого редактирования

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

Теперь они тоже смогут вносить изменения в эту ветку.

Сброс локальной ветки до состояния удалённой

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

Прежде всего нужно получить свежие обновления из удалённой ветки:

Синхронизировать ветку с master-репозиторием

После этого будут применены коммиты origin из master. После разрешения конфликтов процесс можно продолжить с помощью команды git rebase —continue. Теперь можно продолжать работу над своей веткой или осуществить её слияние (merge) с главным репозиторием.

Слияние локальных изменений с другой веткой

Это можно сделать прямо в процессе стандартного слияния (merge). Вам стоит сохранить историю слияний используя флаг —no-ff, что означает no fast forward.

Перейдите в ветку, в которую будут вливаться изменения, убедитесь в её актуальности и запустите процесс:

Совмещение двух и более коммитов

Здесь нам понадобится произвести интерактивное перебазирование. Если перебазирование происходит относительно master-ветки, то начать следует с команды git rebase -i master. Однако, если перебазирование происходит не относительно ветки, то нужно будет перебазироваться относительно HEAD.

Если есть необходимость в совмещении двух последних коммитов, можно использовать команду

После её ввода появятся инструкции по выбору коммитов. В том случае, если необходимо совместить все коммиты с первым старейшим коммитов, то в первой строке нужно написать pick, а для всех остальных коммитов изменить букву на f. Подробнее здесь

Совмещение коммитов по конкретной функции для добавления в ветку релиза

Если вы решите совместить и опубликовать коммиты, то возникнет новый коммит в ветке релиза, поэтому история ветки конкретной функции останется неизменной.

Ниже представлен пример того, как достичь подобного эффекта:

В конечном итоге останется только один коммит в ветке релиза, а история изменений в ветке разработки конкретной функции останется нетронутой.

Создание новой ветки с изменениями текущей

Убрать файл из буфера

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

Удаление внешней ветки

Если вы хотите удалить ветку, введите команду:

Удаление неотслеживаемых файлов и папок

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

Чтобы в принципе удалить их:

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

Удаление старых веток, стёртых из внешнего репозитория

Если ветка удалена из внешнего репозитория, её также можно стереть из локального репозитория с помощью команды

Она удалит старую ветку под названием название-удалённой-ветки, которая уже была стёрта из внешнего репозитория, но всё ещё доступна локально в remotes/название-удалённой-ветки.

Удаление файла из git с сохранением его локальной копии

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

Без Гита и жизнь не та

Получите практику в Git на курсах HTML Academy. Мы расскажем всё, что знаем сами, чтобы вы прокачали навыки в веб-разработке.


О некоторых крайне полезных командах в Git

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

1. Что такое история в Git?


Точный реестр всех коммитов, содержащих произведенные с файлами изменения. В нем вы можете отследить конкретные изменения и время их внесения или сравнить текущую версию с предыдущей. Где посмотреть историю? Введите через Git Bash команду:


Если у вас слишком много коммитов, вы можете переходить от одного комментария к другому с помощью клавиш со стрелками или клавиш Page Up / Page Down — как и в любом другом файле. Чтобы выйти, нажмите горячую клавишу (q).

2. О комментариях к коммитам

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

3. Всегда делайте коммиты

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

4. Исправьте последний комментарий к коммиту


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

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

5. Объедините последние Х коммитов в один


Команда HEAD~3 откатывает 3 верхних коммита, включая самый последний. В этом примере три ваших последних коммита будут стерты из лога, но изменения в коде останутся на месте. Теперь пора посмотреть, какой код нужно закоммитить, для этого вводим команду:


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

Обратите внимание, что HEAD обычно относится к последнему добавленному вами коммиту. Если вы не уверены, сверьтесь с логом Git. Если ваш последний коммит был замержен (не самый распространенный случай), команда HEAD~1 сотрет все коммиты из замерженной ветки. Чтобы узнать больше, посмотрите документацию.

6. Удалите последний коммит с изменениями

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


Теперь ваш последний коммит удален, как и все соответствующие изменения в коде.

7. Очистите историю своих коммитов

Самый эффективный способ очистить историю коммитов — воспользоваться командой rebase. Будьте осторожны: вы можете удалить коммит, случайно нажав не ту клавишу. Итак, давайте запустим rebase в диалоговом режиме (флаг -i) с помощью команды:



Как только вы вошли в него, вы увидите список из 5 последних коммитов (HEAD~5) внутри терминала. Все коммиты отсортированы по дате, т. е. наверху будет самый новый (этот список открывается с помощью Vim — текстового редактора Git по умолчанию, позволяющего редактировать текстовые файлы внутри терминала). И здесь же краткая инструкция с несколькими полезными командами. В большинстве случаев вам понадобятся команды squash и reword.

Заменив команду pick командой squash, вы удалите этот коммит из лога, и все изменения в коде будут сгруппированы с последним коммитом, выделенным командой pick.

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

Теперь вы можете перейти к следующему окну, где нужно написать один комментарий для группы коммитов, которые вы собираетесь склеить с помощью squash. Чтобы продолжить, нажмите ESC и введите:


Двоеточие (:) необходимо, чтобы показать, что вы хотите передать команду, (w) — чтобы записать (сохранить) изменения, (q) — чтобы выйти, а (!) — чтобы выполнить команду.

Обратите внимание, что каждая группа коммитов получит ваш комментарий. Результат можно проверить в логе Git.

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


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


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

8. Управляйте индексацией

Обычно следует отправлять коммиты к одному файлу или к группе связанных файлов. Но как тогда оперативно вносить изменения при индексации?

Скажем, у вас есть 3 файла, и нужно закоммитить только 2 из них. В этом случае можно попробовать следующую команду:


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


И проверьте результат:


Добавьте все файлы из какого-либо расширения, например CSS:


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


Сначала выберите опцию, введя соответствующий номер, например (3), чтобы откатить свои действия.

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

Когда завершите, нажмите (Enter).

Добавление файлов происходит по той же схеме. С помощью опции (4) добавьте неотслеживаемый файл.

Чтобы выйти, введите (q) в меню опций.

9. Вывод

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

Иногда возникает необходимость посмотреть всю рабочую директорию в том состоянии, в котором она была на момент определенного коммита. Сделать это очень просто. Вначале надо узнать хеш коммита, например через команду git log . После чего можно переключить рабочую директорию на данный коммит:

Однако, перед этой командой нужно сделать две вещи.

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

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

Та ветка, возле которой стоит звездочка, и является текущей веткой. И именно в конец текущей ветки нужно будет вернуться после просмотра старого сотояния рабочей директории.

Вернуться в самое последнее актуальное состояние можно следующей командой:

Данная команда переместит рабочую директорию в состояние, которое соответсвует самому последнему (а значит самому актуальному) коммиту в указанной ветке.

Внимание! В интернетах часто пишут, что для возврата к самому актуальному коммиту нужно дать команду:

git checkout HEAD

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

Если вы забыли, где вы находитесь, всегда можно дать команду:

HEAD отделён на c9f91ea8

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

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

ОТВЕТЫ

Ответ 1

Отменить фиксацию и повторить

Однако помните, что если вы добавили какие-либо новые изменения в индекс, использование commit --amend добавит их в ваш предыдущий коммит.

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

Вы также можете посмотреть на этот ответ:

Приведенный выше ответ покажет вам git reflog который используется, чтобы узнать, что такое SHA-1, к которому вы хотите вернуться. Как только вы нашли точку, к которой вы хотите отменить, используйте последовательность команд, как описано выше.

Ответ 2

Отмена коммита немного страшна, если вы не знаете, как он работает. Но это на самом деле удивительно легко, если вы понимаете.

Скажем, у вас это есть, где C - это ваша ГОЛОВА, а (F) - это состояние ваших файлов.

Вы хотите обнулить коммит C и больше никогда его не видеть. Ты делаешь это:

Теперь Б - ГОЛОВА. Поскольку вы использовали --hard , ваши файлы возвращаются в свое состояние при фиксации B.

Ах, но предположим, что commit C - это не катастрофа, а совсем немного. Вы хотите отменить коммит, но сохраните свои изменения для небольшого редактирования, прежде чем сделать лучший коммит. Начиная снова здесь, с C в качестве вашей головы:

Вы можете сделать это, оставив --hard :

В этом случае результат:

В обоих случаях HEAD - это просто указатель на последний коммит. Когда вы делаете git reset HEAD~1 , вы говорите Git переместить указатель HEAD назад на один коммит. Но (если вы не используете --hard ) вы оставляете свои файлы такими, какими они были. Теперь git status показывает изменения, которые вы зарегистрировали в C. Вы ничего не потеряли!

Для легкого прикосновения вы можете даже отменить фиксацию, но оставить свои файлы и индекс:

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

Еще одна вещь: предположим, вы уничтожили коммит, как в первом примере, но потом обнаружили, что он вам нужен в конце концов? Не повезло, правда?

Нет, еще есть способ вернуть его. Тип git reflog , и вы увидите список (частично) совершать ШАС (то есть, хэш), что вы переместились вокруг в Найти коммит вы уничтожили, и сделать это.:

Вы сейчас воскресили этот коммит. Комитеты на самом деле не уничтожаются в Git в течение примерно 90 дней, поэтому обычно вы можете вернуться и спасти того, от которого не хотели избавиться.

Ответ 3

Мне потребовалось некоторое время, чтобы понять, так что, возможно, это поможет кому-то.

Существует два способа "отменить" ваш последний коммит, в зависимости от того, сделал ли вы общедоступный отчет (нажал на удаленный репозиторий):

Как отменить локальную фиксацию

Пусть говорят, что я совершил локально, но теперь хочу удалить эту фиксацию.

Чтобы восстановить все до того, как это было до последнего фиксации, нам нужно выполнить reset до фиксации перед HEAD :

Теперь git log покажет, что наша последняя фиксация была удалена.

Как отменить публичную фиксацию

Если вы уже сделали свои коммиты общедоступными, вам нужно будет создать новый коммит, который "вернет" изменения, внесенные вами в предыдущую фиксацию (текущий HEAD).

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

Для получения дополнительной информации, ознакомьтесь с Основами Git - Отменить вещи

Ответ 4

Добавить/удалить файлы, чтобы получить то, что вы хотите:

Затем измените фиксацию:

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

Ответ 5

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

hard reset в HEAD-1 установит вашу рабочую копию в состояние фиксации до вашего неправильного фиксации.

Ответ 6

Чтобы изменить последнее фиксацию

Замените файлы в индексе:

Затем, если это частный филиал, измените фиксацию:

Или, если это общая ветка, выполните новую фиксацию:


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

ProTip ™: добавьте *.class в gitignore, чтобы остановить это повторение.

Чтобы вернуть фиксацию

Изменение коммита - идеальное решение, если вам нужно изменить последнее коммит, но reset более общее решение.

Вы можете сбросить git на любой фиксатор с помощью:

Где N - количество коммитов перед HEAD , а @~ возврат к предыдущему фиксации.

Итак, вместо внесения изменений в коммит вы можете использовать:

Проверьте git help reset , в частности разделы --soft --mixed и --hard , чтобы лучше понять, что это делает.

Reflog

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

Ответ 7

Использовать git revert

Чтобы получить идентификатор фиксации, просто используйте git log

Ответ 8

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

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

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

Теперь переданные файлы поступают из поэтапной области в непоставленную область. Теперь файлы готовы к редактированию, поэтому, что бы вы ни изменили, вы хотите перейти к редактированию и добавить его и создать новый/новый коммит.

Ответ 9

Если у вас установлена Git Extras, вы можете запустить git undo чтобы отменить последнюю фиксацию. git undo 3 отменяет последние 3 фиксации.

Ответ 10

Я хотел отменить последние 5 коммитов в нашем общем хранилище. Я просмотрел идентификатор ревизии, к которому я хотел откат. Затем я набрал следующее.

Ответ 11

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

Выберите количество коммитов, которые вы хотите перечислить, затем вызовите это (чтобы забрать последние три)

Затем Git удалит фиксации для любой удаляемой строки.

Ответ 12

Как отменить предыдущий локальный коммит

Просто верните свою ветку в предыдущее местоположение (например, используя gitk или git rebase ). Затем повторно примените изменения из сохраненной копии. После сборки мусора в вашем локальном хранилище будет похоже на то, что нежелательный коммит никогда не происходил. Чтобы сделать все это в одной команде, используйте git reset HEAD~1 .

Слово предупреждения: неосторожное использование git reset - хороший способ привести вашу рабочую копию в запутанное состояние. Я рекомендую новичкам Git избегать этого, если они могут.

Как отменить публичный коммит

Выполните обратный выбор вишни (git-revert), чтобы отменить изменения.

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

Затем отправьте обновленную ветку в общий репозиторий.

История коммитов покажет оба коммита отдельно.

Дополнительно: исправление частной ветки в публичном хранилище

Это может быть опасно - убедитесь, что у вас есть локальная копия ответвления.

Также обратите внимание: вы не хотите делать это, если кто-то еще работает над веткой.

Очистите свою ветку локально, затем оттолкнитесь.

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

Ответ 13

Если вы хотите окончательно отменить его, и вы клонировали некоторый репозиторий

Идентификатор фиксации можно увидеть

Тогда вы можете сделать -

Ответ 14

Если вы совершили ошибку, но не нажали,

HEAD ~ 1 является сокращением для фиксации перед головой. В качестве альтернативы вы можете обратиться к SHA-1 хэша, если вы хотите сбросить его. --soft удалит коммит, но он оставит все ваши измененные файлы "Изменения будут совершены", как сказал бы статус git.

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

Если вы уже нажали, и кто-то потянул, что обычно является моим делом, вы не можете использовать сброс git. Однако вы можете сделать git revert,

Это создаст новую фиксацию, которая отменяет все, введенное случайным фиксацией.

Ответ 15

В SourceTree (GUI для GitHub) вы можете щелкнуть правой кнопкой мыши фиксацию и выполнить "Обратный фиксат". Это должно отменить ваши изменения.

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

Ответ 16

Он отлично работает, чтобы отменить последнюю локальную фиксацию!

Ответ 17

Просто сбросьте его, выполнив команду ниже, используя git :

Объясните: что делает git reset , он в основном reset на любой фиксатор, на который вы хотите вернуться, тогда, если вы объедините его с --soft , он вернется, но сохранит изменения в ваших файлах, поэтому вы вернетесь на сцену, в которую был добавлен файл, HEAD - глава ветки, и если вы объединитесь с ~1 (в этом случае вы также используете HEAD^ ), он вернется только к одной команде, которую вы хотите.

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

How to undo the last commits in Git?

Ответ 18

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

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

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

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

Теперь проверьте свой журнал git. Он покажет, что наша последняя фиксация была удалена.

Ответ 19

Используйте reflog, чтобы найти правильное состояние

reflog before

REFLOG ПЕРЕД СБРОСОМ

Выберите правильный рефлог (f3cb6e2 в моем случае) и введите

reset effect

После этого HEAD возвращается в HEADid LOG AFTER RESET

Наконец, reflog выглядит как картинка ниже

reflog after

REFLOG FINAL

Ответ 20

"Сбросить рабочее дерево до последнего фиксации"

"Очистить неизвестные файлы от рабочего дерева"

ПРИМЕЧАНИЕ. Эта команда удалит предыдущую фиксацию, поэтому используйте ее с осторожностью! git reset --hard безопаснее -

Ответ 21

Он покажет вам все возможные действия, которые вы выполнили в своем репозитории, например, commit, merge, pull и т.д.

Ответ 22

Отменить последнее коммит:

git reset --soft HEAD^ или git reset --soft HEAD~

Это приведет к отмене последнего фиксации.

Здесь --soft означает сброс настроек.

HEAD~ или HEAD^ означает переход к фиксации перед HEAD.

Заменить последнюю фиксацию на новую фиксацию:

Он заменит последнее коммит новым фиксатором.

Ответ 23

Оформите заявку на филиал, который хотите вернуть, затем верните локальную рабочую копию обратно на коммит, который вы хотите быть последним на удаленном сервере (все после того, как оно пройдет до свидания). Для этого в SourceTree я щелкнул правой кнопкой мыши и выбрал "Сбросить BRANCHNAME на это коммит".

Затем перейдите в локальный каталог репозитория и выполните следующую команду:

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

Ответ 24

Введите git log и найдите последний код хеширования и введите:

Ответ 25

В моем случае я случайно совершил некоторые файлы, которые я не хотел. Поэтому я сделал следующее, и это сработало:

Проверьте результаты с помощью gitk или git log --stat

Ответ 26

Простой, запустите это в командной строке:

Ответ 27

Есть много способов сделать это:

Команда Git для отмены последнего фиксации/предыдущих коммитов:

Предупреждение: Не используйте --hard, если вы не знаете, что делаете. --hard слишком опасен, и он может удалить ваши файлы.

Основная команда для отмены фиксации в Git:

COMMIT-ID: идентификатор для фиксации

n: число последних коммитов, которые вы хотите вернуть

Вы можете получить идентификатор фиксации, как показано ниже:

где d81d3f1 и be20eb8 - идентификатор commit.

Теперь рассмотрим некоторые случаи:

Предположим, вы хотите вернуть последнее коммит 'd81d3f1'. Вот два варианта:

Предположим, вы хотите вернуть commit 'be20eb8':

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

Ответ 28

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

Ответ 29

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

Ответ 30

Для локальной фиксации

или если вы точно не помните, в какой фиксации это возможно, вы можете использовать

Для нажатой фиксации

Правильный способ удаления файлов из истории репозитория - использование git filter-branch . То есть,

Но я рекомендую вам использовать эту команду с осторожностью. Подробнее читайте в разделе git-filter-branch (1) Manual.

Читайте также: