我的文件目录中有两个文件夹 A 和 B,它们链接到同一个 Git 存储库。
我在文件夹 A 中创建了一个名为 的文件index.html
。然后在文件夹 B 中创建了另一个名为 的文件index.html
。然后我将其添加index.html
到文件夹 B 中,提交并推送 B 的内容。
当我从文件夹 A 拉取文件时,Git 声称我的文件“已更新”。但是两个文件夹显然有不同的index.html
文件。发生了什么?
答案1
git pull
的工作是将fetch
新提交添加merge
到当前分支。如果当前分支与你从中拉取的分支相比并不过时,pull 会说Already up-to-date.
即使你的工作目录中有本地更改.git pull
关注的是分支,而不是工作树 —— 仅当存在干扰合并的更改时它才会对工作树进行评论。
您的描述不足以解释为什么它不反对现有的index.html
,但您不应将其Already up-to-date.
视为 git 认为您没有更改的意思。相反,请使用git status
来获取摘要。
为了了解您的分支的状态,git branch -v
它很有用(它显示提交 ID 和与每个分支的上游分支的关系),或者gitk --all
显示所有提交的图形视图。
答案2
如果我理解正确的话,以下脚本应该可以重现您的问题:
mkdir 测试 CD测试 git init --裸测试.git git clone 测试.git a git clone 测试.git b 回显 a > a/index.html 回声 b > b/index.html 光盘 git 添加 index.html git 提交 -m 添加 git push origin master cd../a git pull
最后git pull
打印:
远程:计数对象:3,完成。 远程:总计 3(增量 0),重用 0(增量 0) 拆开物体:100% (3/3),完成。 来自 /home/cyrus/tmp/test/test * [新分支] master -> origin/master
并且的内容index.html
已被默默覆盖:
cyrus:~/tmp/test/a$ cat index.html b
答案3
答案4
看起来你已经习惯了 SVN,其中不同的文件夹(甚至是文件,不知道)可以检出不同的修订版本。
git 无法做到这一点。无论你所在的文件夹是什么,提交或签出(这也是成功拉取的最后一步)都会独立于你当前所在的文件夹对所有工作文件执行操作。