【问题标题】:Resync git repo with new .gitignore file使用新的 .gitignore 文件重新同步 git repo
【发布时间】:2011-10-27 21:40:15
【问题描述】:

是否可以在更新 gitignore 文件后“刷新”一个 git 仓库?

我刚刚在我的 gitignore 中添加了更多忽略(?),并希望删除与新文件匹配的 repo 中已有的内容。

【问题讨论】:

标签: git


【解决方案1】:

.gitignore file not ignoring”中提到的解决方案有点极端,但应该可以:

# rm all files
git rm -r --cached .
# add all files as per new .gitignore
git add .
# now, commit for new .gitignore to apply
git commit -m ".gitignore is now working"

(确保首先提交您想要保留的更改,以避免发生任何事件,如jball037comments below
--cached 选项将使您的文件在您的磁盘上保持不变。)

您在博文“Making Git ignore already-tracked files”中还有其他更细粒度的解决方案:

git rm --cached `git ls-files -i --exclude-standard`

Bassim 建议in his edit

路径中有空格的文件

如果您收到fatal: path spec '...' did not match any files 之类的错误消息,则可能是文件路径中有空格。

您可以使用选项--ignore-unmatch 删除所有其他文件:

git rm --cached --ignore-unmatch `git ls-files -i --exclude-standard`

但不匹配的文件将保留在您的存储库中,并且必须通过用双引号将其路径括起来来明确删除:

git rm --cached "<path.to.remaining.file>"

【讨论】:

  • 我发现 git add 步骤是不必要的,当我在 git rm --cached 之后运行 git status 时,删除的文件已经在暂存区,你可以继续提交它们。
  • 我刚刚运行了这个,丢失了所有未提交的更改,差点宣布辞职。该线程上接受的答案挽救了我的生命:stackoverflow.com/questions/2125710/how-to-revert-a-git-rm-r
  • @VonC 抱歉,这并不是要咆哮或棍棒 :) 但是是的,我使用了 --cached 并且当我检查我的文件时,我所有未提交的更改都丢失了。惊慌了片刻,但“git reset HEAD”恢复了我的文件(但这次没有我在 .gitignore 中指定的文件,所以你的解决方案仍然有效!)
  • @jball037 好。我已经添加了警告并相应地编辑了答案。
  • 如果我在执行此操作之前进一步阅读了一行“(请确保首先提交您想要保留的更改,以避免任何像 jball037 一样的事件”#fml
【解决方案2】:

我可能会误解,但是您是要删除新忽略的文件还是要忽略对这些文件的新修改?在这种情况下,事情正在发挥作用。

如果你想删除之前提交的被忽略的文件,那么使用

git rm –cached `git ls-files -i –exclude-standard`
git commit -m 'clean up'

【讨论】:

  • 这里的单引号是怎么回事?
  • 这是一个很好的答案
  • 这是一个非常简单的原因,为什么在我更新我的 .gitignore 后删除文件但是它需要一些小的更新:` git rm –cached git ls-files -i –exclude-standard git commit -m 'clean up `
【解决方案3】:

我知道这是一个老问题,但如果文件名包含空格,gracchus 的解决方案将不起作用。 VonC 对带空格的文件名的解决方案是不使用--ignore-unmatch 删除它们,然后手动删除它们,但是如果有很多,这将无法正常工作。

这是一个利用 bash 数组捕获所有文件的解决方案。

# Build bash array of the file names
while read -r file; do 
    rmlist+=( "$file" )
done < <(git ls-files -i --exclude-standard)

git rm –-cached "${rmlist[@]}"

git commit -m 'ignore update'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    相关资源
    最近更新 更多