为什么我在git pull后会得到未跟踪的文件(远程文件已移动)

13
运行git pull命令后,我的本地副本中出现了一些未跟踪的文件。这些文件在远程上被移动了,但是拉取操作没有将这些文件从我的工作目录中删除。我花了很多时间研究这个问题,但是没有找到类似的案例。这是预期行为吗?我有什么遗漏吗?还是两者都有?
背景:我制作了一个补丁,并将其发送给一个开源项目的开发人员,但是当它被提交到远程后,我想要删除我的本地提交并git pull“官方”补丁。所以我做了一堆“东西”来重置到之前的官方HEAD。 “东西”指的是像git checkout -- <file>git reset HEAD^和其他命令,由于我是新手,正在尝试研究最佳实践,所以我无法记住所有的命令。
无论如何,在我最终“撤销”我的提交并执行git pull后,我得到了价值66个提交的更改,包括我的补丁,一切看起来都很好。但是,git status显示有两个文件未被跟踪。我尝试了gitk <untracked_file1>,发现在大约20个提交之前,该文件被移动到另一个目录。该文件现在存在于新位置,但它没有删除旧文件,而是显示为未被跟踪。
我尝试按照这些说明进行硬重置,但文件仍然没有被跟踪。我可以使用git clean -f清除它们,但我想知道为什么文件没有自动删除。

如果文件现在“存储”在另一个位置,您可以放心地将它们删除。 - Tim Biegeleisen
2
确实,我在确认文件已经移动后立即运行了 git clean 命令。但是很奇怪的是,拉取操作并没有自动删除它们。 - SO_fix_the_vote_sorting_bug
对于 Git 来说,它并不知道你是否打算再次添加这些文件。因此,Git 可能会采取保险措施,不删除这些文件。 - Tim Biegeleisen
啊,也许这是预期的行为。我需要重新检查手册。Git 在防止我犯愚蠢错误方面做得很好... - SO_fix_the_vote_sorting_bug
1
我可以确认TortoiseGit确实删除了移动的文件。我在Linux机器和Windows上克隆了同一个存储库。另一个用户将一些目录移动到存储库中的另一个位置,以进行清理。我在两台机器上都执行了git pull,或者更准确地说,我在Linux上执行了git pull,在Windows中我在存储库文件夹上右键单击-> Git Sync...-> Pull。在Linux中,我在存储库根文件夹中还剩下3个目录未被跟踪,而在Windows中它们已经消失了。很想知道git行为和/或TortoiseGit的原因。 - zerzevul
3个回答

14

git pull 不会删除未提交的更改,它不会处理你的工作目录,任何更改或新文件都不会被修改,除非进行了提交。

如果想要了解任何 Git 仓库的状态,请阅读这篇文章:
https://git-scm.com/book/zh/v2/Git-基础-状态和 Git 变化

此外,为了将本地分支重置为与远程分支匹配,而不是使用 "bunch of stuff" 命令,可以使用以下命令:
git fetch --all
git reset --hard origin/<remote_branch_name>


我使用了你提到的两个命令:git fetch --all git reset --hard origin/但是当我使用 git status 时,会显示未跟踪的文件,怎么办? - Aayush Neupane
1
@AayushNeupane git 不会对未跟踪的文件进行任何操作,因为它们是未跟踪的,这意味着 git 没有追踪它们,因此没有 git 命令可以对未跟踪的文件进行任何操作。 - raj240

3
Ahmed Kamal的回答对于我类似问题没有任何改变。我使用了git clean -f <folder_name>,成功地从我正在跟踪的文件中删除了该文件夹。

0
另一个选项是不断删除一个提交并跳转到之前的提交,直到这些未暂存的修改文件不再显示,最后执行如下Pull操作:
ebanhhu@ebanhhu-vwcg:/home/epatdeb/uc$ git reset --hard HEAD~1

HEAD现在位于1e6c89a I.adoc

ebanhhu@ebanhhu-vwcg:/home/epatdeb/uc$ git reset --hard HEAD~1

HEAD现在位于xxxxx

ebanhhu@ebanhhu-vwcg:/home/epatdeb/uc$ git reset --hard HEAD~1

HEAD 现在位于 abc

最后执行 Pull 操作:

ebanhhu@ebanhhu-vwcg:/home/epatdeb/uc$ git pull

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接