我刚开始在 Windows 上使用 Git,我有一个小问题。当我看到git commit
一条消息时,我意识到 git 提交了文件。但它到底把提交的文件存储在哪里呢?
假设我做了一些更改,并想使用 Git GUI 恢复到第三次提交。我该怎么做?
答案1
Git commit 只会将内容保存到本地的 stage 中。使用 Push 可以将其更新到远程服务器(比如 github)。
用于git revert <ID>
恢复到以前的提交。每个提交都有一个识别码。
看这里有关恢复的更多详细信息
答案2
上面的答案并不完全正确 -git revert <ID>
不会将您的存储库设置为该提交 -git revert <ID>
创建一个新的提交,以撤消由提交引入的更改<ID>
。 它或多或少是一种“撤消”提交并将该撤消保存在历史记录中作为新提交的方法。
如果您想要将分支设置为特定提交的状态(如 OP 所暗示的),则可以使用git reset <commit>
或git reset --hard <commit>
第一个选项仅更新 INDEX,使工作目录中的文件保持不变,就好像您进行了编辑但尚未提交它们一样。使用 --hard 选项,它会将工作目录中的内容替换为 上的内容<commit>
。
警告:这git reset
将改变历史记录——如果我进行了多次提交,然后重置为第一次提交,则后续提交将不再存在于提交历史记录中。如果任何丢失的提交已推送到公共存储库,这可能会导致严重的麻烦。请确保您只使用它来删除尚未推送到另一个存储库的提交!
答案3
您可以使用此命令重置特定的提交。
git reset <commit it>
答案4
回答您的第一个问题:运行命令后,commit
文件会作为普通文件保存在您的硬盘上,但git
也会将更改的差异保存在存储库中的 .git 文件夹中,并为该更改分配一个哈希值。这就是 git 跟踪您的更改的方式(您可以使用命令检查它log
,也可以在历史记录的 GUI 树视图中检查它,不确定它是如何调用的,因为我不使用 GUI 进行 git)
关于您要求恢复到旧状态的部分,有两种方法:
revert
:创建一个新的提交,它基本上与您要还原的提交创建的提交相反(您会在自动提交消息中看到它)。这意味着您在提交树中创建了一个新节点,即您没有更改项目的历史记录,但已将其添加到其中 => 当您执行时,git push
一切都很好reset
:您将把存储库历史记录的状态移回过去,并可能丢失在此基础上所做的所有更改。即,您正在更改项目的历史记录 => 执行时git push
您需要使用--force
/-f
标志。这是一个危险的操作,所以如果使用它要小心,您可能会更改存储库的其他用户的状态。
现在,对于您遇到的 GUI 问题,您可以右键单击要返回的提交(reset
)或通过右键单击历史树中的提交来删除一次提交所做的更改( ),或者也许有一个按钮可以执行此操作。最重要的是要了解和revert
之间的区别。revert
reset