如何在不提交 Git 的情况下保存我的文件?

How can I save my files without committing with Git?

我正在使用 git 和 Github 作为除源代码管理之外的实际备份解决方案,并且正在开发一项大型功能。这个功能非常粗糙。我专注于完成所有增强功能的添加,但我知道自上次提交以来我添加的所有代码之后肯定会有大量清理工作要做。

通常我会在开发过程中的逻辑检查点频繁地提交,但这次我一直在推迟,因为提交会使找到所有需要清理的代码变得更加困难。现在,我可以在 Github 客户端中看到 windows 的未提交文件列表和更改,而我的 IDE、Android Studio 清楚地显示具有未提交更改的文件嗯

我有一个额外的备份解决方案,但想知道是否有人有适合这些情况的良好系统 - 当您不想 rubber-stamp/commit 未完成的代码但想以某种方式将其保存在 git?

您可以隐藏更改,请参阅命令 git stash。它会清理您的工作目录,将所有内容保存在所谓的“存储堆栈”中。稍后可以使用 stash applystash pop.

重新应用此保存的状态

stash 的目的是“记录工作目录和索引的当前状态”,并提供干净的工作树。是你要找的吗?

git docs

如果您的问题是关于在 Git 中保存文件 而不进行提交,答案很简单:您不能。1

如果您的问题是如何将文件保存在 Git 之外,答案也很简单:只需将文件保存在 Git 之外。 Git这里本身就不进图了

理解这一点的关键是一个简单但最初令人惊讶的事实:当您使用 Git 时,您可以查看和使用的文件 on/with 不是 在 Git 中。保存在提交 中的文件 在 Git 中,但不是您可以查看和使用的文件 on/with。它们甚至不是 直接 来自那些文件。相反,当您 运行 git add、Git 将您可以查看和使用的文件复制到隐藏的、准备提交的副本中。当您 运行 git commit 时, 就是那些隐藏的、准备提交的副本被保存的时候。

有几个 Git 命令没有拼写 git commit,但它们确实会提交,因此会在 Git 中保存文件。例如, 进行两次或三次提交的 git stash 命令(正常设置为两次;如果使用 git stash -ugit stash -a,则会得到 3 次)。

您在评论中提到:

I still want my changes to be in the working directory to build off

你的工作树是你的,随心所欲。这里的文件 不在 Git 中,因此您可以对它们做任何您想做的事情。请记住:

  • git checkout 和其他一些 Git 命令,充当 替换 工作树中文件的明确请求;
  • git add 告诉 Git 复制 一些或所有文件,因为它们出现在您的工作树中,进入 Git 的 index 又名暂存区,以便他们准备好进入下一次提交。

索引/暂存区最初与您签出的任何提交匹配,这就是为什么建议的下一次提交最初与当前提交匹配。


1正如上面所暗示的,这不是 100% 正确。例如,您可以使用非提交命令将一些单独的文件复制到某处:git hash-object -w 将获取文件内容(不是文件,只是其内容)并将其转换为内部 blob 对象。不过,这种方法相当麻烦:未引用的 blob 可能会被垃圾回收。为了防止它们被垃圾收集,您有一些时间(默认情况下为 14 天),在此期间您可以构建 tree 按名称引用它们的对象,然后构建 commit 引用树对象的对象,并使用 reference,例如分支或标签名称,使提交对象有一个外部名称,保持整个程序集免于被垃圾收集。

唉,这只是一个啰嗦的做法git commit。但是您 可以 将其分解一点,因此在 13 天(或更长,如果您调整 GC 年龄设置)没有提交就可以逃脱。不过,这不值得。只需提交或保存 Git.

之外的文件