git reset soft что делает

Отмена действий в Git

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Мы всегда готовы подчеркивать бесчисленные возможности, которые предлагает Git, и эта статья не станет исключением. Git известен своей потрясающей способностью отменять практически любые действия! Наверняка на память вам уже приходят тысячи печальных случаев, когда вы делали объединение, а потом понимали, что в ваши планы оно не входило. Даже если вам кажется, что ошибочное объединение— это величайшая неудача всей вашей жизни, сделайте глубокий вдох и дочитайте статью до конца.

Не существует какого-то одного традиционного способа отмены действий в Git. Отмена производится с помощью некоторых других команд. Мы рассмотрим “первую пятерку” сценариев, которые помогут вам исправить ошибку и двинуться дальше.

Отмена Git Add

Один из самых распространенных вопросов в сообществе Git звучит так: “Как откатить git add перед коммитом?” Вы можете отменить действия над конкретным файлом или все внесенные изменения.

Решение, которое потребуется для этого, весьма простое. Чтобы откатить один файл, просто вызовите команду git reset :

Для отмены всех изменений запустите следующее:

Как откатить Git Merge

Объединение может привести к нежелаемым результатам. Но, как уже было сказано, вы можете с легкостью исправить свою ошибку! Давайте представим сценарий, в котором вы уже отправили изменения и осознали, что вам нужно отменить сделанное объединение.

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

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

Как откатить Git Reset

Предлагаем суперкороткий способ отменить команду git reset:

Отмена последних коммитов в Git

Команду git reset можно использовать для отмены внесенных изменений:

x введите число. Например, если вы укажете

Другой метод — это команда git revert HEAD

Этот метод лучше всего работает в случае с общими публичными репозиториями.

Отмена Git Rebase

Допустим, вы выполнили команду git rebase в локальной ветке git и отправили ее в удаленную ветку. Следом вы поняли, что это не отвечает вашим ожиданиям, и захотели отменить сделанное.

Самый простой способ — найти главный коммит вашей ветки, запустив команду:

Заключение

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

Источник

Машина времени в git

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

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Здесь кружочками обозначены коммиты. Чем правее коммит, тем он новее. Коммит с хэшем 6e04e..-это самый первый коммит. Одно из основных понятий, которое стоит уяснить себе новичку, — это указатели на коммиты, а точнее некоторое «прозвище» того или иного коммита. Их тьма тьмущая, например: HEAD, master, FETCH_HEAD, ORIG_HEAD и т.д. Это я перечислил крупицу стандартных прозвищ. Их можно создавать и самим, но об этом впереди.

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

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Перенос указателя HEAD ( git checkout )

Откат по истории коммитов:

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Неужели мы потеряли всю историю? Как узнать самый «новый» коммит? Это не проблема — есть выход, и их несколько:

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Для прояснения механизма git checkout создадим новую ветку devel:

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Заметим, что указатель HEAD указывает на вершину ветки devel.

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

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Возвращение в ветку master происходит также безболезненно:

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

2 :
git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

2 :
git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

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

Посмотрим на изменения:

Ну а теперь сделаем трюк — объединяем коммиты

Вводим сообщение, сохраняемся. Теперь наша история выглядит вот так:

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Важное замечание — ORIG_HEAD по-прежнему указывает на коммит d79fb… Если мы сейчас выполним команду git checkout ORIG_HEAD, то мы получим так называемое состояние detach HEAD. Оно характеризуется тем, что HEAD указывает не на вершину ветки, а просто на коммит. HEAD всегда должен указывать только на вершину какой-либо ветки!

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Удачных вам путешествий по истории своего репозитория!

При подготовке материала использовались следующие источники:
Самый лучший manual — книга: ProGit
Наглядная справка по git: A Visual Git Reference (Русская версия)

