Мне это кажется несколько противоречивым:
Я хочу вернуть в предыдущий коммит ветви ...
(жирным шрифтом мое; обратите внимание, что это легко; см., например, Сброс или возврат определенного файла к определенной ревизии с помощью Git? , хотя это для какого-то определенного файла или файлов)
... с учетом всех изменений в этом коммите и ничего из текущего.
Коммиты не изменения , коммиты состояний .
Чтобы использовать простой пример, предположим, что я говорю вам, что в настоящее время на улице 68 ° F (20 ° C), в пятницу.Это состояние .Если я спрошу вас, чем отличается вчерашняя температура, вы можете мне сказать?Что еще нужно знать в первую очередь?
Если температура поднимется на 9 ° F (5 ° C), это изменение .Если я скажу вам, что в понедельник по сравнению с воскресеньем он вырос так, какая температура была в воскресенье?Что еще мне нужно сказать вам в первую очередь?
В Git каждый коммит представляет собой полный снимок всех файлов, в каком бы состоянии они ни находились в момент созданиясовершить.Чтобы получить изменения из коммита, необходимо сравнить , который фиксирует какой-либо другой коммит.Очевидным «другим» коммитом является непосредственно предшествующий коммит, то есть родительский коммит .Если коммит имеет только одного родителя, Git может сделать это автоматически: он извлекает файлы предыдущего коммита (состояние) и файлы данного коммита (другое состояние), а затем вычитает их , чтобы получить наборизменения.
Если вам нужно содержимое одного файла из предыдущего коммита, это просто;см. связанный вопрос, и это дубликат.То, что делает git revert
, совершенно иное: оно превращает фиксацию - состояние - в изменение, а затем пытается применить это же изменение к состоянию current .См. Мой недавний ответ на Возврат, например, только одного файла отправленного коммита .