Git忽略并更改历史记录(在Windows上)

时间:2015-06-25 17:56:23

标签: linux windows git gitignore

我已经在这里阅读了几篇有关此内容的帖子(例如Git ignore & changing the pastHow to remove files that are listed in the .gitignore but still on the repository?Applying .gitignore to committed files),但它们有几个问题:

  • 仅适用于Linux的命令。
  • 不完整的命令(就像我链接到的第一篇文章)。
  • 仅限一个文件。

我几乎没有Git的经验,所以我希望能在这里提供一些帮助。

我基本上要做的是拯救我的一个项目历史。它目前是Hg和我用Hg-Git将它转换为Git(一切都非常简单),它包含了历史(太棒了!)。但是,我还添加了一个.gitignore文件并添加了几个新文件&我希望完全从历史记录中删除的文件夹(例如 bin obj 文件夹,以及来自ReSharper的文件)。所以我正在寻找一种方法将.gitignore文件应用到我的所有历史记录中。这些命令应该适用于Windows,因为我无意为此安装Linux。

2 个答案:

答案 0 :(得分:0)

无需在历史记录中添加.gitignore(没有附加值可以执行此操作),只需将其添加到将来的提交中即可。

要删除历史记录中的文件和目录,请使用快速,简单且在Windows上运行良好的bfg-repo-cleaner(在scala中完成)。

它会为你完成这项工作!

答案 1 :(得分:0)

这对我有用:

  • 安装hg-git。
  • cd HgFolder
  • hg bookmark -r default master
  • mkdir ../ GitFolder
  • cd ../ GitFolder
  • git init --bare
  • cd ../ HgFolder
  • hg push ../ GitFolder
  • 将所有文件从GitFolder移至' .git'文件夹(在此GitFolder中)并将此文件夹设置为隐藏(不是子文件夹和文件)。
  • cd ../ GitFolder
  • git init
  • git remote add origin https://url.git
  • 将所有当前内容(包括.gitignore)复制到GitFolder。
  • git add。
  • git commit -m"添加了现有内容和.gitignore"。
  • git filter-branch --index-filter" git rm --cache d -r --ignore-unmatch' LINES' ' FROM' ' GITIGNORE'" --prune-empty --tag-name-filter cat - --all
  • git rm -r --cached。
  • git add。
  • git gc --prune = now --aggressive
  • git push origin master --force

可能有一种更简单的方法可以做到这一点,它可能并不完美,但这有我想要的结果。