У меня есть локальная ссылка, которая содержит несколько веток, которые я недавно выполнил git rebase
на:
A---B---C---D master
\
E---F---G topic1
\
H---I---J topic2
, которые превратили его в:
A---B---C---D master
\
E'---F'---G' topic1
\
H'---I'---J' topic2
с помощью следующего набораиз команд:
git checkout topic1
git rebase master
git checkout topic2
git rebase topic1
Проблема?
Я случайно забыл сделать git rebase --no-ff
, чтобы отследить все мои ранее объединенные ветви.Теперь у меня нет возможности легко определить (используя gitk --all
), где произошли мои слияния.Я знаю, что они произошли где-то между HEAD@{E}
и HEAD@{J}
, но без прохождения каждого коммита в отдельности я теряюсь.
Что я решил сделать:
Итак, яподумал, что я буду использовать git reflog
, как предложено здесь , вместе с git reset --hard HEAD@{#}
, чтобы вернуться к исходному состоянию до того, как произошли две перезагрузки, а затем попытаться git rebase branchname --no-ff
, как я предложил.
Мой окончательный вопрос (с несколькими дополнительными):
Могу ли я просто пройти весь путь до последнего коммита до первого rebase
или мне нужно откатить каждый изребазы индивидуально?Будет ли каждая из верхних веток точно такой же, как я их использовал (показывая не-быстрые перенаправленные слияния, которые я ищу)?Я делаю это слишком сложно / есть более простой способ сделать это?Что-нибудь, о чем я забываю думать?
Спасибо.