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

По сути, я сделал что-то глупое, у меня было две ветви основной ветки, работавшие над двумя отдельными вещами: ветка А и ветка В. Это означало 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 ответ1

0

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .