如何丢弃工作副本中未包含在索引中的更改?


#1楼

这会签出当前目录的当前索引,从而丢弃文件从当前目录向下的所有更改。

git checkout .

或此操作从索引中检出所有文件,覆盖工作树文件。

git checkout-index -a -f

#2楼

删除比git clean -df更具体的新文件的另一种方法(它将允许您删除某些文件(不一定是全部文件)),是先将新文件添加到索引,然后隐藏,然后删除藏。

当由于某种原因您无法通过某种常规机制(如rm)轻松删除所有未跟踪的文件时,此技术很有用。


#3楼

我真的发现这篇文章有助于解释何时使用什么命令: http : //www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

有几种不同的情况:

  1. 如果尚未暂存文件,则可以使用git checkout 。 签出“更新工作树中的文件以匹配索引中的版本”。 如果文件尚未暂存(又添加到索引),则此命令实质上会将文件还原为您的最后一次提交。

    git checkout -- foo.txt

  2. 如果已暂存文件,则使用git reset。 重置会更改索引以匹配提交。

    git reset -- foo.txt

我怀疑使用git stash是一种流行的选择,因为它的危险性要小一些。 如果您在使用git reset时不小心吹了太多东西,可以随时返回到它。 默认情况下,重置是递归的。

请参阅上面的文章以获取更多建议。


#4楼

似乎完整的解决方案是:

git clean -df
git checkout -- .

git clean删除所有未跟踪的文件( 警告 :虽然它不会删除.gitignore中直接提到的被忽略文件, 但可能会删除驻留在文件夹中的被忽略文件 ),并且git checkout清除所有未暂存的更改。


#5楼

当您要将存储转移给其他人时:

# add files
git add .
# diff all the changes to a file
git diff --staged > ~/mijn-fix.diff
# remove local changes
git reset && git checkout .
# (later you can re-apply the diff:)
git apply ~/mijn-fix.diff

[编辑]如所评论,可以命名藏匿处。 好吧,如果您想共享存储空间,请使用它;)


#6楼

即使在以下目录中也可以使用: 超出正常的git权限。

