git错误:checkout会覆盖以下未跟踪的工作树文件

时间:2016-01-20 17:13:18

标签: git

我只想询问有关我所做的事情的反馈,以及是否有更好的方法来解决这个问题。由于权限不足,当git突然停止时,我正在做一个“git pull”。

某些新文件已从远程服务器复制。但是,当我继续做另一个“git pull”时,它表示将覆盖以下工作树文件并隐藏或提交更改。我搜索并发现了一个存储文件的建议,但在存储文件时出现了另一个权限错误(“无法取消链接文件”)。

这让我完成了git pull,但是我的一些局部变化现在已经存在了。当我想运行“git stash apply”时,它给了我同样的错误,关于未跟踪的工作树文件将被覆盖。

最后,我必须在我能够应用git stash之前移动文件。

1 个答案:

答案 0 :(得分:1)

你问是否有更好的方法来处理你的情况,我相信有。但是,它可能无法完全解决您遇到的权限问题。

我建议不要使用git pull命令。 pull真正做的是fetch后跟merge,但您无法控制此过程。首先运行get fetch --all,您将收到来自所有遥控器的所有新提交。获取这些更改后,您可以手动合并它们。这样做的好处是不会移动HEAD指针(即不更改文件系统中的文件)。因此,您应该能够在没有任何操作系统权限问题的情况下获得其他开发人员所做的更改。

对我来说,这个过程通常看起来像

$ git fetch --all
remote: Counting objects: 250, done.
remote: Compressing objects: 100% (69/69), done.
remote: Total 250 (delta 103), reused 76 (delta 76), pack-reused 88
Receiving objects: 100% (250/250), 64.16 KiB | 0 bytes/s, done.
Resolving deltas: 100% (116/116), completed with 37 local objects.
From github.com:org/repo
   9b49e78..14dc510  master       -> upstream/master

$ git rebase upstream/master mybranch

在这种情况下使用rebase代替merge,以便在您fetch编辑的其他开发者所做的最新更改之上应用您的更改。如果没有rebase,您将被迫进行额外的提交,以将您的更改与其他人所做的更改合并。这可能会出现权限问题,因为rebase正在改变HEAD指向每个修改过的提交的位置。

我希望这有帮助!