Intereting Posts
как сказать Git (msysgit в Windows) использовать ssh, а не конкурс Как обновить версию репо Зависимость композитора от незначительных различий в файле composer.json Поддерживает ли Accurev заговор? Ошибка использования github REST API для изменения описания выпуска – если описание содержит круглые скобки Восстановить репозиторий к предыдущей фиксации GIT Версия Git Repo для использования композитора – Git / Composer Интерконверсия gitignore и hgignore? UnicodeDecodeError: кодек 'utf8' не может декодировать байт 0xf6 в позиции 178175077: недействительный стартовый байт Разделение каждой фиксации по файлу? Почему разница между локальным и удаленным репозиторием не совпадает с совершенным? Переключитесь на определенную фиксацию в отсутствующей ветви в GIT необходимо реализовать механизм резервного копирования Git? Я скопировал местный репозиторий GIT в другое место, и я не могу совершить Я пытаюсь вызвать MSTest из консольного приложения внутри привязки SVN до фиксации, но получить сообщение об ошибке?

git – удалить коммиты из объединенной ветки

Я случайно нажал фиксацию с огромными файлами, а затем вернул ее. Но это заставляет кого-то тянуть эту ветку, чтобы извлекать эти файлы в истории, поэтому я решил удалить или сквоить эти два коммита. Однако какая-то ветка была объединена. Я не знаю, как сделать «git rebase -i» сохранить структуру ветвей.

История теперь выглядит так:

H - new commits | G - merge | \ | F - commits on another branch | | E | - some other commits | | D | - corrected B | | C | - revert B | | B | - huge files | / A - early commit 

Могу ли я изменить его на следующий?

 h - new commits | g - merge | \ | F - commits on another branch | | e | - some other commits | | d | - corrected B | / A - early commit 

Да, вы можете, но не должны .

Это потребует, чтобы вы переписали историю и заменили уже перенесенную историю на сервере (что требует силового нажатия и чаще всего приводит к тому, что все кричат ​​на вас) .

Но если вы действительно хотите, чтобы git filter-branch – это то, что вы хотите использовать, как в этом SO-ответе . Итак, вы бы сделали что-то вроде этого:

 git filter-branch --commit-filter ' if [ "$GIT_COMMIT" = "<your commit to remove here>" ] then skip_commit "$@"; else git commit-tree "$@"; fi' HEAD 

Здесь есть еще несколько примеров.

Нет, ты не можешь.

Хэш каждой фиксации включает не только хэшированное содержимое всех файлов в индексе, но и хэши родителей.

«Исправлено B» будет иметь другого родителя, чем сейчас. Это изменило бы хэш.

Это можно исправить, но невозможно избежать принудительного толчка исправления, и каждый из них принудительно вытащил его, как только это будет сделано.

Единственный реальный способ исправить это – это следующий процесс:

  git checkout A 

Проверьте родительский фиксатор, прежде чем ветвь разветвится. Затем создайте две рабочие ветви:

  git checkout -b corrected-mainline git checkout -b corrected-fork 

Теперь вы находитесь на ветке исправленной ветви. Теперь, в этой ветке, вы должны быть в состоянии git cherry-pick все коммиты до фиксации F , пропустить фиксацию с огромными файлами и вернуть ее. Если какой-либо из этих коммитов является слиянием, выполните одно и то же слияние.

Теперь сделайте то же самое на ветке corrected-mainline

  git checkout corrected-mainline 

Теперь, git cherry-pick все коммиты на ветке mainline, вплоть до последнего фиксации перед слиянием G Затем выполните слияние с ветвью corrected-fork ветви. Теперь это исправленное G слияние.

Завершите вишневый сбор любых коммитов, которые первоначально были на вершине G на вашей диаграмме, заканчивая последней фиксацией на вашей исходной ветке.

На этом этапе содержимое вашей рабочей ветки должно совпадать с содержимым вашей исходной ветки. Убедитесь, что это так.

Затем удалите исходную ветвь, переименуйте свою рабочую ветвь в ее имя. Или, используйте git reset --hard чтобы сбросить исходную ветвь на исправленную рабочую ветку.

Затем сделайте git push --force , чтобы подтолкнуть исправленную ветвь. Конечно, любой, кто тянет ветку, в конечном итоге получает силовое притяжение.