Потерянный GitHub совершает

Имея некоторую панику диссертации здесь:|

По сути, я сделал что-то глупое, у меня было две ветви от основной ветви, работающие над двумя отдельными вещами: ветвь А и ветка В. Это означало 0 конфликтов. Я сначала слил ветку А в мастер. Пока все хорошо.

Затем я захотел обновить ветвь B изменениями в master после слияния ветки A. Однако теперь я сделал глупую ошибку, объединяя master с веткой B, вместо того, чтобы сначала объединить эту ветку с master, чтобы затем объединить master с ней.

Итак, я потерял все свои коммиты с тех пор, как была создана ветка B. Я читал кое-что о возврате, но не на 100%, что это вызовет, так как это не ветвь в мастер, а мастер в ветвь.

Чтобы показать, что я сделал:

Branch A -> master -> Branch B

... вместо (я думаю, именно так это и должно быть):

Branch A -> master <- Branch B and then master -> Branch B

Заранее благодарю за любую помощь:)

(также, если это неправильное место, чтобы задать этот вопрос, пожалуйста, сообщите мне, и я перенесу его)

1 ответ

Решение

Слияние никогда не теряет коммиты, независимо от того, в каком направлении вы делаете слияние. Иногда вы не видите коммитов в git log или в представлении коммитов GitHub, потому что они пытаются показать линейное представление истории коммитов (в то время как в действительности журнал имеет несколько строк одновременного коммита). Коммиты, которые вы только что слили в ветку, выталкивают оригинальные коммиты так далеко вниз по списку, что вы не можете их найти.

Откройте инструмент, такой как gitk, tig, gitg, или же git log --graph --oneline, Самая верхняя фиксация "слияния" покажет две строки работы, одна из которых принадлежит master (или branchA), а другая соответствует тому, что вы изначально имели в branchB.

Чтобы выбросить коммит слияния, находясь на ветке B, используйте git reset --hard HEAD^1 (число, указывающее, какой родитель слияния выбрать). Перед этим, возможно, проверьте журнал HEAD^1, чтобы увидеть, что вы получите после сброса.

Если вы запишите "последние" хорошие идентификаторы коммитов, прежде чем делать что-либо еще, вы сможете вернуться к ним, даже если некоторые команды git не будут выполнены, так как коммиты сохраняются в.git/ еще несколько дней.

Другие вопросы по тегам