我猜这是你的场景:
$ git checkout ProductsAndContents
Switched to branch 'ProductsAndContents'
分支ProductsAndContents
包含文件tests/unit/src/models/BrandTests.js
,因此上面checkout
创建它和/或确保它与请求的特定提交是最新的。
$ git status
# On branch ProductsAndContents
nothing to commit (working directory clean)
您没有进行任何更改,并从一个干净的工作目录开始,所以这很好。
$ git checkout master
Switched to branch 'master'
这确保了最新提交中包含的所有文件在master
工作目录中都是最新的。但是,它不会删除或更新不包含在master
中或被忽略的文件。在这里,无论出于何种原因,我假设master
当前不包含有问题的文件。
$ git status
# On branch master
nothing to commit (working directory clean)
同样,您没有进行任何修改。此处未将相关文件作为未跟踪文件提及这一事实可能意味着它被忽略(在.gitignore
或 中.git/info/exclude
)。master
不包含该文件,因此它不关心它是否存在。
$ git merge ProductsAndContents
error: Your local changes to the following files would be overwritten by merge:
tests/unit/src/models/BrandTests.js
Please, commit your changes or stash them before you can merge.
Aborting
在这里,您在另一个分支中合并的尝试想要引入一个master
当前没有的文件,这通常很好。但是,该文件存在于您的工作目录中,并且git
不想丢弃不确定是否保留在存储库中的内容。正如其他地方所建议的那样,您可以(假设您知道它是安全的)只需删除该文件并重新尝试合并。
根据您提供的信息,我不能 100% 确定这就是您所拥有的;但是,您可以运行这两个命令来检查该情况:
git ls-files master -- tests/unit/src/models/BrandTests.js
git ls-files ProductsAndContents -- tests/unit/src/models/BrandTests.js
如果我的猜测是正确的,第一个命令不会显示文件存在,而第二个会。然后检查.gitignore
它.git/info/exclude
是否被忽略(对于.gitignore
,您可能需要检查两个分支中每个分支上存在的版本)。