Git скасувати видалення локальної гілки


375

Я просто видалив неправильну гілку з деякими експериментальними змінами, які мені потрібні git branch -D branchName.

Як відновити відділення?


7
Радий знати, що я не єдиний кульгавий, хто це зробив (і забув регулярно натискати на віддалену копію)
Рей

Відповіді:


717

Ви можете скористатися 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

71
Git повідомляє вам, що було SHA1, коли гілку видалено, тож якщо ви просто видалите її, це може бути лише кілька рядків в командному рядку.
чайкаJS

якщо ця гілка існує на сервері, ви також можете використовуватиgit branch branchName origin/branchName
Florian Castellane

до того ж я в кінцевому підсумку використовував git cherry-pick <sha1> для переміщення
комітету

54

Якщо ви знаєте останній SHA1 галузі, можете спробувати

git branch branchName <SHA1>

Ви можете знайти SHA1 за допомогою git reflog, описаного в рішенні тут .


34

Якщо ви ще не натиснули на видалення, ви можете просто зробити:

$ git checkout deletedBranchName

Ця відповідь змушує "Git Extensions" закрити з приводу "гілка, яку ви намагаєтеся натиснути, здається, нова гілка для цього пульта". Дуже дякую.
Омер

28

Якщо ви просто видалили гілку, ви побачите щось подібне у своєму терміналі:

Deleted branch branch_name(was e562d13)
  • де e562d13 - це унікальний ідентифікатор (він же "SHA" або "хеш"), за допомогою цього ви можете відновити видалену гілку.

Щоб відновити відділення, використовуйте:

git checkout -b <branch_name> <sha>

наприклад :

git checkout -b branch_name e562d13 

4

По-перше: створіть резервну копію всього каталогу, включаючи .git-каталог.

По-друге: Ви можете використовувати git fsck --lost-foundідентифікатор втрачених комісій.

По-третє: перезавантажити або злитись на втрачене місце.

Четверте: Завжди подумайте, перш ніж використовувати -D або --force з git :)

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

РЕДАКТУВАННЯ: До речі, не запускайте git gc(або не дозволяйте йому запускатися самостійно - тобто не бігати git fetchчи щось подібне), інакше ви можете втратити свої зобов’язання назавжди.


1
1 і 4 є надмірними ІМО.
jwg

так, саме тому ми використовуємо git, щоб не переносити все це навколо. Кожна дія, яку ви здійснили, досі вам доступна.
товариш

4

Дякую, це спрацювало.

git гілка new_branch_name sha1

git checkout new_branch_name

// може бачити старі зареєстровані у файлах моєї старої гілки


3

Виконайте наступні кроки:

1: Введіть:

git reflog show 

Тут буде відображено всю історію комісій, вам потрібно вибрати sha-1, який має останнє зобов’язання, яке ви хочете повернути

2: створіть ім'я гілки з обраним вами ідентифікатором Sha-1, наприклад: 8c87714

git branch your-branch-name 8c87714

0

Це працювало для мене:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.