Git 工作流程:提交!= OS 保存

Git workflow: commit != OS save

我不清楚 git 应该如何工作。看了官方文档,也看了很多教程,都没有看到这个问题的答案。

如果您有一个新功能或要进行错误修复,并且为此目的创建了一个分支,那么在您的工作进行期间,您应该如何处理临时文件? Git 仅保存 'snapshots' 各种版本的工作文件。但是为了查看您的任何编辑是否有效或是否值得保留,您必须对其进行测试。如果操作系统不将它们保存到磁盘,您就无法测试它们。一旦你保存了这些文件,它们就不是 'snapshots',那么一旦磁盘上的文件被 'permanently' 保存,git 如何保存或恢复任何东西到 master 的原始状态,以便是 运行 并经过测试?

一定有答案,但我没有找到。我发现的唯一教程甚至是 OS 保存的引用是 http://ryanflorence.com/git-for-beginners/,并且仅在引用合并冲突时。

您可能将提交与硬盘保存混为一谈。您不能提交尚未保存的内容,这在任何 VCS 中都是如此;您无法对尚未写入文件的内容进行版本控制。

Git 实际上将更改的内容视为 snapshot,因为您从一个可能很大的初始文件开始,但 Git 只会费心跟踪版本之间发生的更改。如果文件的一部分被触及,则只有文件的那一部分被更新。

这是来自 a repository I'm working on 的示例。我正在使用 IntelliJ,所以粗体 SHA 是最近的更改。

如果我想将文件移回特定点,我可以。另请注意,自 2014 年 11 月以来,有很多事情没有改变(自 5 月以来存在一些变化),但自那时以来有明确的变化。这就是保留快照而不是整个文件版本的意思。如果我想重新引入 14 年 5 月的文件版本,我需要指示 Git 检查 5c5f8​​96b。

您看到的最终结果是整个文件当时的样子。这意味着它可能是您过去几个月(或几年)所有提交的混合体。它仍然是快照,因为它只会考虑对该文件的最新更改。

...Git thinks of its data more like a set of snapshots of a miniature filesystem. Every time you commit, or save the state of your project in Git, it basically takes a picture of what all your files look like at that moment and stores a reference to that snapshot. To be efficient, if files have not changed, Git doesn’t store the file again, just a link to the previous identical file it has already stored. Git thinks about its data more like a stream of snapshots.

你越深入 Git,你就会发现这种方法允许它返回到 "known working states",或者在同一个存储库中保留相同代码的多个版本。在大多数情况下,您会发现这个 with a bit of reading and some hands-on exercises.