&引用;“移动”;文件在Git中指向其自己的分支

&引用;“移动”;文件在Git中指向其自己的分支,git,branch,feature-branch,Git,Branch,Feature Branch,在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' $ g

在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中删除test.txt,在中修改 特色。test.txt的版本特性留在树中。自动合并 失败;修复冲突,然后提交结果

如果未修改文件(无冲突),则可以在合并后通过还原删除提交来解决此问题:

$ git merge feature # in master
$ git revert SHA-of-the-commit-deleting-your-file
您可以在不丢失文件的情况下获得功能和主分支的所有提交

但是,如果有冲突,您可能必须手动解决(除非有人找到适合此问题的git命令!):


回答很好(+1),但我想知道是否有某种合并驱动程序要到位,以便“保护”这些文件,并避免在合并过程中删除它们(避免需要恢复或解决冲突)。我想知道,如果
git rm
它们,并在功能分支中重新添加它们,是否会更好。当然,这将打破他们的历史,但在我的场景中,未来的易用性应该超过这一点。如果这只是一个简单和保存文件的问题,那么您可以在master上使用
git rm
,在feature上使用
git add
,您应该很好。如果您使用大文件,我看到的唯一问题可能会出现:这些文件不会在存储库中存储一次,我相信它们会被找到两次,并且您可能必须找到一种永久删除初始文件的方法(包括非快进提交…)。如果您只处理小文件(配置文件等),这并不真正影响您。我可能也错了(如果文件具有相同的名称和内容…)。
$ git merge feature # in master
$ git mergetool # use modified versions of files
$ git commit -m "Merge with deleted files solved"