Git拉取(pull)-已删除的文件

12

我有一个开发服务器和几个生产服务器。我从开发服务器提交到远程代码仓库,并设置了 git push production,它会在生产服务器上执行 pull 操作。 我需要从跟踪列表中删除一些包含静态文件的目录,所以我使用以下命令:

从 Git 仓库中删除现有文件 (简要概述:运行 git rm --cached myfolders 命令,并将目录添加到 .gitignore 文件中)

我还没有提交这些更改。使用 git status 命令时,这些文件显示为已删除。

#       deleted:    file1.jpg
#       deleted:    file2.jpg
#       deleted:    file3.jpg
#       deleted:    file4.jpg
#       deleted:    file5.jpg

我担心的是:当执行git pull时,'deleted'文件是否会从生产服务器(磁盘上)删除?我只想让它们不被跟踪,但不要从磁盘中删除。

谢谢


3
我忍不住想到以这种方式管理部署到生产环境并不是个好主意。 - Brian Agnew
我同意你的观点。不知道你是否认为这样更好,即拉取并不是真正自动化的,我会从开发环境中执行“git push production”。我编辑了问题。个人而言,我更喜欢使用rsync脚本来完成所有操作。 - Mecca
3个回答

14

是的,如果您拉取了一个包含删除操作的提交,那么文件将被删除。您需要手动恢复文件。


5

是的,如果您执行git pull,文件将被删除。Git无法做其他事情 - 假设存储库中的某些代码依赖于某个文件的存在或不存在。删除文件可能会导致显着的结果行为,因此Git在拉取时必须删除该文件。


谢谢!在这种情况下差点犯了一个大错误 :) - Mecca

2

正如其他人所回答的那样,您需要手动恢复已删除的文件。您可以使用以下方法进行操作:

git checkout sha1 -- file1.jpg file2.jpg

其中sha1是合并之前的提交。有多种方法可以获取该提交,比如使用HEAD~1,或者从拉取输出中复制最简单的方式。类似于:

Updating bea26f6..d5a6bc6

其中第一个提交是您本地拥有的提交。


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