Я использую Git уже около года и думаю, что это фантастика, но я только начал над второй версией проекта и начал новую ветку для него. Я немного борюсь с лучшим способом справиться с ситуацией.
У меня есть две ветви, называемые скажем master10 (для v1) и master20 (для v2). Я делал исправления ошибок в v1 на ветке master10 и разрабатывал новые вещи для master20. Всякий раз, когда я исправляю ошибку, я объединяю ее с версией v2, проверяя master20 и делая git merge master10
. Все идет нормально.
Однако теперь я внес в v1 изменение, которое не требуется в v2, но я хочу продолжить объединение других исправлений ошибок. Как мне сказать Git пропустить этот конкретный коммит (или диапазон коммитов), но в дальнейшем я все еще хочу объединить другие исправления ошибок.
Я подумал, git rebase
что это то, что мне нужно, но прочитал документ, и моя голова чуть не взорвалась.
Я думаю, что мне нужно что-то вроде команды «git sync», которая сообщает git, что две ветви сейчас синхронизированы и в будущем объединяют только коммиты с этой точки синхронизации.
Любая помощь приветствуется.
источник
ИМХО, самое логичное, что нужно сделать, это объединить все, а затем использовать git revert (commit_you_dont_want) для его удаления .
Пример:
Если у вас есть несколько коммитов "to-ignore" или вы хотите отредактировать сообщение об отмене:
Тогда ваша история может выглядеть так:
Если у вас есть конфликты, связанные ТОЛЬКО с этими фиксациями «игнорировать», вы можете использовать:
Таким образом, ваша версия будет сохраняться над другой. Даже без сообщений об ошибках вы все равно можете «отменить» эти нежелательные коммиты, потому что они могут иметь другие изменения, которые не конфликтовали, и вы все равно не хотите их.
Если у вас есть конфликты, связанные НЕ ТОЛЬКО с фиксацией «игнорировать», вы должны разрешить их вручную, и вам, вероятно, придется разрешать их снова во время возврата.
источник
Коммиты включают в себя родословную. Вы не можете объединить коммит без слияния предыдущих коммитов.
Вы можете выбрать их, конечно. Это хороший поток, когда у вас есть ветвь, которая находится в режиме обслуживания.
источник
Походит на классический случай для 'git cherry-pick' https://git-scm.com/docs/git-cherry-pick, это делает точно, как это звучит
источник
Своего рода реклама моего проекта, которая в основном оборачивает процесс, описанный @araqnid.
Это своего рода помощник, который вводит следующий поток GIT:
Цитата со страницы проекта:
источник
Создайте третью ветку для изменений, которые вы хотите в master10, но не в master20. Всегда считайте master10 своим "хозяином", самой стабильной веткой из всех. Ветвь, с которой все остальные ветви должны постоянно синхронизироваться.
источник
Вместо
revert
илиcherry-pick
для этого случая вам нужно получить git, чтобы учесть изменения, которые вы пропускаете, старше, чем те, которые вы сделали.Так:
git merge ccc
git merge fff --no-commit
git merge --continue
git merge source-branch-head
После шага 4 git будет считать вашу ветку более новой, чем эта фиксация, поскольку вы уже имели дело с ней (решив сохранить ВАШИ версии вещей).
источник