【问题标题】:is it possible to `git status` only modified files?是否可以只对修改过的文件进行`git status`?
【发布时间】:2012-04-04 20:10:59
【问题描述】:

是否可以让git status 仅显示修改后的文件,就我而言,由于暂存文件过多?

【问题讨论】:

  • 你是怎么限制滚动的?默认情况下,git status 将调用寻呼机。
  • 抱歉,我的机器上的回滚限制设置为 512 行。我想我可以改变它;但更喜欢一行命令来查看状态中刚刚修改的文件,因为 GD/imagecache 最终会生成更多文件。
  • 对...我的意思是寻呼机不使用终端的回滚。
  • 只用 grep 寻找你觉得有趣的东西有什么问题吗?使用--short--porcelain 获取状态的单行版本。
  • 还有一点,基于使用 git ls-files -m 的建议:您关心哪些修改,已暂存、未暂存或两者兼有?

标签: git ubuntu git-status


【解决方案1】:

您不能使用git status 执行此操作,但您可以使用git ls-files -m 显示所有修改过的文件。

【讨论】:

  • 让其他人知道,这只会显示已修改但尚未暂存的文件。
  • 虽然这是公认的答案,但它的信息不准确。您可以使用git status | grep modified“'git status' 仅修改过的文件”,就像 user23186 在他们的回答中指出的那样。
  • 对我来说,git ls-files -m 没有显示任何内容,但 git status | grep modified 正在工作。
  • 正如其他人所指出的,这仅显示未暂存的文件。如果您想同时显示未暂存和暂存文件,这是我见过的最佳答案:stackoverflow.com/a/39994894/452587
  • @thdoan 有许多用于显示暂存文件的选项,尽管这个特定问题似乎想要明确排除暂存文件。 git diff --name-only --diff-filter=M HEAD 将只显示已暂存和未暂存的修改文件,但您应该查看 --diff-filter 上的文档以了解您可能想要添加的其他过滤器类型。
【解决方案2】:

看起来git status -uno 只会显示 git 正在跟踪的文件,而不显示目录中的任何其他内容。不完全符合您的要求,但可能完成了同样的事情(获取 git 跟踪的文件的可读长度列表)。

【讨论】:

  • git status -u no 不显示 (1) 已修改的跟踪文件,也不显示 (2) 暂存的跟踪文件。我已经用 git 版本 1.8.5.2 和 1.9.4 验证了这一点。
  • @TomNysetvold,你的意思可能实际上是git status -uno (stackoverflow.com/questions/7008546/…)
【解决方案3】:

对于修改过的文件:

git status | grep modified:

【讨论】:

  • 非常有用,我为此创建了一个别名:git config --global alias.modified '!git status | grep modified:'
【解决方案4】:
git status -s | awk '{if ($1 == "M") print $2}'

【讨论】:

  • awk '$1 == "M" { print $2 }'
【解决方案5】:

git diff --name-only --diff-filter=M

【讨论】:

  • 我推荐那些过滤器:git diff --cached --name-only --diff-filter=ACMR,它可以添加、复制、修改和重命名文件。
【解决方案6】:

git diff --name-only 也可以。

