Git - 如何删除上游存储库中的文件,但不删除我的分支中的文件

标签 git github git-fork git-rm

我已经 fork 了一个存储库(称为原始存储库上游),因为必须进行一些清理工作,但我想保留我使用的文件夹johannes

所以我跟着删除了该特定文件夹

git rm -cached -r johannes/
git commit -m "deleted my folder so it doesn't bother you anymore."
git push upstream

我认为在我的推送中声明上游存储库后,文件夹应该仍然可以在我自己的分支中使用。然而它也消失了......

  1. 删除原始存储库上的文件而不在分支上删除文件的最佳方法是什么?这可能吗?

  2. 如何恢复我的分支存储库中已删除的文件夹? (我本地仍然有它,但是如果我再次推送它,所有历史记录都会消失)

最佳答案

为了不混淆推送,我会保留两个单独的克隆:

  • 原始存储库之一
  • 其中一个 fork

这样,您在一个存储库(及其关联的推送)中所做的操作就不会影响另一个存储库(本地和远程存储库)

关于您的 fork ,如果您只进行了一次提交记录该删除,则可以(如果您当前没有任何正在进行的软木塞):

git reset --hard @~
git push --force

(假设您位于正确的分支,并且该分支设置为推送到 origin)

如果您从那时起已经推送了一些提交,但不介意重写您的 fork 的历史记录,请在您的 fork 的另一个本地克隆中执行此操作

  git clone https://github.com/<you>/<yourFork> yourFork2
  cd yourFork2
  git reset --hard <last_commit_where_folder_was_present>
  git --work-tree=../yourFork add .
  git commit -m "Add work since last_commit_where_folder_was_present>
  git push --force

关于Git - 如何删除上游存储库中的文件,但不删除我的分支中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45885425/

相关文章:

git - git 中有哪些不同的存储库格式版本(对于 core.repositoryFormatVersion 设置)?

git - 使用一个命令部署到 Web 服务器和 github

testing - 托管在 github 上的 cmake 项目的持续集成软件

Github - 在两个断开连接的存储库之间创建 pull 请求

php - 更改包的 Composer git 源

github - 加入团队后克隆或 fork 项目

git - 添加你的 .vim ~/.vimrc 到 github(又名点文件)

git - 如何处理/修复 git add/add 冲突?

linux - 如何在 Mac 或 Linux 中找到 git 的安装路径?

git - 避免在 git 中使用时间戳