我把以前由 Git 跟踪的文件放在.gitignore 列表中. 但是,文件在编辑后仍然显示在 git 状态。
当前回答
例如,在使用 CVS 时,这个问题不存在, CVS 将信息存储为基于文件的变更列表。
这两篇文章对我很有帮助:
git assume-unchanged vs skip-worktree 以及如何用 Git 忽略跟踪文件的变化
git update-index --skip-worktree <file>
从此,此文件中的所有本地变更将被忽视,不会去远程。如果文件在远程中被更改,冲突将发生,当 git pull. Stash 不会工作。
git update-index --no-skip-worktree <file>
git stash
git pull
文件内容将被远程内容取代. 将您的更改从安全地点调整到文件,然后再次执行:
git update-index --skip-worktree <file>
其他回答
例如,在使用 CVS 时,这个问题不存在, CVS 将信息存储为基于文件的变更列表。
这两篇文章对我很有帮助:
git assume-unchanged vs skip-worktree 以及如何用 Git 忽略跟踪文件的变化
git update-index --skip-worktree <file>
从此,此文件中的所有本地变更将被忽视,不会去远程。如果文件在远程中被更改,冲突将发生,当 git pull. Stash 不会工作。
git update-index --no-skip-worktree <file>
git stash
git pull
文件内容将被远程内容取代. 将您的更改从安全地点调整到文件,然后再次执行:
git update-index --skip-worktree <file>
更新您的.gitignore 文件 - 例如,添加一个文件夹,你不想跟踪到.gitignore. git rm -r --cached. - 删除所有跟踪的文件,包括所需和不需要的. 您的代码将是安全的,只要你保存了本地. git 添加. - 所有文件将返回,除了那些在.gitignore.
请点击 @AkiraYamamoto 指向我们正确的方向。
下面的命令系列将从 Git 索引中删除所有项目(不是工作目录或本地存储库),然后更新 Git 索引,同时遵守 Git 忽略。
首先:
git rm -r --cached .
git add .
然后:
git commit -am "Remove ignored files"
或者作为一个单线:
git rm -r --cached . && git add . && git commit -am "Remove ignored files"
把它移动出来,承诺,然后把它移动回来。
这对我来说在过去已经工作了,但可能有更“迷人的”方式来实现这一点。
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>
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的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之间的区别