我该如何处理这个Git错误?

时间:2015-10-17 12:30:42

标签: git

特别是.DS_Store文件,我在Mac上,所以我当然把它放在我的.gitignore中。我根本不在乎文件。但由于某种原因,它试图从我设置为服务器的裸仓库中取出它。

   Updating 8e11f79..b315527
    error: Your local changes to the following files would be overwritten by merge:
        .DS_Store
        config/wi-fi.txt
        web/.DS_Store
    Please, commit your changes or stash them before you can merge.
    Aborting

4 个答案:

答案 0 :(得分:3)

由于拉动导致错误,因此损坏已经完成:有人已将.DS_Store文件提交给git。当然,这应该永远不会发生,但它已经发生了。

您真的不希望此类文件受版本控制,因为

  1. git会在签出提交时对其进行修改,或者更糟糕的是,当您合并分支时,它会主动将其他人的更改合并到本地.DS_Store中已损坏的.DS_Store文件。我不知道你的操作系统对这些文件的内容做了什么,但它不希望你以任何方式改变它们。

  2. 当您的操作系统修改了包含.DS_Store文件的修订时,您将收到错误。

  3. 非Apple用户不会喜欢乱丢您的存储库的.DS_Store个文件。

  4. 我建议你尝试寻找文件的来源,因为这些信息对于解决问题的方法至关重要。命令

    git log --all -- .DS_Store
    

    为您提供了触及.DS_Store文件的所有提交的列表。这些是您需要重写以从历史记录中删除.DS_Store的提交。

    当然,重写提交可以使用大枪git filter-branch来完成,但只要它只是最近尚未合并的提交,你就可以放弃git rebase -i

    当然,当您完成后,将.DS_Store放入.gitignore 并在中查看。这可能会阻止人们(意外)在将来添加.DS_Store个文件。

答案 1 :(得分:0)

不是灵丹妙药,但以下内容对我有用:

git restore --staged ../.DS_Store

答案 2 :(得分:0)

只需删除 .DS_Store :)

为我工作。

答案 3 :(得分:0)

提交并推送更改后,可以尝试

git reset --hard

不要忘记将 .DS_Store 添加到 .gitignore