Git отменить удаление локальной ветки

Я только что удалил не ту ветку с некоторыми экспериментальными изменениями, которые мне нужны с git branch -D branchName.

Как восстановить ветку?


person Stefan Kendall    schedule 26.10.2010    source источник
comment
Рад узнать, что я не единственный неудачник, который это сделал (и забыл регулярно нажимать на удаленную копию)   -  person Ray    schedule 24.08.2017


Ответы (9)


Вы можете использовать git reflog, чтобы найти SHA1 последней фиксации ветки. С этого момента вы можете воссоздать ветку, используя

git branch branchName <sha1>

Изменить: Как сообщает @seagullJS, команда branch -D сообщает вам sha1, поэтому, если вы еще не закрыли терминал, это становится очень легко. Например, это удаляет, а затем немедленно восстанавливает ветку с именем master2:

user@MY-PC /C/MyRepo (master)
$ git branch -D master2
Deleted branch master2 (was 130d7ba).    <-- This is the SHA1 we need to restore it!

user@MY-PC /C/MyRepo (master)
$ git branch master2 130d7ba
person bobDevil    schedule 26.10.2010
comment
Git сообщает вам, каким был SHA1 при удалении ветки, поэтому, если вы просто удалите его, в командной строке может оказаться всего несколько строк. - person seagullJS; 13.12.2012
comment
если эта ветка существует на сервере, вы также можете использовать git branch branchName origin/branchName - person Florian Castellane; 22.09.2017
comment
кроме того, я использовал git cherry-pick ‹sha1›, чтобы переместить фиксацию в ветку - person Akin Okegbile; 07.05.2018

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

git branch branchName <SHA1>

Вы можете найти SHA1 с помощью git reflog, описанного в решении --defect link--.

person Chetan    schedule 26.10.2010

Если вы еще не нажали удаление, вы можете просто сделать:

$ git checkout deletedBranchName
person amichaud    schedule 14.01.2014
comment
Этот ответ заставляет Git Extensions замолчать о ветке, которую вы пытаетесь нажать, кажется, новой веткой для этого пульта дистанционного управления. Большое спасибо. - person Omer Tuchfeld; 21.12.2014
comment
Вы спасли мою жизнь!!! - person StarLord; 30.01.2021

Если вы только что удалили ветку, вы увидите в своем терминале что-то вроде этого:

Deleted branch branch_name(was e562d13)
  • где e562d13 - уникальный идентификатор (также известный как «SHA» или «хеш»), с его помощью вы можете восстановить удаленную ветку.

Для восстановления ветки используйте:

git checkout -b <branch_name> <sha>

например:

git checkout -b branch_name e562d13 
person Derick Daniel    schedule 19.08.2016

Следуй этим шагам:

1: Введите:

git reflog show 

Это отобразит всю историю коммитов, вам нужно выбрать sha-1, у которого есть последний коммит, который вы хотите вернуть.

2: создайте имя ветки с выбранным вами Sha-1 ID, например: 8c87714

git branch your-branch-name 8c87714
person greencheese    schedule 11.03.2020
comment
Большое тебе спасибо. Это сработало для меня. Мои 2 месяца работы были потеряны. Это решение помогло восстановить эти файлы. - person Amit; 20.01.2021

Во-первых: сделайте резервную копию всего каталога, включая каталог .git.

Во-вторых: вы можете использовать git fsck --lost-found для получения идентификатора потерянных коммитов.

Третье: перебазировать или объединить потерянную фиксацию.

Четвертое: всегда дважды подумайте, прежде чем использовать -D или --force с git :)

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

РЕДАКТИРОВАТЬ: Кстати, не запускайте git gc (и не позволяйте ему запускаться самостоятельно - т.е. не запускайте git fetch или что-то подобное), иначе вы можете навсегда потерять свои коммиты.

person Cameron Skinner    schedule 26.10.2010
comment
да, именно поэтому мы используем git, чтобы не таскать все это с собой. Каждое совершенное вами действие по-прежнему доступно вам. - person mateor; 03.05.2013

Спасибо, это сработало.

git ветка новое_имя_ответки sha1

git checkout new_branch_name

// могу видеть мои старые зарегистрированные файлы в моей старой ветке

person Rajeev Jayaswal    schedule 07.02.2017

Это сработало для меня:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
person Alej priv    schedule 15.04.2020

Если вы удалили ветку через Source Tree, вы можете легко найти SHA1 удаленной ветки, перейдя в View -> Show Command History.

Он должен иметь следующий формат:

Deleting branch ...
...
Deleted branch %NAME% (was %SHA1%)
...

Тогда просто следуйте исходному ответу.

git branch branchName <sha1>

person EvZ    schedule 25.02.2021