UPD:
В комментариях посоветовали ещё один полезный ресурс по git`у: githowto

Источник

Доходчивое объяснение Git Reset

Перевод статьи «Git Reset Explained – How to Save the Day with the Reset Command».

«Помогите! Я закоммитил не в ту ветку!» «Ну вот, опять… Где мой коммит?» Знакомые ситуации, правда?

Я такое слышал неоднократно. Кто-то окликает меня по имени и просит помочь, когда у него что-то пошло не так с git. И такое происходило не только когда я учил студентов, но также и в работе с опытными разработчиками.

Со временем я стал кем-то вроде «того парня, который разбирается в Git».

Мы используем git постоянно, и обычно он помогает нам в работе. Но порой (и куда чаще, чем нам хотелось бы!) что-то идет не так.

Бывает, мы отправляем коммит не в ту ветку. Бывает, теряем часть написанного кода. А можем и добавить в коммит что-то лишнее.

По git есть много онлайн-ресурсов, и часть из них (например, вот эта статья) фокусируется на том, что делать в таких вот нежелательных ситуациях.

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

В прошлом посте я рассказывал о внутреннем устройстве Git. И хотя понимать его полезно, читая теория практически всегда недостаточна. Как применить свои знания внутреннего устройства git и использовать их для решения возникающих проблем?

Исходные условия — рабочая директория, индекс и репозиторий

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

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

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Давайте создадим в рабочей директории какой-нибудь файл и запустим команду git status :

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

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

Вместо этого изменения сначала регистрируются в индексе (или в стейджинге). Оба эти термина означают одно и то же, и оба часто используются в документации git. В этой статье мы тоже будем пользоваться обоими, так как они полностью взаимозаменяемы.

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Рабочая директория находится в точно таком же состоянии, как индекс и репозиторий.

При выполнении git commit текущая ветка master начинает указывать на только что созданный объект commit.

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Внутренняя работа git reset

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

Стадия 1. Обновление HEAD — git reset —soft

Если вернуться к нашему примеру, HEAD будет указывать на commit 2, и таким образом new_file.txt не будет частью дерева текущего коммита. Но он будет частью индекса и рабочей директории.

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Стадия 2. Обновление индекса — git reset —mixed

В нашем примере это значит, что индекс будет в том же виде, что и commit 2:

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Стадия 3. Обновление рабочей директории — git reset —hard

1, а также обновления индекса до (уже обновленного) HEAD, git пойдет еще дальше и обновит рабочую директорию до состояния индекса.

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

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Собственно, мы вернули весь процесс на этап до создания файла my_file.txt.

Применяем наши знания в реальных сценариях

1. Упс! Я закоммитил что-то по ошибке

Рассмотрим следующий сценарий. Мы создали файл со строкой «This is very importnt», отправили его в стейджинг, а после — в коммит.

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

А затем — ой! — обнаружили, что в предложении у нас опечатка.

2. Упс! Я сделал коммит не в ту ветку, а эти изменения мне нужны в новой ветке

Со всеми нами такое случалось. Сделал что-то, закоммитил…

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

О нет, мы сделали коммит в ветку master, а надо было создать новую и затем сделать пул-реквест.

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

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Собственно, от желаемого состояния нас отделяют три изменения.

Мы можем достичь желаемого положения в три шага:

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

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

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

3. Упс! Я отправил коммит не в ту ветку, а он мне нужен в другой (уже существующей) ветке

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

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Давайте снова изобразим текущее и желаемое положение:

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

У нас опять же есть три отличия.

Теперь наше положение следующее:

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

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

1 — теперь мы вернулись к изначальному состоянию этой ветки.

Таким образом мы достигли желаемого положения:

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Итоги

Также мы применили свои новые знания для решения жизненных задач.

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

Источник

Раскрытие тайн reset

Три дерева

Разобраться с командами reset и checkout будет проще, если считать, что Git управляет содержимым трёх различных деревьев. Здесь под «деревом» мы понимаем «набор файлов», а не специальную структуру данных. (В некоторых случаях индекс ведет себя не совсем так, как дерево, но для наших текущих целей его проще представлять именно таким.)

В своих обычных операциях Git управляет тремя деревьями:

Снимок последнего коммита, родитель следующего

Снимок следующего намеченного коммита

Указатель HEAD

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

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

Команды cat-file и ls-tree являются «служебными» (plumbing) командами, которые используются внутри системы и не требуются при ежедневной работе, но они помогают нам разобраться, что же происходит на самом деле.

Индекс

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

Технически, индекс не является древовидной структурой, на самом деле, он реализован как сжатый список (flattened manifest) — но для наших целей такого представления будет достаточно.

Рабочий Каталог

Технологический процесс

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

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

На данном этапе только дерево Рабочего Каталога содержит данные.

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

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Теперь мы хотим внести изменения в файл и закоммитить его. Мы пройдём через всё ту же процедуру; сначала мы отредактируем файл в нашем рабочем каталоге. Давайте называть эту версию файла v2 и обозначать красным цветом.

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Сейчас команда git status не показывает ничего, так как снова все три дерева одинаковые.

Переключение веток и клонирование проходят через похожий процесс. Когда вы переключаетесь (checkout) на ветку, HEAD начинает также указывать на новую ветку, ваш Индекс замещается снимком коммита этой ветки, и затем содержимое Индекса копируется в ваш Рабочий Каталог.

Назначение команды reset

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

В следующих примерах предположим, что мы снова изменили файл file.txt и закоммитили его в третий раз. Так что наша история теперь выглядит так:

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Шаг 1: Перемещение указателя HEAD

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Шаг 2: Обновление Индекса (—mixed)

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

), выполнение команды также остановится на этом шаге.

Шаг 3: Обновление Рабочего Каталога (—hard)

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Резюме

Команда reset в заранее определённом порядке перезаписывает три дерева Git, останавливаясь тогда, когда вы ей скажете:

Делает Рабочий Каталог таким же как и Индекс.

Reset с указанием пути

Перемещает ветку, на которую указывает HEAD (будет пропущено)

Делает Индекс таким же как и HEAD (остановится здесь)

То есть, фактически, она копирует файл file.txt из HEAD в Индекс.

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Именно поэтому в выводе git status предлагается использовать такую команду для отмены индексации файла. (Смотрите подробности в Отмена индексации файла.)

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Слияние коммитов

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

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

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Затем просто снова выполните git commit :

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Сравнение с checkout

Без указания пути

Второе важное отличие заключается в том, как эти команды обновляют HEAD. В то время как reset перемещает ветку, на которую указывает HEAD, команда checkout перемещает сам HEAD так, чтобы он указывал на другую ветку.

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

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

С указанием пути

Заключение

Ниже приведена памятка того, как эти команды воздействуют на каждое из деревьев. В столбце «HEAD» указывается «REF» если эта команда перемещает ссылку (ветку), на которую HEAD указывает, и «HEAD» если перемещается только сам HEAD. Обратите особое внимание на столбец «Сохранность РК?» — если в нем указано NO, то хорошенько подумайте прежде чем выполнить эту команду.

Источник

git reset

Git reset и три дерева Git

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

Рабочий каталог

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

Раздел проиндексированных файлов

Далее мы добавим измененный файл reset_lifecycle_file в раздел проиндексированных файлов.

История коммитов

Последнее дерево — история коммитов. Команда git commit добавляет изменения в постоянный снимок, который находится в истории коммитов. Этот снимок также включает состояние раздела проиндексированных файлов на момент выполнения коммита.

Порядок действий

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

git checkout b

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

git reset b

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Основные параметры

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

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

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

—mixed

Это режим работы по умолчанию. Указатели ссылок обновляются. Раздел проиндексированных файлов сбрасывается до состояния указанного коммита. Любые изменения, которые были отменены в разделе проиндексированных файлов, перемещаются в рабочий каталог. Давайте продолжим.

Теперь давайте мягко сбросим текущее состояние репозитория.

Прежде чем вернуться назад во времени, проверим текущее состояние репозитория.

Чтобы выяснить, что произошло при этом сбросе, выполним команду git log:

Разница между командами git reset и git revert

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

Не используйте reset в публичной истории

При удалении коммита, после которого другие участники команды начали работу, могут возникнуть серьезные проблемы. Когда коллеги попытаются синхронизироваться с вашим репозиторием, часть истории проекта будет просто отсутствовать. На следующей схеме показано, что происходит при использовании команды reset для публичного коммита. Ветка origin/main является версией вашей локальной главной ветки main в центральном репозитории.

git reset soft что делает. Смотреть фото git reset soft что делает. Смотреть картинку git reset soft что делает. Картинка про git reset soft что делает. Фото git reset soft что делает

Примеры

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

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

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

Удаление файла из раздела проиндексированных файлов

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

Удаление локальных коммитов

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

Команда git reset HEAD

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

Резюме

Готовы изучить git reset?

Ознакомьтесь с этим интерактивным обучающим руководством.

Источник

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

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