当我想获取另一个未修改版本时,如何仅提交部分文件?

3
我认为这是关于Git最常见的问题,但我有一个具体的问题。
例如,我在本地Git中有几个文件,并修改了其中一些。一旦我想起在一个文件中犯了一个错误,但我想保存其余文件的更改。我可以通过使用git add将它们的状态更改为已暂存,但如何仅提交选择的文件并返回我现在不想提交的文件的原始版本。
所以,我猜我的问题是如何在保留另一个文件的更改的情况下返回文件的未修改版本。
谢谢

1
可能是如何仅提交部分文件?的重复问题。 - jaroslawj
哦,你看,想象一下,我有三个修改过的文件:file1、file2和file3。我不想提交file3,我希望它保持最新版本。但是我想使用file1和file2的更改,它们满足我的需求。因此,我希望它们被暂存和提交,但同时我也希望将file3的状态返回到未修改的原始版本。 - DisplayName
3个回答

2
您可以使用新的命令git restoregit checkout更易懂),该命令需要Git 2.23+(2019年8月)。

You can restore both the index and the working tree (this the same as using git-checkout)

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

or the short form which is more practical but less readable:

$ git restore -s@ -SW hello.c

1
我认为您也可以使用命令行:

git add -p

这样可以让你逐个审查所有未提交的文件,并选择是否要提交它们。
然后,对于每个修改,您会看到一些选项:我使用“y”表示“是,我想添加此文件”,使用“n”表示“不,我稍后将提交此文件”。
Stage this hunk [y,n,q,a,d,K,g,/,e,?]?

对于其他选项(q、a、d、K、g、/、e、?),我不确定它们的作用,但我猜“?”可能会帮助你深入了解细节。
这样做的好处是,您可以将您的工作推送到一个新分支上,并在此之后创建一个新分支,所有未提交的工作都将跟随您进入该新分支。如果您编写了许多不同的代码,并且实际上想要在推送之前在github上重新组织您的工作,那么这非常有用。

1

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

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

现在,文件3已从主分支复制到您的本地计算机。

现在,您可以继续提交。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接