Как вы можете объединить две ветки в git, сохраняя необходимые файлы из ветки?
При объединении двух ветвей, если файл был удален в одной ветке, а не в другой, файл в конечном итоге удаляется.
Например:
- Файл существует в master, когда вы создаете новую ветку
- вы удаляете файл из мастера, так как он нам не нужен (пока)
- вы вносите изменения в ветку, чтобы добавить функцию, которая опирается на существующий файл
- вы делаете исправления ошибок в master (нельзя отбрасывать)
- вы слились в один день, и файл пропал!
Как воспроизвести:
-
Создайте репозиторий git с одним файлом.
git init echo "test" > test.txt git add . git commit -m "initial commit"
-
Создать ветку
git branch branchA
-
Удалить файл в главном
git rm test.txt git commit -m "removed file from master"
-
Сделать ЛЮБЫЕ изменения в ветке А, которые не касаются удаленного файла (он должен быть неизменным, чтобы избежать конфликта)
git checkout branchA touch something.txt git add . git commit -m "some branch changes"
Отсюда, любым способом, который я нашел, чтобы объединить эти две ветки, файл test.txt удаляется. Предполагая, что мы полагаемся на файл для branchA
, это большая проблема.
Неудачные примеры:
Объединить 1
git checkout branchA
git merge master
ls test.txt
Объединить 2
git checkout master
git merge branchA
ls test.txt
Rebase 1
git checkout branchA
git rebase master
ls test.txt