Git:为什么删除文件不会同步?

4

新手上路。我有两个Linux工作站,WS-A和WS-B。

我在WS-A上有一个项目,然后将其推送到了我的Bitbucket远程仓库上。

然后我在WS-B上使用git clone命令克隆了该项目,做了一些修改并删除了一些文件,由于某些原因。之后,我在WS-B上再次进行了推送。

但我很困惑,在现在的WS-A上,当我执行git pull命令时,那些已删除的文件仍然存在!!我该怎么办?我百分之百确定我要删除它们。我是这段代码的唯一用户。我只想保留一个版本。


你提交了删除操作吗? - Carl Norum
1
是的,我确实在WS-B上提交了。 - Daniel
在你在 WS-A 上使用的相同分支上吗?能否展示更多命令? - Carl Norum
因为我是唯一的代码开发者,所以我想保持简单,因此所有工作站和远程仓库只有一个分支,即master分支。 - Daniel
3
也许你对文件使用了 rm 而不是 git rm - wim
显示剩余2条评论
2个回答

3

是的,你必须使用 git rm,否则这些文件只是被删除了工作副本中,但并没有从仓库中删除。 git status 应该会显示这些文件为“已删除”,但未暂存以提交。使用 git rm; git commitgit push 它们,然后从另一个框中进行 git pull,它们就会消失。


谢谢!为什么Git不能“自动检测”哪些文件被删除,并将其安全地保存在类似“回收站”的地方?为什么“文件删除”操作必须与“文件修改”和“文件创建”不同? - Daniel
1
git确实将其保存在某种“回收站”中,这就是为什么如果您只是使用rm删除文件,它并没有真正消失,直到您使用git rm。即使这样,您仍然可以通过返回历史记录来恢复已删除的文件。这就是版本控制的魔力! - quickshiftin

2

一个具体的例子可以帮助开发人员解决从存储库中清除已删除并被Git标记为“已删除”的文件的困难。如果您不永久删除这些“已删除”文件,Git每次执行git status时都会向您显示它们。当有许多“已删除”文件挂起时,很难阅读git status的输出。

1) 使用git status检查您的存储库状态:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
    (use "git add/rm <file>..." to update what will be committed)
    (use "git checkout -- <file>..." to discard changes in working directory)
        deleted:    repoDir/subDir/Info.plist
        deleted:    repoDir/subDir/MacOS/CrashLogDemo
        deleted:    repoDir/subDir/PkgInfo...

no changes added to commit (use "git add" and/or "git commit -a")

2) 使用git rm命令永久删除Git标记为“已删除”的文件(在这种情况下,我使用通配符[*]来删除整个目录):

$ git rm repoDir/subDir/*
rm 'repoDir/subDir/Info.plist'
rm 'repoDir/subDir/MacOS/CrashLogDemo'
rm 'repoDir/subDir/PkgInfo'...

3) 使用git commit -m提交带有注释的更改:

$ git commit -m "Removed unncessary files."
[master 9178ad4] Removed unncessary files.
    28 files changed, 2377 deletions(-)
    delete mode 100644 repoDir/subDir/Info.plist
    delete mode 100644 repoDir/subDir/MacOS/CrashLogDemo
    delete mode 100644 repoDir/subDir/PkgInfo...

4) 将更改通过 git push 推送到相应的仓库/分支:

$ git push origin master
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 291 bytes | 291.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/accountName/CrashLogDemo.git
    f4716fa..9178ad4  master -> master

5) 最后,当其他用户执行git pull时,不必要的文件将从他们的本地删除。


1
感谢您的编辑。我没有意识到StackOverflow编辑器如此智能。 - thedoctori

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