在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
HEAD的情况很像我想要的。但是,当我想将master与功能合并时,我会遇到问题。我是否必须处理它或者是否存在这种情况的解决方案?
答案 0 :(得分:2)
事实上,如果您按照这种方式执行操作,当您合并这两个分支(主要和功能)时,您删除文件的提交将应用于功能,从而删除您尝试保持安全的文件在功能。
此外,如果您在master中删除了这些文件,在合并期间,文件将被删除然后修改,从而产生冲突:
CONFLICT(修改/删除):在HEAD中删除并修改了test.txt 特征。 test.txt的版本功能留在树中。自动合并 失败;修复冲突,然后提交结果。
如果文件未被修改(没有冲突),您可以在合并后通过恢复删除提交来解决此问题:
$ git merge feature # in master
$ git revert SHA-of-the-commit-deleting-your-file
您将获得功能和主分支的所有提交,而不会丢失文件。
但是,如果存在冲突,您可能需要手动解决此问题(除非有人为此找到完美的git命令!):
$ git merge feature # in master
$ git mergetool # use modified versions of files
$ git commit -m "Merge with deleted files solved"