Git Reflog - Как восстановить удаленную ветку, которая не была объединена



Эта статья о Git Reflog представляет собой исчерпывающее руководство по восстановлению удаленных ветвлений в Git с помощью Git Reflog.

«Вы когда-нибудь теряли ветку, исходный код которой еще не был объединен с ветвью« release »или« main »? Что, если вы хотите восстановить удаленную ветку, хотя ее работа уже была объединена с основной веткой? » . Что ж, единственное решение таких сценариев - это Перейти Reflog .

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





    1. Что такое Git Reflog?
    2. Как и когда удаляется ветка?
    3. Восстановить удаленную ветку
    4. Какая работа восстанавливается при восстановлении удаленной ветки?
    5. Подкоманды Git Reflog

Итак, давайте начнем с этой статьи.



Рассмотрим сценарий a maintainer должен объединить многие ветки функций от разных соавторов, а затем удалить их в конечном итоге, но ветвь удаляется случайно, прежде чем работа может быть объединена?

Что ж, прежде чем я перейду к этой статье, позвольте мне сказать вам, что это невозможно в Git. безопасны и действуют как контрольно-пропускной пункт, который не позволит вам сделать это. Итак, здесь на сцену выходит Git Reflog.

Что такое Git Reflog?

ВКоманда reflog сохраняет след от каждое изменение, внесенное в ссылки (ветки или теги) репозитория и хранит журнал веток и тегов, которые были созданы локально или извлечены. Справочные журналы, такие как моментальный снимок фиксации, когда ветвь была создана или клонирована, извлечена, переименована или любые фиксации, сделанные в ветке, поддерживаются и перечислены командой «reflog».



Заметка: Ветка будет восстановлена ​​из вашего рабочего каталога, только если ветка когда-либо существовала в вашем локальном репозитории, т.е. ветка была либо создана локально, либо извлечена из удаленного репозитория в вашем локальном репозитории, чтобы Git мог хранить журналы истории ссылок.

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

команда: иди рефлог

Теперь, когда вы знаете, что такое Git Reflog, позвольте нампопытаться удалить как объединенную, так и неслитую ветвь и посмотреть, как Git с этим справится?

Шаг 1. Составьте список веток, которые объединены в мастер

Во-первых, проверьте ' мастер ’, Если вы находитесь в другой ветке, используя команду:

$ git checkout master

Вывод

Git Checkout Master - Git Reflog - Edureka

Теперь, чтобы получить список объединенных веток, упомяните следующую команду:

$ git ветка --merged

Вывод:

Шаг 1.1: Затем удалите объединенную ветку:

$ git branch -d проблема # 902

Вывод:

Ветка «issue # 902» была успешно удалена, поскольку она уже объединена с «главной» веткой.

Шаг 2: Теперь давайте перечислим ветки, которые не объединены в master.

$ git branch --no-merged

Вывод

Шаг 2.2: Наконец, давайте удалим неслитую ветку с помощью следующей команды:

$git branch -d prepod

Если вы попытаетесь удалить одну из веток с незавершенной работой, скажем, «preprod», git отобразит предупреждающее сообщение.

Вывод

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

Как и когда удаляется ветка?

Как мы знаем, Git - это Распределенная система контроля версий (DVCS), каждая машина с клоном или копией репозитория действует как оба узел и концентратор . Этаподразумевает, что каждая машина будет иметь свою собственную копию всего кода и истории репозитория.Излишне говорить, что ты будешь обмен ваша работа с другими и издательский тоже самое.

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

Случай 1. Разработчик может объединить или удалить ветку

Рассмотрим сценарий, в котором разработчик локально объединяет функциональную ветвь с основной, а затем удаляет функциональную ветвь с помощью символа ‘ git ветка ’С символом« - d », Как показано на предыдущих снимках экрана.

Команда: ‘Git branch -d branch_name’

Также может случиться так, что разработчик решит удалить изменения в ветке и решит удалить ветку, не объединяя ее с любой другой веткой, используя следующую команду:

Команда: ‘Git branch -D branch_name’

С помощью приведенной выше команды разработчикпринудительно удалить ветку, переопределив предупреждение git

$ git branch -D препрод

Вывод

Заметка : Ветвь «preprod» больше не будет отображаться при запуске команды «git branch». Итак, унаша работа, сохраненная в этой ветке, будет потеряна.

