git merge: удаление файлов, которые я хочу сохранить!
Как можно объединить две ветки в git, сохранивнеобходимо файлы из ветки?
При объединении двух ветвей, если файл был удален в одной ветви, а не в другой, файл в конечном итоге удаляется.
Например:
Файл существует в 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"
Внесите ЛЮБЫЕ изменения в веткуt коснуться удаленного файла (он должен быть неизменным, чтобы избежать конфликта)
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
Ребаз 1
git checkout branchA
git rebase master
ls test.txt