我把以前由 Git 跟踪的文件放在.gitignore 列表中. 但是,文件在编辑后仍然显示在 git 状态。


当前回答

移动或复制文件到一个安全的位置,所以你不会失去它。

文件仍然会出现,如果你转到以前的任务之一,或另一个分支,它没有被删除. 但是,在所有未来的任务,你不会再看到文件. 如果文件在 Git 忽略,那么你可以将其返回文件夹, Git 不会看到它。

其他回答

要总结一下:

您的应用程序正在寻找一个被忽略的文件 config-overide.ini 并使用它在承诺的文件 config.ini (或替代,寻找 ~/.config/myapp.ini,或 $MYCONFIGFILE) 承诺文件 config-sample.ini 并忽略文件 config.ini,有脚本或类似的复制文件如有必要。

把它移动出来,承诺,然后把它移动回来。

这对我来说在过去已经工作了,但可能有更“迷人的”方式来实现这一点。

在我的情况下,我需要在.gitignore 文件中插入 ".envrc" 。

然后我用了:

git update-index --skip-worktree .envrc
git rm --cached .envrc

文件已被删除。

然后我再次承诺,说文件已被删除。

但当我使用 git log -p 命令时,文件的内容(这是 Amazon S3 的秘密认证)显示已删除的内容,我不想在 Git 存储库的历史上显示此内容。

然后我用了这个命令:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch .envrc' HEAD

我再也不会看到内容了。

git update-index 为我做工作:

git update-index --assume-unchanged <file>

注意: 这个解决方案实际上是独立的.gitignore 因为 gitignore 仅适用于未追踪的文件。


更新,更好的选择

因为这个答案被发布,一个新的选项已经创建,应该是优先的. 你应该使用 --skip-worktree 这是为修改的跟踪文件,用户不想再承诺,并保持 --assume-unchanged 性能,以防止 git 检查大跟踪文件的状态. 查看 https://stackoverflow.com/a/13631525/717372 更多详细信息...

git update-index --skip-worktree <file>

取消

git update-index --no-skip-worktree <file>

对于我来说,文件在历史上仍然可用,我首先需要清除添加删除文件的命令: https://gist.github.com/patik/b8a9dc5cd356f9f6f980

下面的例子结合了最后3个命令

git reset --soft HEAD~3
git commit -m "New message for the combined commit"

推破的承诺 如果承诺已推到远程:

git push origin +name-of-branch