我有一个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
非常感谢任何帮助或建议!
答案 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