如何删除已删除的文件显示在我的本地git状态?

时间:2011-11-10 20:27:34

标签: git github git-status

开发人员在服务器上添加了一个图像目录,而没有将该文件夹添加到.gitignore文件中。 当我做了一个git pull它拉了那些文件(数百个文件)。我将文件夹添加到服务器上的.gitignore,但不是我的本地系统。然后我在本地(永久)删除了文件。 当我执行git状态时,所有这些已删除的文件仍会显示。我怎么能抑制他们出现?

更新 感谢所有的帮助。为了确保没有错过理解: 我确实希望将文件保存在服务器上,只是想从git中删除它们。

6 个答案:

答案 0 :(得分:19)

我发现这是完成任务的最简单方法。

$> git add -u <directory-path>   (or you may use --update)

原始状态:

$> git status .

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
deleted:    .ipynb_checkpoints/Untitled-checkpoint.ipynb
deleted:    CVPR 1 hr tute-Backup.ipynb
deleted:    cifar10-test.t7
deleted:    cifar10-train.t7
deleted:    cifar10torchsmall.zip
deleted:    create_advr.lua
deleted:    criterion_cifar10_lr_0.001_epoch_13.t7
deleted:    train_cifar10.lua
deleted:    trained_net_cifar10_lr_0.001_epoch_13.t7

因此,要从当前目录中删除所有已删除的文件,我使用。

$> git add -u .
$> git commit -m "removing deleted files from tracking"
$> git push origin master

最终状态:

$> git status .

On branch master
nothing to commit, working directory clean

希望这会有所帮助:)

答案 1 :(得分:10)

您可能需要git rm已删除的文件。来自Pro Git

  

删除文件

     

要从Git中删除文件,您必须将其从跟踪中删除   文件(更准确地说,将其从暂存区域中删除)然后   承诺。 git rm命令执行此操作,并从中删除文件   您的工作目录,因此您不会将其视为未跟踪的文件   时间到了。

     

如果您只是从工作目录中删除该文件,它就会显示出来   在您的“已更改但未更新”(即未暂存)区域下   git status输出:

$ rm grit.gemspec
$ git status
# On branch master
#
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#
#       deleted:    grit.gemspec
#
     

然后,如果你运行git rm,它会暂停文件的删除:

$ git rm grit.gemspec
rm 'grit.gemspec'
$ git status
# On branch master
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    grit.gemspec
#
     

下次提交时,文件将消失,不再被跟踪。   如果您修改了文件并将其添加到索引中,则必须   使用-f选项强制删除。这是一个安全功能   防止意外删除尚未记录的数据   快照,无法从Git中恢复。

答案 2 :(得分:4)

在您发表评论后更新。

如果您想将图像保留在服务器上,但是从git中删除文件,则需要将--cached标记添加到git rm

cd images
git rm --cached *
cd ..
echo "images" > .gitignore
git add .
git commit -m "removed image files from git only"
git push

如果您希望人们在拉动(但没有文件)时创建图像目录,则添加images/.gitignore一行!.gitignore

请注意,这不会将其从历史记录中删除。为此,我会看this SO answer

答案 3 :(得分:3)

由于他们已经致力于存储库,因此工作量更大,但仍然可行。

我在此程序中找到的最佳演练是Github关于Removing Sensitive Data的指南。由于您希望保留文件,因此您需要在指南之前和之后执行此操作。

在开始此过程之前,请将文件复制到工作目录中。完成清除它们的回购后,将它们复制回来并将它们添加到.gitignore。

答案 4 :(得分:0)

也可以在本地将文件夹添加到.gitignore。

答案 5 :(得分:0)

git rm <deleted file path>然后git commit将清理工作目录。