«Переместить» файлы в свою ветку в Git - PullRequest
3 голосов
/ 15 ноября 2011

В master у меня есть несколько файлов, которые должны лучше жить в ветке функций.Я хотел бы создать такую ​​ветку и иметь там файлы, в то же время удаляя их из master.

Меня не волнует история, то есть файлы не нужно удалять из предыдущих коммитов,Когда я делаю

$ git ls-files
stay.txt
move.txt

$ git checkout -b feature
Switched to a new branch 'feature'

$ git checkout master
Switched to branch 'master'

$ git rm move.txt

, ситуация в ГОЛОВЕ очень похожа на то, что я хочу.Однако я столкнусь с проблемами, когда захочу объединить мастер с функцией.Должен ли я иметь дело с этим или есть решение для такого сценария?

1 Ответ

2 голосов
/ 15 ноября 2011

Действительно, если вы будете действовать таким образом, когда вы объедините эти две ветви (master & feature), фиксация, в которой вы удалили ваши файлы, будет применена к функции, тем самым удалив файлы, которые вы пытались сохранить вfeature.

Кроме того, если вы измените эти файлы в компоненте после удаления его в master, во время слияния файлы будут удалены, а затем изменены, что приведет к конфликту:

CONFLICT(изменить / удалить): test.txt удален в HEAD и изменен в функции.Функция версии test.txt оставлена ​​в дереве.Автоматическое объединение не выполнено;исправьте конфликты, а затем зафиксируйте результат.

Если файлы не были изменены (без конфликтов), вы можете решить эту проблему после слияния, отменив удаление удаления:

$ git merge feature # in master
$ git revert SHA-of-the-commit-deleting-your-file

Вы получите все коммиты ветки Feature и Master без потери файлов.

Однако, если возникает конфликт, вам, возможно, придется решить это вручную (если кто-то не найдет для этого идеальную команду git!):

$ git merge feature # in master
$ git mergetool # use modified versions of files
$ git commit -m "Merge with deleted files solved"
...