Ваше репо выглядит так.
A - B - C - D [master]
Допустим, C и D - это коммиты, которые вам не нужны на главном сервере.
Сначала создайте новую ветку на та же фиксация, что и у мастера.
$ git branch feature
A - B - C - D [master]
[feature]
Затем переместите мастер обратно в B с помощью git reset
.
$ git reset --hard B
A - B [master]
\
C - D [feature]
Теперь вы можете проверить функцию и поработать над ней.
Что, если бы вы вместо этого не сбросили настройки, а вернулись обратно? В отличие от reset, который перемещает метку ветки, revert делает новые коммиты.
Мы начинаем как раньше.
A - B - C - D [master]
И, как и раньше, мы создаем новую ветку, чтобы запомнить коммиты, с которыми мы хотим работать on.
$ git branch feature
A - B - C - D [master]
[feature]
Вместо того, чтобы перемещать мастер, чтобы он больше не содержал оскорбительных коммитов, мы используем revert, чтобы добавить новый коммит в мастер, который отменяет C и D.
$ git revert C D
A - B - C - D [feature]
\
^D - ^C [master]
Содержимое мастера будет таким же, как у фиксации B, но история будет более беспорядочной. Обычно вы не хотите сохранять артефакты процесса разработки, такие как возвраты и простые исправления опечаток, они бесполезны для будущих разработчиков и затрудняют понимание истории.
Из-за этого я рекомендую оставляя откат для глубоко скрытых коммитов.