У меня есть ветка git, которая начала демонстрировать невозможность сделать даже тривиальные перестановки, пробившиеся мимо определенного момента, утверждая, что многие коммиты только что исчезли - и в отладке, что вопрос, я нашел более простую аномалию.Ветвь Git находится в противоречивом состоянии из-за плохого слияния
git log
дает мне совершенно согласованный список коммитов, которые я ожидаю увидеть. И если я использую git reset --hard HEAD^
, чтобы двигаться назад в фиксации по одному, все работает так, как ожидалось, - до тех пор, пока я не вернусь к десятку коммитов без предупреждения.
Я начинаю с this commit с ID 367df61041c380b3e769177779cb7c8ab21630b4 и журнал мерзавца, который выглядит как:
367df61 fixing flake8/syntax errors
14210b8 Merge remote-tracking branch 'origin/dev' into dev
a6818d5 Merge pull request #55 from rec/fast-gamma
e8ffdf2 Tweak exit manager code (fix #56). Please enter the commit message for your changes. Lines starting
d1c464c Tweak masterBrightness.
975de68 Re-enable timedata end-to-end.
bf7e918 Add optional timedata.Renderer to driver_base.py.
b4daff6 Simplify _render slightly.
a306798 Stop slicing colors and add an offset instead.
b379f21 Move generate_header into util.
e50ec8c Simplify frame rendering slightly.
12cfc2d Extract data and functions into return_codes.py
764e4b9 Convert LDP8806.py from DOS line endings to Unix.
d3dc333 Remove old gamma tables.
5ae2934 Simplify gamma.py; prove backward compatibility.
bae1cf4 Temporarily disable timedata and simplify rendering.
c436f19 showing timedata usage
5228261 updating colors.py for py3
Если я исполняю git reset --hard HEAD^
один раз, я перехожу к 14210b8 Merge remote-tracking branch 'origin/dev' into dev
, как я ожидал, и git log
согласуется с выше.
Но теперь, если я исполню git reset --hard HEAD^
в второй время, я перехожу к c436f19 showing timedata usage
, в нижней части приведенного выше списка! Все фиксации между a6818d5
и bae1cf4
включительно просто исчезнут.
Мой подозрительный глаз нарисован на фиксации a6818d5a2, который, как представляется, содержит все эти исчезнувшие изменения.
Как это произошло? Возможно, путем слияния с неправильной базой или фиксацией идентификатора ... но точно, что мы сделали неправильно?
Оставленный на свои собственные устройства, я вернусь к известному хорошему фиксажу, а затем вишневый захват совершает одно за другим, полностью пропуская слияние. Это не будет огромная работа, но я считаю, что должен быть лучший способ.
Что происходит? Является ли это разумным состоянием для филиала, и я делаю ошибку с помощью git или что-то «сломано»?
Если он сломан, как его исправить? И как мы можем изменить наш рабочий процесс, чтобы избежать разрыва ветки?
Если он не сломан, как мы можем изменить рабочий процесс git для обработки этого случая?
Мой ответ на 3. - запретить слияние.
Все они сводятся к одному вопросу - учитывая, что у меня есть эти слияния, как мне переустанавливать их?
@matt: суффикс hat/caret означает, в первую очередь, родитель * first *, если вы не добавите номер. 'HEAD ^' и 'HEAD^1' являются родителями # 1, а' HEAD^2' является родительским # 2. Если у вас есть слияние осьминога (более двух родителей), это продолжается с 'HEAD^3' и т. Д. Фактический порядок родительских коммитов трудно наблюдать с помощью большинства инструментов (хотя некоторые графические зрители используют цвета линий: один и тот же цвет при прохождении слияния означает «родительский №1»), но указан: первый родитель - это филиал, который вы были «включены» (как, например, «git status» говорит «на ветке»), когда вы сделали слияние. – torek