如何在我的工作副本中排除非指数的变更?
当前回答
如果几乎不可能删除文件的修改,你是否考虑忽略它们? 如果这个声明是正确的,并且你不会在开发过程中触摸这些文件,这个命令可能有用:
git update-index --assume-unchanged 文件_to_ignore
其他回答
如果您处于子模块的情况下,没有其他解决方案工作,请尝试:
查看问题是什么(可能是一个“脏”案例)使用: git diff 删除 stash git 子模块更新
在我看来,
git clean -df
应该做技巧. 如 Git 文档上 git clean
git-clean - 从工作树中删除未追踪的文件
描述
清理工作树通过重复删除不受版本控制的文件,从当前目录开始. 通常,只有未知的文件到 Git 被删除,但如果 -x 选项被指定,忽略的文件也被删除. 例如,这可以有用去除所有构建产品. 如果任何可选的... 论点被提供,只有这些路径被影响。
选项
没有一个解决方案工作,如果你只是改变了文件的许可(这是DOS/Windoze)
Mon 23/11/2015-15:16:34.80 C:\...\work\checkout\slf4j+> git status On branch SLF4J_1.5.3 Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: .gitignore modified: LICENSE.txt modified: TODO.txt modified: codeStyle.xml modified: pom.xml modified: version.pl no changes added to commit (use "git add" and/or "git commit -a") Mon 23/11/2015-15:16:37.87 C:\...\work\checkout\slf4j+> git diff diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/LICENSE.txt b/LICENSE.txt old mode 100644 new mode 100755 diff --git a/TODO.txt b/TODO.txt old mode 100644 new mode 100755 diff --git a/codeStyle.xml b/codeStyle.xml old mode 100644 new mode 100755 diff --git a/pom.xml b/pom.xml old mode 100644 new mode 100755 diff --git a/version.pl b/version.pl old mode 100644 new mode 100755 Mon 23/11/2015-15:16:45.22 C:\...\work\checkout\slf4j+> git reset --hard HEAD HEAD is now at 8fa8488 12133-CHIXMISSINGMESSAGES MALCOLMBOEKHOFF 20141223124940 Added .gitignore Mon 23/11/2015-15:16:47.42 C:\...\work\checkout\slf4j+> git clean -f Mon 23/11/2015-15:16:53.49 C:\...\work\checkout\slf4j+> git stash save -u Saved working directory and index state WIP on SLF4J_1.5.3: 8fa8488 12133-CHIXMISSINGMESSAGES MALCOLMBOEKHOFF 20141223124940 Added .gitignore HEAD is now at 8fa8488 12133-CHIXMISSINGMESSAGES MALCOLMBOEKHOFF 20141223124940 Added .gitignore Mon 23/11/2015-15:17:00.40 C:\...\work\checkout\slf4j+> git stash drop Dropped refs/stash@{0} (cb4966e9b1e9c9d8daa79ab94edc0c1442a294dd) Mon 23/11/2015-15:17:06.75 C:\...\work\checkout\slf4j+> git stash drop Dropped refs/stash@{0} (e6c49c470f433ce344e305c5b778e810625d0529) Mon 23/11/2015-15:17:08.90 C:\...\work\checkout\slf4j+> git stash drop No stash found. Mon 23/11/2015-15:17:15.21 C:\...\work\checkout\slf4j+> git checkout -- . Mon 23/11/2015-15:22:00.68 C:\...\work\checkout\slf4j+> git checkout -f -- . Mon 23/11/2015-15:22:04.53 C:\...\work\checkout\slf4j+> git status On branch SLF4J_1.5.3 Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: .gitignore modified: LICENSE.txt modified: TODO.txt modified: codeStyle.xml modified: pom.xml modified: version.pl no changes added to commit (use "git add" and/or "git commit -a") Mon 23/11/2015-15:22:13.06 C:\...\work\checkout\slf4j+> git diff diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/LICENSE.txt b/LICENSE.txt old mode 100644 new mode 100755 diff --git a/TODO.txt b/TODO.txt old mode 100644 new mode 100755 diff --git a/codeStyle.xml b/codeStyle.xml old mode 100644 new mode 100755 diff --git a/pom.xml b/pom.xml old mode 100644 new mode 100755 diff --git a/version.pl b/version.pl old mode 100644 new mode 100755
修复这一点的唯一方法是手动重新设置已更改的文件中的权限:
Mon 23/11/2015-15:25:43.79 C:\...\work\checkout\slf4j+> git status -s | egrep "^ M" | cut -c4- | for /f "usebackq tokens=* delims=" %A in (`more`) do chmod 644 %~A Mon 23/11/2015-15:25:55.37 C:\...\work\checkout\slf4j+> git status On branch SLF4J_1.5.3 nothing to commit, working directory clean Mon 23/11/2015-15:25:59.28 C:\...\work\checkout\slf4j+> Mon 23/11/2015-15:26:31.12 C:\...\work\checkout\slf4j+> git diff
要删除未完成的更改,我试图“吉特恢复”我被吉特告诉,但它只是没有工作。
git revert --hard
它的 Git Help 完美地解释了这一点:
--hard 恢复指数和工作树. 在工作树中跟踪文件的任何变化,因为它们被删除. 在写任何跟踪文件的方式,任何未跟踪文件或目录都被删除。
PS:我使用 git 版本 2.35.3.windows.1. 我认为这里的一些答案使问题过于复杂。
要排除工作目录中的变化,使用 git checkout -- <file> -- 意味着当前分支参考的变化:-
https://www.baeldung.com/git-discard-unstaged-变更
推荐文章
- Git在不改变提交时间戳的情况下进行改基
- VS 2017 Git本地提交数据库。每次提交时锁定错误
- 如何在过去的一些任意提交之间注入一个提交?
- 从GitHub克隆项目后拉git子模块
- GitHub上的分叉和克隆有什么区别?
- 递归地按模式添加文件
- 我如何使用notepad++(或其他)与msysgit?
- 如何将现有的解决方案从Visual Studio 2013添加到GitHub
- Git存储库中的悬垂提交和blob是什么?它们来自哪里?
- 我如何简单地从我最新的git提交创建一个补丁?
- Git显示“警告:永久添加到已知主机列表”
- 我如何检索一个回购的远程git地址?
- 如何列出提交,因为某些提交?
- 如何在不位于存储库的情况下执行Git命令?
- 为什么git在Windows下记不住我的密码