由于对未更改文件的更改,Git拒绝合并

时间:2013-03-01 18:19:36

标签: git merge git-merge

我有一个git问题,我想将一个分支合并到master中,但它拒绝合并,因为它认为我对文件进行了本地更改。执行状态显示没有更改,并且区分文件不会产生任何结果。这是终端输出:

$ git checkout ProductsAndContents
Switched to branch 'ProductsAndContents'

$ git status
# On branch ProductsAndContents
nothing to commit (working directory clean)

$ git checkout master
Switched to branch 'master'

$ git status
# On branch master
nothing to commit (working directory clean)

$ 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

非常感谢任何帮助或建议!

4 个答案:

答案 0 :(得分:3)

感谢Andrew Myers对我最初提问的评论,我发现将core.trustctime设置为false可以解决问题。

git config core.trustctime false

关于inode更改时间不匹配的事情。我猜这是因为repo位于一台机器上的文件共享中,该机器与我正在使用的文件系统不同。

感谢所有的建议!

答案 1 :(得分:1)

好吧,如果您确信自己不会失去任何工作,请尝试以下方法:

rm tests/unit/src/models/BrandTests.js
git checkout -- tests/unit/src/models/BrandTests.js

这应该重置任何让它认为有变化的机制。如果它不起作用,请让其他人可以。

答案 2 :(得分:1)

我猜这是你的情景:

$ 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,您可能需要检查两个分支中每个分支上存在的版本。)

答案 3 :(得分:-2)

仅仅因为每个分支都没有提交,并不意味着它们是相同的。我有兴趣使用

查看两个文件之间的差异
git diff

您可以使用

恢复已提交到存储库的修订版
git checkout -- tests/unit/src/models/BrandTests.js