从远程git资源库中删除不需要的文件

bq3bfh9z  于 2022-11-20  发布在  Git
关注(0)|答案(5)|浏览(149)

我在推送一个本地git仓库到Bitbucket时,不小心忘记了包含一个.gitignore文件,结果导致大量不需要的.aux文件出现在远程仓库中。
直接在Bitbucket上删除它们最多也要花很长时间。有没有什么好的方法在本地完成这个操作?或者有没有一个安全的方法可以基本上“重新开始”,这样我就可以包含.gitignore文件了?
而且,不管什么原因,.aux文件在我的本地文件中找不到。它们只是在我做了最初的推送后出现在Bitbucket上。
我是git的新手,所以明确的解决方案特别受欢迎。

**UPDATE:**不幸的是,我没有设法用任何建议的解决方案来解决这个问题(我很感激)。我最终只是复制了我的文件,然后恢复了最初的提交。然后我把文件复制回原始目录。最后,我用这次包括的.gitignore文件重新推送了它们。

cwtwac6a

cwtwac6a1#

首先使用以下命令取消跟踪所有现有文件:
git rm -r -缓存
然后更新您.gitignore并再次提交/推送。

fivyi3re

fivyi3re2#

将要忽略的路径添加到.gitignore
然后通过执行以下命令从索引中删除指定路径下的文件,从而停止跟踪该文件:

git rm --cached <file_path>

下一次提交和推送将删除指定路径中的文件。

tvokkenx

tvokkenx3#

好的。下面是我将遵循的策略。在那之前,从你的项目中删除.gitignore。现在,你的工作树和临时区域将是干净的。并且本地和远程存储库都将有.aux文件。

**步骤1:**从本地存储库中删除最后一次提交.

git reset --soft head~1

这将删除最后一次提交,这将有效地将您的.aux文件从提交区域移动到临时区域。

**步骤2:**将本地存储库强制推入远程位存储库。

git push -f origin master

此时,如果你检查你的bitbucket repo,你会发现你之前的提交被删除了,所以,一半的损坏被恢复了。

**步骤3:**将所有临时区域档案移至工作区域。

git reset head

**步骤4:**将.gitignore加入至项目。
**第5步:**执行git status检查是否可以看到忽略的文件。我确信你不会看到它们。但是,你会看到所有你想要的文件,你希望提交,但与不需要的文件沿着提交。
**步骤6:**将所有工作目录文件添加到临时区域,提交这些文件并推送到远程存储库。

git add .
git commit -m "message"
git push origin master
y53ybaqx

y53ybaqx4#

有几种方法可以做到这一点,例如:

  • 使用git checkout -b <newbranch>转到一个新的分支并在本地删除文件
  • 使用git commit --amend修改提交或将其作为新提交推送
  • 回到你的master branch
  • 那么您可以添加.gitignore并提交它

另一个道:

  • 使用git revert <commitId>恢复提交(这将创建一个新的提交,该提交将完全删除)
  • 再次添加提交(例如使用git cherry-pick <commitId>
  • 将文件添加到.gitignore
  • 提交此新提交

第三种方法是使用
git rm --cached <file>,此处有详细的说明。
如果你需要更多的信息,请告诉我。
PS:始终使用git status验证您的提交

xoefb8l8

xoefb8l85#

如果你想从git repo中清除不需要的文件,以最小化空repo的大小,并将它们从历史记录中删除,就像从来没有发生过一样,这是可能的,过滤器选项,但它会重写整个历史记录,以任何你想要的起点,每一个删除的提交将有一个新的提交哈希,你将不得不强行推送整个repo。这意味着他们推送了所有内容,并且没有在本地提交新的更改。他们必须在本地删除repo,而不仅仅是整个本地克隆文件夹的分支
你可以重新创建repo,强制推送,然后让他们重新克隆。
“Git filter-branch”,但这里有一些初始信息
https://torchbox.com/blog/how-remove-unwanted-files-your-git-repository/
在你玩像这样的高级操作之前,我建议你100%克隆备份到你账户中的另一个源,像这样的URL只是为了演示,你显然需要使用你的

git clone --bare https://bitbucket.org/YouInstance/your-repo.git
cd your-repo.git 
git push --mirror https://bitbucket.org/YouInstance/your-backup-repo.git
 
# delete cloned bare repo
rm -rf your-repo.git

是的,扩展名是文件夹名称的一部分,因为它是一个空的存储库,因为存储在服务器上。rm -rf是Linux/bash风格的命令,以强制删除文件夹,所以如果你是从Windows CMD工作,它将是rmdir

相关问题