#git #git-branch #git-commit
Вопрос:
Я работаю над локальным репозиторием git, в котором пока нет настроенного удаленного репозитория. Я случайно начал всю свою работу в местном master
филиале.
На данный момент зафиксировано 22 коммита, и, за исключением первых двух, я бы хотел, чтобы все коммиты >=3-е и далее были «перемещены» в новую ветвь, а затем объединены обратно в master, чтобы в журнале вместо этого отображалась «фиксация слияния».
Я попробовал это, но, похоже, не сработало:
На мастере:
$ git branch new_branch
$ git reset HEAD~20
$ git add . amp;amp; git stash
$ git merge --squash new_branch
$ git commit
Это приводит к тому, что я получаю раздавленный коммит слияния, и теперь я вижу только 3 коммита на своем мастере. Однако, если я это сделаю git log --merges
, это ничего не даст.
Как я могу создать «реальную фиксацию слияния» для кода, new_branch
который обнаруживается git log --merges
и перечислял бы все фиксации, если бы я запустил: git rev-list <merge-commit-id>^..<merge-commit-id>
?
Ответ №1:
Предполагая, что вы вернулись к тому, с чего началась ваша проблема, вы могли бы сделать это следующим образом:
git checkout id-of-second-revision
git merge --no-ff master -m "use a proper comment"
git branch -f master # place master on this revision
git checkout master
И вы закончили.
Комментарии:
1. С того места, где был мастер, когда ты начинал, а не после неудачной магии, которую ты пробовал. 🙂 Если у вас следующий вопрос
how?
, проверьтеgit reflog
. Получите идентификатор исходной версии подсказки мастера оттуда и используйте эту версию вместоmaster
git merge --no-ff
шага…. не нужно никуда идти, вы можете запустить рецепт независимо от того, где вы находитесь.
Ответ №2:
git merge --no-ff new_branch
вместо git merge --squash new_branch