Нет способа использовать универсальный подход для удаления данных в одной ветви и последующего объединения этих данных через другую ветвь, в то же время сохраняя другие изменения изолированными в их соответствующих ветвях (большеоб этом позже).Но может быть подход специфический для вашего рабочего процесса.
Явное решение
Если у вас нет других изменений в вашей ветке master
, то вы ищетедля этого:
git checkout master
vim <file where you delete lis>
git add <file>
git commit
git checkout development
git merge master
git revert master
Позвольте мне объяснить, что там происходит:
Вы вносите свои изменения в ветку master
- там вы удаляете все эти <li>
изафиксируйте обновление.
После этого вы переключаетесь в ветку разработки и объединяете там свою ветку master
.Так что обе ветки находятся на одной странице.Таким образом, все последующие изменения в ветви разработки будут изменениями, видимыми для Git как «разница по сравнению с мастером» - и они будут применены в будущих слияниях ветви разработки с мастером.
Тогдаgit revert master
создает новый коммит в ветке разработки с инверсией изменений, сделанных последними в ветке master
- т.е. он эффективно добавляет <li>
назад, потому что их удаление было последним коммитом в master
.
Позже, когда вы объедините development
в master
, он восстановит ваш <li>
там.
Еще раз подчеркну одну особенность: она работает хорошо только в том случае, если в ветке master
нет других изменений, кроме удаления li
.Это потому, что когда вы выполняете git merge master
, он вносит все master
изменения в ветку разработки, что может быть нежелательно.
Обратите внимание, что вы не можете избежать объединения master
с веткой разработки, потому что они нуждаютсяиметь общий предок коммит, где <li>
были удалены.Кроме того, ветка разработки должна иметь явную фиксацию, где <li>
были добавлены обратно.Только с этой настройкой Git будет применять этот коммит позже, когда вы будете объединять ветку разработки с master
.
Неявное решение
Универсальный предлагаемый подход в этом случае заключается в запоминании идентификатора фиксации., где вы удалили li
с.Позже вам нужно будет вернуть его вручную после слияния ветки разработки с master:
git checkout master
git merge development
git revert <id of the commit where you deleted li>
Могут быть и другие решения, но они более организационные или требуют других инструментов, помимо простого Git.