sudo chmod -R 664 ./* && git checkout -- . && git clean -dfx

最近发生在我身上


#7楼

如果您使用的是存储库的派生库,并且在其中定期与另一个存储库定期进行同步(例如,拉取请求),那么以下内容实际上只是一个解决方案。 简短的答案:删除fork和refork,但请阅读github上的警告

我有一个类似的问题,可能不相同,我伤心地说我的解决方案并不理想,但它最终是有效的。

我经常会收到这样的git状态消息(涉及至少2/4个文件):

$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats

敏锐的眼睛会注意到,这些文件中的dopplegangers都是单个字母,以防万一。 不知何故,我不知道是什么使我沿着这条路开始的(由于我自己不是从上游仓库使用这些文件),所以我已经切换了这些文件。 尝试此页面(和其他页面)上列出的许多解决方案似乎无济于事。

我可以通过删除叉状存储库和所有本地存储库并重新分叉来解决此问题。 仅此一项是不够的。 上游不得不将有问题的文件重命名为新文件名。 只要您没有任何未提交的工作,没有Wiki和没有与上游存储库不同的问题,就可以了。 至少可以说,上游可能对您不太满意。 至于我的问题,毫无疑问,这是一个用户错误,因为我对git并不熟练,但是事实也很不容易解决git问题。


#8楼

git checkout -f


man git-checkout

-f, --force

切换分支时,即使索引或工作树与HEAD不同,也要继续进行。 这用于丢弃本地更改。

从索引中检查路径时,不要在未合并的条目上失败; 相反,未合并的条目将被忽略。


#9楼

cd path_to_project_folder  # take you to your project folder/working directory
git checkout .             # removes all unstaged changes in working directory

#10楼

我最喜欢的是

git checkout -p

这样就可以有选择地还原块。

也可以看看:

git add -p

#11楼

如果实际上已提交所有暂存的文件,则可以简单地从您的GUI中重置分支,例如,大约单击三下鼠标: BranchResetYes

因此,在实践中,我通常要做的就是还原所有不必要的本地更改,然后还原分支。

如果好东西是在单个提交中提交的,那么如果您最终希望以不同的方式提交它,则可以使用“修改最后一个提交”将其恢复到已暂存或未暂存的状态。

这可能不是您要寻找的技术解决方案,但我发现这是一个非常实用的解决方案。 它允许您有选择地放弃未进行的更改,重置不喜欢的更改并保留所做的更改。

因此,总而言之,我只是简单地进行commitbranch reset修改last commit


#12楼

简单地说

git stash

它将删除所有本地更改。 您还可以稍后说

git stash apply

或git stash pop


#13楼

我没有放弃更改,而是将遥控器重置为原始位置。 注意-此方法是将文件夹完全还原到仓库中的文件夹。

因此,我这样做是为了确保当我重新设置git时,他们不会坐在那儿(以后-不包括Origin / branchname上的gitignores)

注意:如果要保留尚未跟踪但不在GITIGNORE中的文件,则可能希望跳过此步骤,因为它将擦除在远程存储库中找不到的这些未跟踪的文件(感谢@XtrmJosh)。

git add --all

然后我

git fetch --all

然后我重置原点

git reset --hard origin/branchname

那将使它回到平方。 就像重新克隆分支一样,在本地保持所有gitignored文件的位置。

以下是根据每个用户的评论更新的内容:将用户重置为当前用户所在分支的变体。

git reset --hard @{u}

#14楼

您可以使用git stash-如果出现问题,仍然可以从stash恢复。 与此处的其他答案类似,但是此答案也将删除所有未暂存的文件以及所有未暂存的删除:

git add .
git stash

如果您检查一切正常,请扔掉藏匿处:

git stash drop

来自Bilal Maqsood的git clean答案也对我有用,但是有了存储,我有了更多控制权-如果我偶然地做某事,我仍然可以找回我的更改

更新

我认为还有1种更改(以前不知道为什么对我有用):

git add . -A git add . -A代替git add .

如果没有-A ,则不会暂存已删除的文件


#15楼

如果您使用子模块,并且没有其他解决方案,请尝试:

  • 要检查问题所在(可能是“肮脏”的情况),请使用:

    git diff

  • 去除藏匿处

    git submodule update


#16楼

无论您的存储库处于什么状态,都可以始终重置为以前的任何提交:

git reset --hard <commit hash>

这将丢弃该提交之后所做的所有更改。


#17楼

由于没有答案表明我使用的确切选项组合,因此它是:

git clean -dfx
git checkout .

这是所使用的git clean选项的在线帮助文​​本:

-d

除未跟踪的文件外,还删除未跟踪的目录。 如果未跟踪的目录由其他Git存储库管理,则默认情况下不会将其删除。 如果您确实要删除这样的目录,请使用-f选项两次。

-f

如果Git配置变量clean.requireForce未设置为false ,除非给定-f-n-i ,否则Git clean将拒绝删除文件或目录。 除非给出第二个-f ,否则Git将拒绝删除.git子目录或文件中的.git

-x

不要使用.gitignore (每个目录)和$GIT_DIR/info/exclude的忽略规则,但仍要使用-e选项提供的忽略规则。 这允许删除所有未跟踪的文件,包括构建产品。 可以使用它(可能与git reset结合使用)创建一个原始的工作目录,以测试干净的构建。

另外, git checkout . 需要在仓库的根部完成。


#18楼

当您输入git status时,将显示(使用“ git checkout-...”放弃工作目录中的更改)

例如git checkout -- .


#19楼

在我看来,

git clean -df

应该可以。 根据git clean上的Git文档

git-clean-从工作树中删除未跟踪的文件

描述

通过从当前目录开始递归删除不受版本控制的文件来清理工作树。

通常,仅删除Git未知的文件,但是如果指定-x选项,也会删除忽略的文件。 例如,这对于删除所有构建产品很有用。

如果给出任何可选的...参数,则仅影响那些路径。

选件

-d除删除未跟踪的文件外,还删除未跟踪的目录。 如果未跟踪的目录由其他Git存储库管理,则默认情况下不会将其删除。 如果您确实要删除这样的目录,请使用-f选项两次。

-f --force如果Git配置变量clean.requireForce没有设置为false,除非给定-f,-n或-i,否则git clean将拒绝运行。


#20楼

只需使用:

git stash -u

做完了 简单。

如果您真的很在乎您的隐藏堆栈,则可以执行git stash drop 。 但是到那时,您最好使用(来自Mariusz Nowak):

git checkout -- .
git clean -df

尽管如此,我还是最喜欢git stash -u ,因为它仅用一个命令就“丢弃”所有已跟​​踪和未跟踪的更改。 但是git checkout -- . 只有丢弃修订,并git clean -df仅丢弃未经跟踪的变化......然后键入这两个命令是太多的工作:)


#21楼

我遇到了一个奇怪的情况,即文件始终处于未暂存状态,这可以帮助我解决。

git rm .git属性
git添加-A
git reset --hard


#22楼

最简单的方法是使用以下命令:

此命令用于放弃工作目录中的更改-

git checkout -- .

https://git-scm.com/docs/git-checkout

在git命令中,通过使用以下方式实现未跟踪文件的存储:

git stash -u

http://git-scm.com/docs/git-stash


#23楼

您可以创建自己的别名,该别名以描述性方式描述如何进行。

我使用下一个别名放弃更改。


放弃工作树中文件列表的更改

discard = checkout --

然后,您可以将其用作下一步以放弃所有更改:

discard .

或只是一个文件:

discard filename

否则,如果您要舍弃所有更改以及未跟踪的文件,则可以混合使用checkout和clean:

清除并丢弃工作树中的更改和未跟踪的文件

cleanout = !git clean -df && git checkout -- .

所以使用很简单,如下所示:

cleanout

现在可以在下一个Github存储库中使用了,其中包含很多别名:

  • https://github.com/GitAlias/gitalias

#24楼

如果几乎不可能排除文件的修改,您是否考虑过忽略它们? 如果此语句正确,并且在开发过程中您不会触摸这些文件,则此命令可能会很有用:

git update-index --assume-unchanged file_to_ignore


#25楼

如果您只想删除对现有文件的更改 ,请使用checkout ( 在此处记录 )。

git checkout -- .
  • 没有指定分支,因此它签出当前分支。
  • 双连字符( -- )告诉Git,应将后面的内容作为其第二个参数(路径),而忽略了分支的指定。
  • 句点( . )表示所有路径。

如果要删除自上次提交以来添加的文件 ,请使用clean ( 在此处记录 ):

git clean -i
  • -i选项启动一个交互式clean ,以防止误删除。
  • 还有一些其他选项可用于更快地执行。 请参阅文档。

如果您希望将更改移至存放空间以供以后访问 ,请使用stash ( 此处记录 ):

git stash
  • 所有更改都将移至Git的存储库,以便以后访问。
  • 少数选项可用于更细微的隐藏; 请参阅文档。

#26楼

对于当前工作目录中的所有未暂存文件,请使用:

git checkout -- .

对于特定文件,请使用:

git checkout -- path/to/file/to/revert

--在这里消除争论的歧义 。


#27楼

另一种更快的方法是:

git stash save --keep-index --include-untracked

如果您不希望透彻了解,则无需包含--include-untracked

之后,您可以根据需要使用git stash drop命令删除该存储。


#28楼

如果您对保留未暂存的更改不感兴趣(特别是如果暂存的更改是新文件),那么我发现这很方便:

git diff | git apply --reverse

#29楼

尝试了以上所有解决方案,但仍无法摆脱未暂存的新文件。

使用git clean -f删除那些新文件- 但是要小心! 注意强制选项。


#30楼

git clean -df

通过从当前目录开始递归删除不受版本控制的文件来清理工作树。

-d :除未跟踪的文件外,删除未跟踪的目录

-f :强制(根据clean.requireForce设置可能不是必需的)

运行git help clean查看手册

如何丢弃Git中未进行的变更?相关推荐

  1. 如何丢弃 Git 中的本地提交

    [问题标题]:如何丢弃 Git 中的本地提交?(How to discard local commits in Git?) [发布时间]:2011-04-22 09:46:21 [问题描述]: 我一直 ...

  2. 丢弃Git中的本地提交

    由于一些糟糕的挑选,我的本地Git存储库目前在原点之前提交了五个提交,并且状态不佳. 我想摆脱所有这些提交并重新开始. 显然,删除我的工作目录并重新克隆会这样做,但是再次从GitHub下载所有内容似乎 ...

  3. Git中submodule的使用

    背景 面对比较复杂的项目,我们有可能会将代码根据功能拆解成不同的子模块.主项目对子模块有依赖关系,却又并不关心子模块的内部开发流程细节. 这种情况下,通常不会把所有源码都放在同一个 Git 仓库中. ...

  4. 如何清除Git中的本地工作目录? [重复]

    本文翻译自:How do I clear my local working directory in Git? [duplicate] This question already has an ans ...

  5. 如何解决Git中的合并冲突

    如何解决Git中的合并冲突? #1楼 对于想要半手动解决合并冲突的Emacs用户: git diff --name-status --diff-filter=U 显示所有需要解决冲突的文件. 依次打开 ...

  6. 如何撤消Git中的最新本地提交?

    我不小心将错误的文件提交给Git ,但是我还没有将提交推送到服务器. 如何撤消本地存储库中的那些提交? #1楼 我想撤消我们共享存储库中的最新五次提交. 我查找了要回滚的修订版ID. 然后我输入以下内 ...

  7. git reset 怎么还原_如何在Git中重置、恢复,返回到以前的状态

    编辑推荐: 本文来自51cto,在本文中,我们将带你了解如何去重置.恢复和完全回到以前的状态,做到这些只需要几个简单而优雅的 Git 命令. 用简洁而优雅的 Git 命令撤销仓库中的改变. 使用 Gi ...

  8. git中“我们的”和“他们的”的确切含义是什么?

    本文翻译自:What is the precise meaning of "ours" and "theirs" in git? This might soun ...

  9. 如何忽略Git中目录中的文件?

    本文翻译自:How do I ignore files in a directory in Git? What is the proper syntax for the .gitignore file ...

最新文章

  1. 【CVPR2021】旷视研究院入选学术成果盘点
  2. solr5.3.1 mysql_Solr5.3.1 dataimport 导入mysql数据
  3. Leetcode每日一题:3.无重复字符的最长子串
  4. python实现猜数字小游戏
  5. 第三百七十二天 how can I 坚持
  6. 解密小程序码:36条放射线
  7. C#获取 Flv视频文件播放时间长度等信息
  8. Julia: LightTable 插件方式 与 JUNO
  9. 构建自定义的同步工具
  10. MySQL数据库酒店客房管理系统(含MySQL源码) 结课作业 做的不是很好
  11. 若依前后端分离密码修改成功,登录提示用户名或密码不正确。
  12. mysql中的comment_请问一下在mysql中的 COMMENT 有什么作用吗??
  13. python教程app下载地址_Python爬取APP下载链接的实现方法
  14. 【转】一个老程序员的心理话
  15. VIVE™在MWC上海展示生态全景,虚拟现实行业新趋势初见端倪
  16. 【转载】基于rasa的对话系统搭建(下)
  17. 究竟什么是Vanilla JS?(娱乐向)
  18. 时间的函数Sleep,clock,GetTickCount,QueryPerformanceCounter
  19. 刷穿codeforces计划之词汇积累——Day1
  20. html 去掉边框阴影

热门文章

  1. 使用registerForActivityResult替代onActivityResult
  2. 如何在Laravel 中对大文件进行加密?
  3. 如何调试Android Native Framework
  4. android studio大坑 executing external native build for cmake
  5. android中实现view的更新有两组方法
  6. vcard java_关于vcard 文件数据格式,以备不时之需
  7. b站前端大佬_最强UP主:罗翔老师,你凭什么打败B站千万粉大佬老番茄?
  8. IOS开发笔记13-Object-C中的NSString
  9. 牛客网——求平均年龄(水题)
  10. 使用 IntraWeb (5) - 页面布局之 TFrame