Git如何保留本地代码变更且不将其提交到远程仓库?
Git本地留存变更不提交的解决方案
以下是不同使用场景下的操作方案,所有操作均仅作用于本地设备,不会影响远程Git仓库内容:
场景1:临时存放改动,后续可恢复/调整
适合暂时不需要提交、之后可能要重新启用或者丢弃的改动,使用git stash栈功能实现:
- 存入当前未提交的改动到本地栈:
git stash push -m "自定义改动备注",执行后工作区会恢复到最近一次提交的状态 - 查看所有已存储的改动列表:
git stash list,输出内容中stash@{x}为对应改动的编号 - 恢复最近一次存储的改动并移除栈中记录:
git stash pop - 恢复指定编号的改动、保留栈中记录:
git stash apply stash@{x}(将x替换为对应改动的序号) - 删除指定编号的存储改动:
git stash drop stash@{x} - 清空所有存储的改动:
git stash clear
场景2:永久本地改动,无需提交到仓库
适合本地专属配置、测试参数这类永远不需要同步到远程的改动,分为两种情况处理:
2.1 改动是未被Git跟踪的新文件
直接编辑项目根目录的.gitignore文件,添加对应文件/目录的路径即可,Git会自动忽略匹配的内容,不会纳入待提交列表:
# 示例:忽略单个本地配置文件 config.local.js # 示例:忽略所有后缀为.local的文件 *.local # 示例:忽略整个本地测试目录 /test/local/
2.2 改动是已经被Git跟踪的存量文件
这类文件直接添加到.gitignore不会生效,需要用Git的本地忽略跟踪指令处理:
- 仅临时忽略文件后续改动,远程更新该文件时会正常拉取覆盖:
git update-index --assume-unchanged 文件路径 - 适合长期修改本地配置、远程更新文件时优先保留本地改动:
git update-index --skip-worktree 文件路径 - 恢复对该文件的改动跟踪:将对应指令中的参数替换为
--no-assume-unchanged或--no-skip-worktree即可 - 查看所有被标记为本地忽略跟踪的文件:
git ls-files -v | grep '^h'
注意:以上两种忽略跟踪的配置仅作用于本地仓库,不会同步到远程,也不会影响其他协作者的使用。
内容的提问来源于stack exchange,提问作者user10469417
相关产品推荐
相关产品推荐

