我把以前由 Git 跟踪的文件放在.gitignore 列表中. 但是,文件在编辑后仍然显示在 git 状态。
当前回答
复制/复制(单线)的答案是:
git rm --cached -r .; git add .; git status; git commit -m "Ignore unwanted files"
这个命令不会改变.gitignore 文件的内容. 它只会忽略已承诺到 Git 存储库的文件,但现在我们已经添加到.gitignore。
命令 git 状态; 只需审查更改,可以下载。
最终,它将立即通过“不要错过不需要的文件”的消息进行更改。
如果您不希望承诺更改,请放下命令的最后一部分(git commit -m “不要错过不需要的文件”)
其他回答
做下列步骤严肃,你会好。
从目录/存储中删除错误添加的文件. 您可以使用“rm -r”命令(为Linux)或通过浏览目录删除它们. 或者将它们移动到您的计算机上的另一个位置. (您可能需要关闭 IDE 如果运行移动/删除.) 现在将文件 / 目录添加到.gitignore 文件并保存它. 现在通过使用这些命令从 Git 存储中删除它们(如果有)
此方法需要使用 /.git/info/exclude 文件(偏好)或预先存在的.gitignore 在所有有文件要被忽视/忘记的任务中。
执行Git的所有方法都忽略了后事实行为,有效地重写历史,从而对任何公共/共享/合作的存储库产生了显著的分裂,这些存储库可能在这个过程之后被撤回。
#Commit up-to-date .gitignore (if not already existing)
#This command must be run on each branch
git add .gitignore
git commit -m "Create .gitignore"
#Apply standard Git ignore behavior only to the current index, not the working directory (--cached)
#If this command returns nothing, ensure /.git/info/exclude AND/OR .gitignore exist
#This command must be run on each branch
git ls-files -z --ignored --exclude-standard | xargs -0 git rm --cached
#Commit to prevent working directory data loss!
#This commit will be automatically deleted by the --prune-empty flag in the following command
#This command must be run on each branch
git commit -m "ignored index"
#Apply standard git ignore behavior RETROACTIVELY to all commits from all branches (--all)
#This step WILL delete ignored files from working directory UNLESS they have been dereferenced from the index by the commit above
#This step will also delete any "empty" commits. If deliberate "empty" commits should be kept, remove --prune-empty and instead run git reset HEAD^ immediately after this command
git filter-branch --tree-filter 'git ls-files -z --ignored --exclude-standard | xargs -0 git rm -f --ignore-unmatch' --prune-empty --tag-name-filter cat -- --all
#List all still-existing files that are now ignored properly
#If this command returns nothing, it's time to restore from backup and start over
#This command must be run on each branch
git ls-files --other --ignored --exclude-standard
git push origin --force --all
git push origin --force --tags
git for-each-ref --format="delete %(refname)" refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now
其他从已修改的远程存储库中提取的开发人员应该进行备份,然后:
#fetch modified remote
git fetch --all
#"Pull" changes WITHOUT deleting newly-ignored files from working directory
#This will overwrite local tracked files with remote - ensure any local modifications are backed-up/stashed
git reset FETCH_HEAD
脚印
告诉你的合作伙伴放弃,不要合并,他们创建的任何分支从你的旧(封闭)存储库历史。 一个合并承诺可以重新引入一些或所有的封闭的历史,你刚刚走到清理问题。
我知道这个答案已经迟到了很多年,但是我决定我想在注意到可能有不同的答案后做出贡献,取决于用户想要的结果。
如何强迫Git完全忘记这一点?
这取决于下列哪个是所需的结果:
停止跟踪文件并将其从存储库中删除,或停止跟踪文件,而不会从存储库中删除(可能其他合作伙伴可以下载)
因为(一),解决方案就像上面的马特的答案一样;因为(二),请参见康斯坦丁的答案。
来源: https://stackabuse.com/git-stop-tracking-file-after-adding-to-gitignore/
使用 git rm --cached 命令不会回答原始问题:
你怎样要强迫吉特完全忘记(一个文件)?
事实上,这个解决方案会导致文件在运行 git pull 时在存储库的每个其他例子中被删除!
强迫 Git 忘记文件的正确方式是由 GitHub 在这里记录的。
我推荐阅读文档,但基本上:
git fetch --all
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch full/path/to/file' --prune-empty --tag-name-filter cat -- --all
git push origin --force --all
git push origin --force --tags
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now
只需用文件的完整路径取代完整/路径/到/文件,请确保您已将文件添加到.gitignore 文件中。
您还需要(暂时)允许您的存储库不快推进,因为您正在改变您的 Git 历史。
复制/复制(单线)的答案是:
git rm --cached -r .; git add .; git status; git commit -m "Ignore unwanted files"
这个命令不会改变.gitignore 文件的内容. 它只会忽略已承诺到 Git 存储库的文件,但现在我们已经添加到.gitignore。
命令 git 状态; 只需审查更改,可以下载。
最终,它将立即通过“不要错过不需要的文件”的消息进行更改。
如果您不希望承诺更改,请放下命令的最后一部分(git commit -m “不要错过不需要的文件”)
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别