3

在 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 合并到 feature 时,我会遇到问题。我必须处理它还是有这种情况的解决方案?

4

1 回答 1

2

事实上,如果你这样做,当你合并这两个分支(主分支和特性)时,你删除文件的提交将应用于特性,从而删除你试图在特性中保持安全的文件。

此外,如果你在master中删除后修改了feature中的那些文件,在合并过程中,这些文件将被删除然后修改,从而产生冲突:

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"
于 2011-11-15T12:53:21.550 回答