代码之家  ›  专栏  ›  技术社区  ›  ABach

用xargs撤消别名

  •  0
  • ABach  · 技术社区  · 15 年前

    我有个Git别名( git undo )这将撤消工作目录中的所有内容,包括新文件、更改的文件和删除的文件:

    !git reset --hard && git ls-files -d | xargs -0 git rm --ignore-unmatch && git clean -fq
    

    在OSX上,这个很好用。然而,在Linux上,我遇到了以下问题:如果没有从存储库中删除任何文件,那么 git ls-files -d | xargs -0 git rm --ignore-unmatch 命令将失败( xargs 什么都不会通过。

    有没有办法 参数代换 如果没有收到 git ls-files ?

    4 回复  |  直到 13 年前
        1
  •  3
  •   Chris Johnsen    15 年前

    用一个 git reset --hard 在它之前, git ls-files -d 不应该生成任何输出(如果生成了,您将希望使用 git ls-files -d -z 使其产生nul终止的输出 xargs -0 )

    一旦你完成了 Git重置--硬 ,工作树的跟踪部分和整个索引将与头部提交匹配。 GIT-LS文件-D 只显示索引中的文件,而不显示工作树中的文件。因为工作树将拥有索引拥有的所有内容,所以在硬重置之后不应该有任何已删除的文件。

    这个 git clean 位用于删除未跟踪的文件(其中 Git重置--硬 不会触摸),但您可能想将其更改为 git clean -dfq 删除完全未跟踪的目录)。

        2
  •  2
  •   Michael Mrozek    15 年前

    man page :

    --空时不运行,-r
    如果标准输入不包含任何非空白,则不要运行
    命令。通常,即使存在
    没有输入。此选项是GNU扩展。

    确保您的xargs版本具有该选项( man xargs )

        3
  •  0
  •   orip    15 年前

    也许您想使用xargs的“-r”选项:

    xargs -r -0 git rm --ignore-unmatch
    

    这样,如果 ls-files 什么都不显示,xargs不会打电话 git rm 完全。

        4
  •  0
  •   Thomas Koch    13 年前

    有“git clean”(man git clean):从工作树中删除未跟踪的文件