Если я понимаю, ваш репозиторий выглядит так.
1 - 2 --------- 7 - 8 [A]
\ /
4 - 5 - 6 [B]
B разветвился A на коммите 2. Зафиксированы 4, 5 и 6. Затем слились с A на 7. Затем был сделан еще один коммит 8 на A.
Если вы не удалили B, он все еще там. Если вы это сделали, вам нужно найти исходный коммит и восстановить метку ветки. Вы можете сделать это с git log --graph --decorate --oneline A
. Вы увидите что-то вроде ...
* (A) 4f8cea2 Some commit
* 9a7fd82 Merge B into A
|\
| * c772b6d some commit on B
| * c9178a2 another commit on B
| * d7a579d a commit on B
|/
* b4d1b73 The commit before B
В этом случае c772b6d
является последним коммитом на B.
git branch B c772b6d
Это восстановит Б.
Чтобы восстановить A, выполните интерактивную перебазировку назад для фиксации 2. Снова, используйте git log
, чтобы найти эту фиксацию. В нашем примере это b4d1b73
. Так что оформите А и вернитесь обратно туда.
git checkout A
git rebase -i b4d1b73
Вы получите такой редактор:
pick 4f8cea2 Some commit
pick c772b6d some commit on B
pick c9178a2 another commit on B
pick d7a579d a commit on B
Это все коммиты между A и b4d1b73, но коммитов слияния нет. Перебазировка сгладит A. Теперь удалите коммиты из B, оставив только коммиты на A.
pick 4f8cea2 Some commit
Затем save и Git запишут только оставшиеся коммиты поверх b4d1b73
. У тебя будет ...
1 - 2 - 8' [A]
\
4 - 5 - 6 [B]
Если у вас возникнут проблемы с перебазированием, на оригинальную версию A указывает ORIG_HEAD. Вы можете восстановить его с помощью git reset --hard ORIG_HEAD
.