如何重置单个 Git 文件以及为什么

作为用于版本控制的软件,Git 可以轻松地回滚更改。但即使是撤消更改的概念也比您最初想象的要复杂。Git 存储库与您在本地处理的文件集并不完全相同。撤消更改意味着准确考虑要撤消更改的位置。

git checkoutgit resetgit restore是可以帮助您恢复到以前版本的命令,不仅是代码库,还可以是单个文件。了解这些命令的详细信息,您将立即像专家一样浏览文件历史记录。

重要的是要注意,在不同的情况下,对不同的人来说,重置文件可能意味着不同的事情。此外,git reset命令可能与您对重置含义的期望不符。

有时,您会想要撤消本地更改,以便文件重新与当前存储库同步。在其他情况下,您可能希望回滚已提交到存储库的更改。

以下术语是理解差异的关键:工作树、暂存区和存储库。您在本地编辑的文件属于工作树。您提交的文件最终会出现在存储库中。在收集更改的过程中,您可以暂存文件。一个文件在每个位置可以有不同的内容。

您可能会将重置文件视为撤消更改。但是您的文件状态将决定您实际撤消的更改。明显的情况是当您进行一些更改,提交它们,然后决定不再需要它们时。

另一种情况可能是您暂存了一个文件,现在想要取消暂存它。

让我们处理一个更容易理解的案例:您提交了一个文件,现在您想回滚对它的更改。

执行此操作的 Git 命令有点不直观,名为checkout。您之前可能使用过checkout来切换分支,但这只是该命令可以做的一小部分。它还使您能够更新工作树中的文件以匹配存储库历史记录中任何点的文件。您可以为特定标签、分支甚至特定提交执行此操作。

此命令最有用的通用形式是:

git checkout [commit ID] -- path/to/file

在这里,我们传递了一个特定的路径(path/to/file),它只标识一个文件。我们还指定了一个提交 ID,以获取该特定提交时存在的文件。此命令将仅更新我们工作树中的文件。

请注意,检出文件的早期版本会修改工作副本,而无需提交甚至暂存它。要完全完成对存储库的撤消,您需要暂存文件并创建新提交。

另一种类型的撤消涉及您的临时区域。这包含您将在存储库旁边提交的更改。如果您已经暂存了一个文件版本,然后又决定不希望将其包含在下一次提交中,那么您需要先取消暂存。

您可以使用git reset命令取消暂存文件:

git reset HEAD path/to/file

是的,您可以在暂存之前撤消对本地文件的更改。使用以下命令:

git checkout -- path/to/file

请注意,这类似于回滚存储库更改,它只是省略了提交 ID。执行此命令后,Git 将撤消对工作副本的任何更改。

更高版本的 Git 有一个更新的命令:restore。对于我们在这里讨论的简单情况,您可以使用以下等效项。要撤消对存储库的更改:

git restore --source [commit id] path/to/file

要取消暂存文件,请使用:

git restore --staged path/to/file

并撤消工作副本更改:

git restore path/to/file

尽管重置文件似乎是一件很常见的事情,但您会发现它在实践中很少发生。您更有可能回滚整个提交而不是单个文件。然而,在你确实需要这样做的情况下,Git 至少让它变得相当简单。

标签: GitHub Web开发 编程