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

时间:2017-08-25 16:05:13

标签: git github git-fork git-rm

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

所以我继续使用

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

我想在我的推送中声明上游回购文件夹仍应在我自己的fork中可用。然而它也消失了......

  1. 删除原始仓库中的文件而不删除它们的最佳方法是什么?这甚至可能吗?

  2. 如何在fork repo中恢复已删除的文件夹? (我仍然在当地使用它,但如果我再推一遍,所有的历史都会消失)

1 个答案:

答案 0 :(得分:2)

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

  • 原始回购之一
  • 其中一个叉子

这样,你在一个(以及它的关联推动)中做的事情不会影响另一个回购(本地和远程回购)

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

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