gpt4 book ai didi

git - 从所有以前的提交中删除一个目录

转载 作者:IT王子 更新时间:2023-10-29 01:28:18 24 4
gpt4 key购买 nike

Git Repo,有一个文件夹ABC,里面有三个文件,名字里都有空格 file - 1.ext, file - 2.extfile - 3.ext。我想删除文件夹和文件。我只知道如何通过这个命令删除文件

git filter-branch \
--index-filter 'git rm --cached --ignore-unmatch FILE' \
--prune-empty --tag-name-filter cat -- --all

然后你 git push origin master --force

(1) 但是如何从所有以前的提交中删除文件夹 ABC 及其文件?

此外,这些文件的名称中包含空格,并且以下内容未在 repo 提交中检测到它们:

git filter-branch \
--index-filter 'git rm --cached --ignore-unmatch file\ -\ 1.ext' \
--prune-empty --tag-name-filter cat -- --all

(2) 删除名称中带空格的文件的语法应该是什么?备注

  • 操作系统
  • github

最佳答案

假设你从一段历史开始

$ git lola --name-status* e709131 (HEAD, master) bar| A     bar* 61493ac ABC/file - 3.ext| A     ABC/file - 3.ext* 34cce9e ABC/file - 2.ext| A     ABC/file - 2.ext* 115e6d5 ABC/file - 1.ext| A     ABC/file - 1.ext* 5ea5b42 foo  A     foo

备注:git lola是一个非标准但非常有用的别名。

git rm支持删除子树的选项。

-r
Allow recursive removal when a leading directory name is given.

运行后

$ git filter-branch --index-filter 'git rm --cached -r --ignore-unmatch ABC' \  --prune-empty --tag-name-filter cat -- --all

你会看到类似的输出

Rewrite 115e6d5cd06565ca08f1e5c98c4b91246cf59fa1 (2/5)rm 'ABC/file - 1.ext'Rewrite 34cce9e90f832460137e620ebacc8a73a99e64ce (3/5)rm 'ABC/file - 1.ext'rm 'ABC/file - 2.ext'Rewrite 61493ac3211808f34f616dbc33d51d193b3f45a3 (4/5)rm 'ABC/file - 1.ext'rm 'ABC/file - 2.ext'rm 'ABC/file - 3.ext'Rewrite e709131f1fe6103adf37616c9fa500994aeb30d0 (5/5)rm 'ABC/file - 1.ext'rm 'ABC/file - 2.ext'rm 'ABC/file - 3.ext'Ref 'refs/heads/master' was rewritten

如果你对结果满意,删除旧的master with

$ git update-ref -d refs/original/refs/heads/master

现在你有一段历史

$ git lola --name-status* 19680d4 (HEAD, master) bar| A     bar* 5ea5b42 foo  A     foo

要回答您的第二个问题,假设您只想删除 ABC/file - 2.ext。请记住,您将需要两层引号:一层用于整个命令,另一层用于转义该命令的参数中的空格,即要删除的文件的名称。

一种方法是

$ git filter-branch --index-filter \  'git rm --cached --ignore-unmatch "ABC/file - 2.ext"' --prune-empty \  --tag-name-filter cat -- --all

注意单引号内的双引号。

如果你运行这个命令,你的历史就会变成

$ git lola* a8d1b0d (HEAD, master) bar* cff0c4e ABC/file - 3.ext* 115e6d5 ABC/file - 1.ext* 5ea5b42 foo

关于git - 从所有以前的提交中删除一个目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13988511/

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