Я только что сделал
git merge --squash feature-branch
в ветки develop
.
Проблема в том, что приведенная выше команда обновила голову, не создавая новую фиксацию. Мое намерение состояло в том, чтобы создать одну фиксацию для приложения к главе develop
.
Итак, журнал для ветки develop
до и после слияния точно такой же.
Есть ли способ вернуть назад develop
к тому, что было до git merge
?
Спасибо.
Решение
Основываясь на комментарии от Dan D. и принятого ниже ответа, я смог решить мою проблему. Ниже показано, что я сделал, если вы находитесь в одной лодке:
1 - я запустил git reflog
и в нем перечислены все фиксации и проверки, которые я сделал с ветвью develop
.
2 - Вместо того, чтобы предлагать git reset [email protected]{1}
, как было предложено, я нашел номер, когда я сделал последнюю фиксацию для разработки, которую я хотел сохранить. В моем случае это было [email protected]{188}
. Поэтому я набрал git reset [email protected]{188}
.
3 - Я запустил git log
, и у него был чистый журнал, показывающий только те коммиты, которые у меня были до того, как я сделал неправильное слияние.
4 - Я запустил git add -A .
, чтобы сгенерировать все новые файлы, созданные во время разработки моей функции.
5 - Я побежал git commit -m "install feature-x"
6 - В результате теперь у меня есть ветвь develop
с правильными файлами, и журнал чист - показывается только одна фиксация для всех изменений, которые я сделал во время разработки feature-x
.
Мне все еще нужно выяснить, почему мой оригинальный git merge --squash feature-branch
не работал должным образом.
Решение 2
Ответ Марка Лонгэра - это окончательное решение моей проблемы. Я только что протестировал его, и он работает. Ниже приведен процесс, который я использую сейчас, чтобы вырезать все внутренние коммиты в feature-branch
и включить только одну фиксацию в ветвь develop
:
git checkout develop
git merge --squash feature-branch
git commit -m "install of feature-branch"
Вышеуказанная последовательность работает как шарм.