【讨论】:

    【解决方案7】:

    我一直在寻找相同的信息,发现以下给出了修改后的文件:

    git status -uno
    

    【讨论】:

    • git status -uno --porcelain 为解析脚本添加了不错的输出
    【解决方案8】:

    你可以使用

    $ git status -uno 
    

    只列出修改过的文件。

    【讨论】:

      【解决方案9】:

      要列出修改后的文件,请使用:

      git ls-files -m
      

      如果您只想要基本名称(没有路径),那么您可以使用 xargs 将每个结果逐行传递到基本名称命令:

      git ls-files -m | xargs -L 1 basename
      

      【讨论】:

        【解决方案10】:

        问题是我目前不想提交或 gitignore 的暂存文件太多,无法向上滚动。

        虽然这可能无法直接回答仅列出已修改文件的问题,但它可能有助于限制列出的文件数量。

        您可以将路径传递给 git status 以将输出限制到 repo 中的特定文件夹。

        例如:

        git status app
        git status spec
        git status src/components
        

        【讨论】:

          【解决方案11】:

          我使用这个命令:

          $ git status -sb -uno | grep -v "^\sD\s"
          

          输出看起来像这样:

          ## master...origin/master
           M GNUmakefile
           M include/mp4v2/project.h
          

          【讨论】:

          • 但这也会打印已删除的内容。
          • 我加了\Mgit status -uno -sb | grep M\
          • @kritzel_sw 我刚刚修改了我的命令以不显示已删除的文件。
          【解决方案12】:

          更新

          打开.gitconfig

          [user]
               name = ...
               email = ...
          [alias]
              # ? add below code
              mySt = "!f() {\
                  inputType=${1:-" "};\
                  git status -s | grep "\\ $inputType" |\
                  sed -e 's/ / /'   ;\
              }; f"
          

          解释:https://stackoverflow.com/a/62772985/9935654

          用法

          git mySt M:显示修改:

          git mySt M *.md :显示所有 *.md,已修改。

          git mySt D:已删除:

          git mySt :与git status -s 相同


          操作系统:windows

          以下命令将显示所有包含 "modified:""renamed:""new file:"

          的行>
          git status | findstr "modified: renamed: new file:"
          

          如果要指定文件类型:(例如*.py*.ini

          git status *.py *.ini | findstr "modified: renamed: new file:"
          

          如果你觉得写这么多太麻烦:

          1. 创建一个批处理文件(例如:st.bat

          2. 内容如下:

            @echo off
            :: st.bat  (this line doesn't necessarily. ( just let you know the scripts name.))
            git status %~1 | findstr "modified: renamed: new file:"
            
          3. 添加包含批处理文件的环境路径。 (st.bat)

          4. 用法

            st.bat "*.py *.ini"
            

            (注意:如果 type > 1 则必须添加分号)

          操作系统:Linux

          @Lance 说你可以试试

          git status | grep modified:

          【讨论】:

            【解决方案13】:

            我使用git cola。它是一个简单而优雅的 UI 客户端,它将向您显示修改后的文件,并为您提供您所做更改的 diff 截图。

            git cola 为您提供了一个 GUI,您可以在其中可视化您修改了哪些文件、暂存了哪些文件,甚至是那些您不跟踪的文件。你的问题是我相信只使用 git status ,但我认为 git cola 可以在那个时候和其他事情上提供帮助。从更多信息查看此网页:git-cola.github.com/screenshots.html

            【讨论】:

            • 鉴于我不熟悉这个 git cola,您能否提供这与我的答案有何关系。例如截图,还是更多细节?
            • 为什么被否决了? :) 无论如何,git cola 为您提供了一个 GUI,您可以在其中可视化您修改了哪些文件,暂存了哪些文件,甚至是那些您不跟踪的文件。你的问题是我相信只使用 git status ,但我认为 git cola 可以在那个时候和其他事情上提供帮助。从更多信息查看此网页:git-cola.github.com/screenshots.html
            • 如何更改可乐的界面语言?
            【解决方案14】:

            要列出所有修改的文件,请使用:

            git show --stat --oneline HEAD
            

            【讨论】:

              【解决方案15】:

              所有的好答案;只是 FEI,“git checkout”(切换到或在同一分支中)似乎只显示修改过的文件。

              【讨论】:

                【解决方案16】:

                如果你想列出修改过的文件,你可以这样做:

                git log -n1 --oneline --name-status | grep '^M'
                

                【讨论】:

                  【解决方案17】:

                  另一种方法是通过-s 将结果放在一行中,这可以限制显示的内容。

                  git status -s
                  

                  在带有 Powerline/Posh git 的 windows 终端下显示。


                  这个命令非常方便,我将它添加为别名,用作git stati

                  [alias]
                     stati = !git status -s
                  

                  【讨论】:

                    猜你喜欢
                    • 2018-12-28
                    • 1970-01-01
                    • 2021-11-22
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-06-08
                    • 1970-01-01
                    • 2010-10-25
                    相关资源
                    最近更新 更多