Как отменить commit и не облажаться. Github как удалить коммит

Github как удалить коммит - Удалить коммит Наблюдения и советы при работе с коммитами Что такое коммит Из чего состоит коммит Как залить обновления на сервер с git

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

Стандартные команды при работе с репозиторием (git)

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

  1. Для того чтобы сгенерировать deploy key, нужно подключиться к серверу по ssh. Затем выполнить команду ssh-keygen.
  2. В консоли появится диалог, в котором нужно будет ввести название файла, где будет сохранен ключ. Этот шаг можно пропустить, тогда ключ будет сохранен в файл с именем по умолчанию (id_rsa).
  3. После этого будет предложено ввести кодовую фразу для дополнительной защиты, этот шаг можно пропустить (чтобы не вводить фразу каждый раз, когда идет обращение к гиту).
  4. После этого ключ будет сгенерирован, и будет создано 2 файла с приватным и публичным ключами.Теперь нужно лишь скопировать публичный ключ и добавить его в гит репозиторий. Выполняем команду cd ~/.ssh и переходим в директорию, где сохранен наш ключ. Для того чтобы вывести его в консоль, выполняем команду cat (по умолчанию id_rsa.pub). ОБратите внимание, что нужен именно файл с расширением .pub (публичный ключ). Копируем содержимое файла.
  5. Далее в GitLab можно настроить репозитория.
    1. А в разделе настроек выбрать пункт Deploy keys.
    2. Далее нажимаем “New Deploy Key” и попадаем в форму создания нового ключа. Вставляем ключ в поле Key, заполняем название (Title) ключа (в названии желательно указать имя пользователя и ip сервера, где был сгенерирован ключ).

    Обновление проекта на git с сервера

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

    1. Подключиться к серверу, на котором уже развернут проект, подключение производим через SSH.
    2. Убедиться, что мы находимся в нужной ветке, для этого вводим команду — “git branch”. Мы находимся в ветке “master”.
    3. Далее вводим команду — “git status”.
    4. Далее нужно убедиться в том, что есть изменения в файлах. Обычно Git помечает их красным цветом.
    5. Эти файлы необходимо добавить к индексируемым, следовательно вводим команду — “git add .” “Точка” говорит нам о том, что будут добавлены все файлы. Либо можно добавлять файлы через пробел “git add file1.php file2.php”.
    6. Снова проверяем статус репозитория “git status”, добавленные файлы должны быть быть отмечены зеленым цветом.
    7. Затем можно создать коммит — “git commit -m ‘your message here’”.
    8. Далее делаем “git pull origin master”, принимаем изменения из удаленного репозитория той ветки, в которой находимся.
    9. Далее отправляем наши изменения той ветки, в которой находимся — “git push origin master”.
    10. Проверяем статус локального репозитория — “git status”, в ответ получаем “On branch master. nothing to commit, working directory clean”.

    Какие ветки создавать на новые проекты

    Для работы над новым проектом git по умолчанию создает ветку master. Если ваш проект имеет две версии (пробную и боевую), вам необходимо создать новую ветку dev перед началом разработки. Сделайте следующее:.

    1. Либо создать ветку с именем dev, локально выполнив команду “git checkout -b dev” находясь в ветке master;
    2. Либо создать новую верстку в репозитории посредством GitLab: Project — Branches — New Branch.

    Что касается git, то здесь нет плохих и хороших переносов. Однако, с точки зрения коллег, есть хорошие и плохие подписи для обязательств. Некоторые примеры.

    Как отменить commit и не облажаться

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

    Рассмотрим простую ситуацию. Программист решает реализовать математическую функцию. Но на полпути они понимают, что им нужно разделить эту задачу на две подзадачи, например.

    • Реализовать арифметические операции (сложение, вычитание, деление и т.д.)
    • Реализовать числовые операции (максимальное значение, минимальное значение, модуль числа и т.д.)

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

    Посмотрите на дерево обязательств. Вы видите, что разработчик создал ветвь функций, класс Arithmetic (фиксация A) для выполнения арифметических операций и класс Numerical (фиксация N) для выполнения арифметических операций. Это означает два класса и два обязательства.

    git revert

    Ничего не переписывая, мы решили наследоваться от функции и создать две ветви, одну для арифметики и одну для арифметики. И соответственно отмените все ненужные обязательства. Другими словами, мы запускаем git revert N в арифметической форме и gitrevertA в арифметической. Умно и просто!

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

    И что мы получаем? Никакой математики, никакой арифметики! Причина в том, что команда git revert создает новое обязательство с отмененными изменениями и не удаляет это обязательство из истории. А в нашем случае мы имеем четыре обязательства после слияния отрасли.

    Поэтому очень обременительно отменять изменения с помощью команды revert.

    git reset

    И здесь нам напоминают, что существуют такие команды, как сброс, которые удаляют из истории именно обязательства. Но есть и другое… Он восстанавливает все обязательства до указанных. Такое поведение не подходит, поскольку оно выбирает, какие обязательства удалить.

    Другое решение — использовать команду gitrebase для отмены изменений. Вернитесь к моменту создания двух числовых и арифметических ветвей и выполните команду

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

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

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

    Если у вас возникли трудности с GIT, попробуйте заранее свернуть задачу. В противном случае вы можете быть удивлены. Сталкивались ли вы с этим раньше? Если да, то как вы с этим справились?

    Другое решение — использовать команду gitrebase для отмены изменений. Вернитесь к моменту создания двух числовых и арифметических ветвей и выполните команду

    Безопасные изменения для удаленных репозиториев

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

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

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

    Мы возвращаемся к первоначальному статусу проекта.

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

    Git сообщит вам об изменениях после перезагрузки.

    Проверьте историю. Как мы видим, создаются новые обязательства, «подрывающие» нежелательные изменения людей.

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

    Итоги

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

    • git commit —amend — позволяет изменять последний коммит.
    • git reset — позволяет удалять коммиты.
    • git rebase — позволяет производить массовое изменение коммитов, приводить в порядок историю.
    • git revert — позволяет откатывать изменения коммитов.

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

    Последнее — лучший способ не мешать коллегам в среде разработки.

    Команда Git Revert создает обязательство, которое восстанавливает изменения, сделанные в данном обязательстве. Эта команда может быть использована для отмены последнего обязательства.

    Как отменить коммит в Git

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

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

    Как отменить коммит в Git

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

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

    Теперь вы можете использовать идентификатор обязательства для отмены обязательства.

    1. Отменить коммит, но оставить изменения

    Для того чтобы отменить последний коммит git без удаления изменений используется команда reset с параметром —soft. Команде надо передать идентификатор коммита или его позицию относительно HEAD. В терминологии git термин HEAD — это самая последняя версия проекта в текущей ветке. С помощью HEAD можно ссылаться на коммиты в истории. Для этого используется символ ~. Таким образом ссылка на предыдущий коммит будет выглядеть как HEAD~ или HEAD~1, а на коммит перед ним — HEAD~2 и так далее. Для отмены последнего коммита достаточно выполнить команду:

    Как вы видите, все файлы сохранены, а разница между HEAD и текущим состоянием проекта показывает, что файл3 был добавлен.

    Аналогичного результата можно добиться, передав идентификатор привязки. Например, давайте отменим привязку, которую добавил файл.2 Для этого используйте следующую команду, чтобы найти ID предыдущего обязательства. В данном случае это ‘InitalCommit’.

    Затем выполните команду gitreset. Например.

    git reset —soft 887080eea5fd8bd3bc2503dcf043ac6f5c19a8e5

    Снова размещаются все файлы, а в HEAD добавляются два файла: file2 и file3:.

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

    Файлы, ранее включенные в обязательство, будут продолжать индексироваться, поэтому нет необходимости вызывать git add, и новое обязательство может быть создано немедленно. Однако у команды reset есть еще одна опция: —mixed, которая является опцией по умолчанию. Эта опция сохраняет изменения, но вам придётся заново добавить изменения в индекс, прежде чем вы сможете сделать новое обязательство с помощью git add. Если вы выполните команду git status, эти файлы будут отображаться как неконтролируемые.

    2. Отменить коммит и удалить изменения

    Удаление изменений и выход из git commitment работает аналогичным образом. Только здесь нужно указать опцию -soft вместо -hard. Например, при той же структуре обязательств вы можете удалить последнее обязательство, присоединив к нему файл3.

    Выводы

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

    Эта статья распространяется по лицензии Creative CommonsShareAlike 4.0.

    Оцените статью:

    Об авторе

    Я являюсь основателем и администратором losst.ru, мои увлечения — программное обеспечение с открытым исходным кодом и операционные системы Linux. В настоящее время я использую Ubuntu в качестве основной операционной системы. Помимо Linux, меня интересует все, что связано с информационными технологиями и современной наукой.

    2 комментария

    Вы можете использовать ссылку ORIG_HEAD для восстановления отмененных обязательств. git reset —hard ORIG_HEAD

    git reset —soft 887080eea5fd8bd3bc2503dcf043ac6f5c19a8e5

    Судя по журналу, все обязательства после ID отменены. Не только один. Что произойдет, если нужно будет отменить только один?

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

    Команда git revert

    Команда Git Revert создает обязательство, которое восстанавливает изменения, сделанные в данном обязательстве. Эта команда может быть использована для отмены последнего обязательства.

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

    Вы можете скопировать его хэш (буквенно-цифровой идентификатор) и использовать его в команде revert.

    Команда git reset

    Вы также можете использовать команду gitreset для восстановления последнего обязательства. Однако обратите внимание. История обязательств изменится. Эта команда используется реже.

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

    Опция -SOFT сохраняет нефиксированные изменения (если они есть) поэтапно.

    Опция -HARD может быть использована для восстановления всего до последнего обязательства и удаления всех изменений, не относящихся к студентам.

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

    Что лучше использовать: reset или revert?

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

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

Оцените статью
The Elder Scrolls Online