【问题标题】:Can I use "git checkout --" on two files?我可以在两个文件上使用“git checkout --”吗?
【发布时间】:2015-02-17 05:10:57
【问题描述】:

是否可以在多个文件上使用 git checkout -- 以放弃更改?

如果是这样,我将如何指定多个文件?

【问题讨论】:

  • git checkout -- .

标签: git git-checkout


【解决方案1】:

多次运行命令

git checkout -- path/to/file/one
git checkout -- path/to/file/two

或者在同一行指定多个文件:

git checkout -- path/to/file/one path/to/file/two

您还可以指定将递归到它们下面的所有文件的整个文件夹。

git checkout -- path/to/folder
git checkout -- . # for the current path

【讨论】:

    【解决方案2】:

    我在用户的 git repo 目录中运行 find,不小心修改了目录中的所有文件。

    me@server:/home/me/gitrepo# git status
    On branch master
    Your branch is up-to-date with 'origin/master'.
    
    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:   .bashrc
        modified:   dir/ec2-user.pem
        modified:   dir/readme.txt
        modified:   dir/root.pem
        modified:   dir/ec2-user.pem
        modified:   dir/readme.txt
        modified:   dir/root.pem
        modified:   dir/ec2-user.pem
        modified:   dir/ec2-user.pem.pub
        modified:   dir/readme.txt
        modified:   dir/root.pem
    

    为了纠正我的错误,我运行了类似这样的命令来查找所有修改过的文件并从 master 签出文件。

    git status | grep modified | sed 's/^.*modified: //' | xargs git checkout

    【讨论】:

      【解决方案3】:

      可能的选择是:

      git status --porcelain | cut -c4- | xargs git checkout
      

      【讨论】:

      • 如何过滤此命令以忽略某些扩展文件?
      • 您可以尝试再添加一条管道语句,其中包含要排除的文件列表(-f 键用于 grep 排除文件列表)或直接提供特定文件名。单个文件:git status --porcelain | grep -vF sing-file-name-to-exclude.extention |切-c4- | xargs git 结帐。或多个文件: git status --porcelain | grep -vFf list-of-excludes.txt |cut -c4- | xargs git 结帐
      【解决方案4】:

      使用以下命令

         git checkout path/to/fileName path/to/fileName2 path/to/fileName3
      

      这将允许您恢复或放弃对文件 fileName、fileName2 和 fileName3 所做的更改

      注意:路径名中的空格会导致 git 出现问题。在这种情况下,使用单引号 '' 将路径名括起来。

      【讨论】:

        【解决方案5】:

        列出一个文件中的两个(或更多)文件。

        在 Git 2.25(2020 年第一季度)中,更多命令学习了“--pathspec-from-file”命令行选项which I previously mentioned for git commit

        这意味着您可以将old confusing git checkout commandnew command (Git 2.23+) git restore文件列表 一起使用(用于签出/恢复),而不是多次重复在不同的文件上使用相同的命令。

        参见commit a9aecc7commit cfd9376commit 8ea1189commit 6fdc9adcommit 1d022bbcommit bebb5d6commit 21bb308(2019 年 12 月 3 日)Alexandr Miloslavskiy (SyntevoAlex)
        (合并Junio C Hamano -- gitster --commit 135365d,2019 年 12 月 25 日)

        checkout, restore:支持--pathspec-from-file选项

        签字人:Alexandr Miloslavskiy

        为简单起见做出的决定:

        1. 目前,--pathspec-from-file 被声明为与 --patch 不兼容,即使 &lt;file&gt; 不是 stdin。这样的用例并不是真正预期的。
        2. 不允许在 args 和 file 中传递 pathspec。

        you must specify path(s) to restore 块已下移,以便能够测试 pathspec.nr,因为测试 argc 不再正确。

        git switch 不支持新选项,因为它不需要 &lt;pathspec&gt; 参数。


        使用 Git 2.26(2020 年第一季度)增加了更多测试。

        参见Alexandr Miloslavskiy (SyntevoAlex)commit f94f7bd(2019 年 12 月 30 日)。
        (由 Junio C Hamano -- gitster -- 合并于 commit 96aef8f,2020 年 1 月 30 日)

        t:使用 --pathspec-from-file 添加错误条件测试

        建议人:Phillip Wood 签字人:Alexandr Miloslavskiy 签字人:Junio C Hamano

        【讨论】:

          【解决方案6】:

          除了已经回答的内容之外,我会为当前路径做这样的事情:

          git checkout ./*
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-06-18
            • 2010-10-25
            • 1970-01-01
            • 2017-03-04
            • 1970-01-01
            • 1970-01-01
            • 2020-12-04
            • 2011-01-16
            相关资源
            最近更新 更多