【问题标题】:Git fast undo all changed with one commandGit快速撤消所有更改的命令
【发布时间】:2018-06-21 21:12:29
【问题描述】:

我们有一个 回购...并推动加密。所以git reset --(whatever) 需要很长时间。让我们想象一个情况:

  • 你在一个特性分支上
  • 您更改了一些配置
  • 你想checkout master a-clean && pull
  • 无法立即签出 master,因为您已经进行了一些更改

我知道有几个选项可以恢复这些更改:

  1. git reset --hard --> 慢
  2. 根目录中的git checkout . --> 似乎与reset --hard 相同,但速度也相同
  3. git stash - 需要更长的时间
  4. git status 然后git checkout -- (filename)。现在,这很快,但您必须对每个文件重复一遍!

我自己和 bash 不太了解对方,所以像git status | grep modified: | awk "git checkout -- {%2}" 这样花哨的事情超出了我目前的知识范围。

但是,也许 mgit 中有一个命令执行 git checkout -- 对所有“修改:”文件?

【问题讨论】:

  • 一次提交的硬重置真的需要这么长时间吗?无论如何,还有另一种可能性,即您希望将工作保留在当前目录中(也可能在 stage 中)。在这种情况下,git stash 就派上用场了。
  • 谢谢@TimBiegeleisen 我知道存储,它需要更长的时间。我会用它来更新问题。
  • 可能类似于git status -s | grep -Po '^ ?M ?\K.*' | xargs git checkout --
  • 我认为多次运行git checkout 不会比git reset --hard 快。在这两种情况下,你最终都会做同样的事情。
  • @larsks 我也不这么认为,但是 xargs 通过放置一个 shell 命令可以包含的尽可能多的参数来限制调用的数量,并且来自问题git checkout . whas slow

标签: bash git awk grep git-bash


【解决方案1】:
git status -s | grep -Po '^ ?M ?\K.*' | xargs git checkout -- 
  • -s 有助于解析的短格式
  • grep -Po : -P perl 正则表达式 \K 保持在 \K 的匹配左侧,-o 打印匹配项
  • xargs 尽可能多的 shell 命令可以接受的重复参数

【讨论】:

  • 对于那些将使用此响应的人,您可以使用您在cd ~ 之后获得的位置中的.bashrc 文件为其设置别名。别名在这里解释:tldp.org/LDP/abs/html/aliases.html 不要忘记在它之后重新启动 git bash。 alias qreset="git status -s | grep -Po '^ ?M ?\K.*' | xargs git checkout -- "
猜你喜欢
  • 2016-12-07
  • 1970-01-01
  • 2018-05-30
  • 2011-03-13
  • 2016-02-08
  • 2019-04-18
  • 2013-04-16
  • 1970-01-01
相关资源
最近更新 更多