gpt4 book ai didi

git - 从 Git 中删除文件 - 困惑

转载 作者:太空狗 更新时间:2023-10-29 14:37:41 26 4
gpt4 key购买 nike

我正在尝试学习使用 Git,我有点了解 pull 和推等的基础知识,但我对删除感到困惑。

这就是我所做的(使用 fortrabbit 和 laravel):

  • 创建了一个 Laravel 项目
  • 在项目文件夹中运行git init .
  • 运行 git remote add origin ...
  • 运行 git add -A
  • 运行 git commit -am 'Initial'
  • 运行 git push -u origin master

现在我的本地副本与我的远程副本匹配。

我现在想删除一个文件,所以我创建了一个测试文件:

  • 运行touch testfile1.php

我添加文件,提交它然后推送它。现在我在本地和远程都有测试文件。

问题是删除它。这个问题分为两部分:

阅读这个 SO 问题:How can I delete a file from git repo?它说我应该这样做:

  • git rm testfile1.php
  • git commit -m '删除文件'
  • git push origin master

然而,这只会删除本地副本。远程副本还在!

如果我从本地副本中删除它,它如何也从远程版本中删除?

我的第二个问题是,如果其他人有副本,他们怎么知道我已经删除了该文件?如果他们将他们的副本推送回远程副本,它不会只是重新添加已删除的文件吗?

感谢任何帮助。

编辑

这是git rm命令的输出,以及命令后的远程版本:

enter image description here enter image description here

第一张图片是我在输入 git rm testfile1.php 文件。然后它输出 rm testfile1.php 并返回到提示符。当我 SSH 回到远程版本时,testfile`.php 仍然存在:/

另一个编辑

我刚刚阅读了 Fortrabbit 提供的一些帮助文章,主要是这篇文章:http://help.fortrabbit.com/git#toc-behind-the-scenes

它说它会覆盖,但不会删除。

这就是为什么 git 说它是最新的,但文件仍在网络根目录中的原因吗?如果是这样,为什么可能不删除我要求删除的文件?!

最佳答案

好的,现在我明白问题所在了。您期望 git push 更改服务器上 git 存储库工作目录中的文件。它不是这样工作的。推送到远程仓库只会更新 git 对象数据库,不会更新工作目录。如果您在服务器上运行 git log,您会看到您推送的提交实际上就在那里,但工作目录尚未更新。服务器上的 git reset --hard 应该可以解决这个问题。

通常,服务器上的 git 存储库被创建为称为“裸存储库”的东西。裸仓库没有工作目录,它们只包含底层的 git 对象数据库。但是,在您的情况下,您在服务器上创建了一个完整的(非裸机)存储库并将其用作您的 Remote 。不建议这样做,因为它会产生类似于您在此处发现的问题。

你应该做的是create a bare repository在服务器上,然后在服务器克隆上进行本地 checkout 并从中提取更改。

关于git - 从 Git 中删除文件 - 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31703195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com