Примечание: бот stackoverflow считает вопрос субъективным, но он очень фактический - я не спрашиваю мнения здесь!
Допустим, у меня есть только одна ветвь, и история моих коммитов такова: A- B - C - D
Если я нажимаю на C в графическом интерфейсе (например, GitKraken или Git для Windows) и выполняю команду «отменить фиксацию», я получаю сообщение о конфликте файлов.
Два вопроса:
Это потому, что возврат «отменяет» изменения, сделанные в C, и GIT теперь привязан к B и D, которые изменяют файл различными несовместимыми способами?в этом ли причина?
Если да, значит ли это, что вы можете отменить только самый последний коммит?Можете ли вы когда-нибудь отменить коммит, кроме самого последнего, без создания конфликта?
ОБНОВЛЕНИЕ : редактирование вопроса после очень полезных разъяснений от @RomainValeri.Я думаю, что я делал слишком много путаницы между возвратом и сбросом.В приведенном ниже примере выполнение
git revert B
заставляет ветку переходить с
A-B-C-D
на
A-B-C-D-E
Если B был единственным коммитом, которыйизменил file2.txt, и B не сделал никаких других изменений в других файлах, тогда новый коммит E, созданный после возврата, сохранит все изменения, сделанные в C и D, но НЕ внесенные в B. Это правильно?
Это потому, что технически возврат означает отмену, отмену любых изменений коммита - это правильно?
Также: допустим, что У меня есть только один файл в моемрабочий каталог.Если B - единственный коммит, который изменяет функцию fun1 () в моем файле, , в то время как все другие коммиты изменяют другие функции в том же файле, тогда возврат B, скорее всего, вызовет конфликт , потому чтоgit мыслит с точки зрения строк в файле, а не с точки зрения функций в файле.Это правильно?
Итак, скажем, что B изменяет fun1 (), C изменяет fun2 () и D меняет fun3 ().Затем я понимаю, что изменения, сделанные в B в fun1 (), неверны, и мне нужно отменить их. Если все эти функции находятся в одном файле, есть ли способ отменить изменения в B при сохранении изменений в C и D?
Если вместо этого каждая из этих 3 функцийв отдельном файле гораздо проще отменить изменения одного коммита, не затрагивая другие, верно?
Я думаю, это, конечно, одна из многих причин, почему один файл никогда не должен бытьслишком большой и не содержит слишком много функций, делающих разные вещи, верно?