Git - 如何删除上游存储库中的文件而不是从我的 fork 中删除文件

Git - How do I delete files in upstream repo but not from my fork

我已经分叉了一个回购(称为原始回购 upstream),因为必须进行一些清理,但我想保留我使用的文件夹 johannes

所以我用

删除了那个特定的文件夹
git rm -cached -r johannes/
git commit -m "deleted my folder so it doesn't bother you anymore."
git push upstream

我想通过在我的推送中声明上游回购,该文件夹应该仍然可以在我自己的分支中使用。然而它也不见了...

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

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

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

  • 原始仓库之一
  • 分叉之一

这样一来,您在一个仓库(及其相关推送)中所做的事情不会影响另一个仓库(本地仓库和远程仓库)

关于你的分叉,如果你只做了一个记录删除的提交,你可以(如果你没有任何正在进行的当前软木塞):

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

(假设您在正确的分支上,并且该分支设置为推送到 origin

如果您从那时起推送了一些提交,但不介意重写您的分叉历史,请在您的分叉的不同本地克隆中执行此操作

  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