我一直遇到这样的情况:我们团队中的某人在不首先向其项目中添加.gitignore的情况下推动了一次初始提交。这导致一堆文件最终存储在我们不想跟踪的存储库中。
git ls-files -i --exclude-from=.gitignore
给我列出了.gitignore忽略的文件的列表
和
git rm --cached <file>
让我一次从存储库中删除一个文件,但将它们保留在我的工作目录中(我想要的)
有没有一种方法可以将文件列表从ls-files传送到rm --cached (或完全允许我从存储库中删除跟踪的,忽略的文件的其他方法)?
我们的一个团队成员编写了一个使用正则表达式的shell脚本,但我正在寻找仅命令行解决方案(如果存在)。
我有一个存储在本地和 GitHub 上的存储库,
这个存储库用于存储我网站的内容,
在注册 CMS 并在 GitHub 目录中创建一个隐藏文件后,我改变了主意并想删除隐藏文件。
我表演过
git pull origin master
Run Code Online (Sandbox Code Playgroud)
为了将我的本地文件与 GitHub 上的文件同步,然后我在本地删除了隐藏文件并运行以下命令,希望它将最新文件与我的本地目录同步。
git add *
git commit -m "Removed CMS hidden files"
git push -u origin master
Run Code Online (Sandbox Code Playgroud)
但是,这样做时,我得到以下信息
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
deleted: .forestry/front_matter/templates/catalogue-entry.yml
deleted: .forestry/settings.yml
Untracked files:
.DS_Store
no changes added to commit
Run Code Online (Sandbox Code Playgroud)
我想要的结果是我在本地与我的 GitHub 目录完全同步,删除了 CMS 添加的隐藏文件。
我知道如何创建简单的别名,但是有一个非常有用的命令可以从磁盘中取消暂存已删除的文件,但我无法使其工作。
git rm $(git ls-files --deleted)
(从这里Removing multiple files from a Git repo that has been removed from disk)
我试过:
git config --global alias.cleandeleted 'rm $(git ls-files --deleted)'
Run Code Online (Sandbox Code Playgroud)
但是当我写:
git cleandeleted
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
error: unknown option `deleted)'
usage: git rm [options] [--] <file>...
-n, --dry-run dry run
-q, --quiet do not list removed files
--cached only remove from the index
-f, --force override the up-to-date check
-r allow recursive removal
--ignore-unmatch exit with a zero status even if nothing …Run Code Online (Sandbox Code Playgroud)