【问题标题】:How to commit only some files when I want to get unmodified version of another?当我想获得另一个文件的未修改版本时,如何只提交一些文件?
【发布时间】:2020-01-27 05:04:14
【问题描述】:

我认为这是关于 git 的最常见问题。 但我有具体的问题。

例如,我在本地 git 中获得了一些文件,并修改了其中一些文件。一旦我回忆起我在文件中犯了一个错误,但我想将更改保存在其余文件中。 我可以通过 git add 将它们的状态更改为暂存,但是如何仅提交选定的文件并返回我现在不想提交的文件的原始版本。

所以,我想,我的问题是如何通过保存另一个文件的更改来返回未修改版本的文件。 谢谢

【问题讨论】:

  • 哦,想象一下,我有 3 个修改过的文件:file1 file2 和 file3。我不希望 file3 被提交,我希望它是最新版本。但我想使用 file1 和 file2 的更改,它们让我满意。所以,我希望他们将被分阶段并提交,但同时我希望将 file3 的状态返回到未修改的原始版本

标签: git github


【解决方案1】:

您可以在 Git 2.23+(2019 年 8 月)中使用新的 command git restore (less confusing than git checkout)

您可以同时恢复索引和工作树(这与使用git-checkout 相同)

$ git restore --source=HEAD --staged --worktree hello.c

或者更实用但可读性较差的简短形式:

$ git restore -s@ -SW hello.c

【讨论】:

    【解决方案2】:

    根据您的评论,如果您有三个文件:file1、file2、file3,并且您只想提交 file1、file2 并想要 file3 的未修改版本,您可以在文件级别使用以下 checkout 命令。

    git checkout master -- file3 # then copy the version of file3 
                                      # from branch "master"
    

    这样,file3 会从 master 分支复制到本地。

    现在,您可以继续提交。

    git add file1, file2 
    git commit -m "modified file1, file2"
    

    【讨论】:

      【解决方案3】:

      我想你也可以使用命令行:

      git add -p
      

      这使您可以逐个查看所有未提交的文件,并选择是否要提交。

      然后你有一些选项会出现在每次修改中:我使用“y”表示“是的,我想添加这个文件”,“n”表示“不,我稍后会提交这个”。

      Stage this hunk [y,n,q,a,d,K,g,/,e,?]?
      

      至于其他选项( q,a,d,K,g,/,e,? ),我不确定它们是做什么的,但我猜是“?”如果您需要更深入地了解细节,可能会对您有所帮助。

      这样做的好处是您可以推送您的工作,然后创建一个新分支,所有未提交的工作将跟随您在该新分支上。如果您编写了许多不同的代码并且您确实想在推送之前在 github 上重新组织您的工作,这将非常有用。

      【讨论】:

        猜你喜欢
        • 2011-11-06
        • 2018-10-19
        • 2021-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多