Случай 2 - Разработчик удаляет ветку в общем репозитории

Рассмотрим сценарий, в котором разработчик с доступом для чтения / записи пытается принудительно удалить удаленную ветку,используя команду «git push» с флагом «–delete».

$ git push origin --delete quickfix

Вывод

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

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

Случай 3 - сценарий ловушки с суперпривилегиями удаляет ветку

Это может быть редким, но возможным сценарием, когда скрипт-перехватчик запускается при определенном событии операции git и принудительно удаляет ветки, которые еще не объединены. Ты можешьпредставьте, что одна из вышеупомянутых команд написана в сценарии ловушки с привилегиями sudo.

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

трекер заданий и трекер задач в hadoop

Восстановить удаленную ветку с помощью Git Reflog

Шаг 1 : Журналы истории всех обращений

Получите список всех локальных записанных журналов истории для всех ссылок («master», «uat» и «Preod») в этом репозитории.

иди рефлог

Шаг 2 : Определите штамп истории

Как видно из приведенного выше снимка, Выделенный идентификатор фиксации: e2225bb вместе с индексом указателя HEAD: 4 тот, когда ‘ перепродажа ’Была создана из текущего указателя HEAD, указывающего на вашу последнюю работу.

Шаг 3 : Восстановить

Чтобы вернуть «Перепродажа ‘Ветка используйте команду'Git checkout' передает ссылку на указатель HEAD с идентификатором индекса - 4.Это ссылка на указатель, когда была создана ветвь preprod, длинный идентификатор фиксации выделен на снимке экрана вывода.

git checkout -b preprod HEAD @ {4}

Вывод

И вуаля! ‘ перепродажа ‘Ветка восстанавливается со всем вашим исходным кодом.

ПРИМЕЧАНИЕ : Позволь мне бповторить команду «git checkout», использованную выше, и помочь вам лучше понять:

Команда «git checkout» - это перегруженная команда (как и любая перегруженная функция Java). Это та часть, где восстанавливается фактическая ветка.

Эта единственная команда сначала проверяет более раннюю временную метку истории, указанную HEAD @ {4} указатель а затем создает ветку с именем «preprod» с помощью параметра «-b», а также переключает ваш рабочий каталог на вновь созданную ветку.

Это означает, что переключение ветви будет от «master» к «preprod», как показано на экране вывода.Теперь вы можете объединить его с ветвью «master» или «release» в соответствии с вашей моделью ветвления.

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

Какая работа восстанавливается при восстановлении удаленной ветки?

Файлы, которые были спрятаны и сохранены в списке индекса тайника, будут восстановлены обратно. Все неотслеживаемые файлы будут потеряны. Также яХорошая идея - всегда ставить и передавать свою работу или прятать ее.

Чтобы получить ссылки журнала для конкретной ветки или тега, выполните команду - «git reflog».

Пример: Чтобы проверить ссылки журнала только ветки «uat», используйте команду - «git reflog uat».

Подкоманды Git Reflog

иди рефлог

Команда для открытия страницы руководства

$ git reflog --help

Вывод

иди рефлог шоу

Показывает журналы ссылки, предоставленные в командной строке.

git reflog show master @ {0}

иди рефлог истекать

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

git reflog истекает

иди рефлог Удалить

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

git reflog удалить

иди рефлог существуют

Эта команда проверяет, есть ли в ссылке (ветке или теге) записи журнала ссылок.

git reflog существует

Помимо вышеупомянутых команд, команда «Git Reflog» принимает различные подкоманды и различные параметры в зависимости от подкоманд, упомянутых выше. Для дальнейшего чтения запустите « git reflog –help »Из окна терминала.

На этом мы подошли к концу статьи о Git Reflog.Цель DevOps - быстрее и надежнее создавать более качественное программное обеспечение, обеспечивая при этом более тесное общение и сотрудничество между командами. Если вас заинтриговала эта статья, c черт возьми от Edureka, надежной компании по онлайн-обучению с сетью из более чем 250 000 довольных учащихся по всему миру. Учебный курс Edureka DevOps Certification Training помогает учащимся понять, что такое DevOps, и получить опыт работы с различными процессами и инструментами DevOps, такими как Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack и GIT для автоматизации нескольких этапов в SDLC.

Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев статьи «Git Reflog», и мы свяжемся с вами как можно скорее.