26

我正在与这里的一位开发人员合作,他发现了一个我以前从未遇到过的奇怪问题。他正在开发一个存储库,需要从其他人那里获取最新的更改,然后才能推送。他的所有更改都已提交。

$ git pull
Cannot pull with rebase: You have unstaged changes.
Please commit or stash them.

这似乎足够合理,直到......

$ git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 3 and 1 different commit each, respectively.
#
nothing to commit (working directory clean)

说什么?

我在拉之前尝试git reset --hard HEAD过,但拉仍然失败。

只有一个人看到这个并且他在 Mac (OSX 10.6.8) 上。有任何想法吗?我正要拔头发。

4

6 回答 6

25

代替

git pull

尝试

git fetch
git rebase -p origin/master

如果这不起作用,您可以尝试

git pull --no-rebase

如何检查为什么会出现此消息

确保你在一个分支上,而不是一个独立的头。变基不适用于分离的头部。

运行以下命令,结果应该是没有输出。

git update-index -q --ignore-submodules --refresh
git diff-files --ignore-submodules
git diff-index --cached --ignore-submodules HEAD --
于 2012-12-04T01:16:37.933 回答
9

您在本地文件系统或 nfs 共享上工作吗?

我在处理 nfs 共享时遇到了完全相同的问题。

noatime在命令中添加了选项mount,它有帮助:

mount -t nfs -o noatime,... device dir
于 2013-05-22T09:10:49.267 回答
1

对我来说问题是安全文件夹中的文件

  1. 只有这个命令显示有文件未暂存

    git diff-files --ignore-submodules
    
  2. 取消配置 git-crypt 并重新加密工作树中的文件

    git-crypt lock
    
于 2019-07-15T13:42:07.207 回答
0

您可以尝试 $ git stash 然后尝试 git pull。

于 2013-09-05T07:04:24.020 回答
0

当我尝试对 root 拥有的 repo 进行 rebase 时遇到了这个问题(我是一个非特权用户)。

于 2020-04-13T10:32:32.287 回答
-1

看起来可能正在进行rebase。先试试跑步git rebase --abort

清除局部的更强有力的方法包括

  • 删除工作目录中的所有文件(当然不包括 .git 目录)

  • git clean -d -x -f-d:目录,-x:忽略的文件,-f:强制。替换-f-n空运行)

然后跟进 agit reset --hardgit checkout

另一个想法是尝试一个git reset --hard HEAD~N- 即重置一些提交,并希望拉动能够工作并快进本地。

于 2012-12-03T21:58:55.337 回答