【发布时间】:2020-10-19 18:50:42
【问题描述】:
今天我正在处理我的项目,我尝试了一种效果不佳的新算法。因此,我不想将它包含在项目中,但我想对存储库中的代码进行提交,以防我以后想参考它。这是我所做的:
git add .
git commit -m "Lorem ipsum..."
在我的笔记本中记下提交哈希并附上一些注释。
git reset HEAD^
所以现在,那个提交不是分支历史的一部分,但是如果将来我需要这个提交,我可以简单地使用提交哈希来检查它。但这是我的问题:
这个提交会被推送到远程吗?或者它会永远只保留在我的本地机器上吗?显然,这会很糟糕,因为如果我不得不移动机器等,我会在重新克隆时丢失这个提交。
【问题讨论】:
-
一种天真的方法可能是对您刚刚提交的提交执行
git revert- 这样提交将被推送到远程但它不会在HEAD -
这听起来很可怕!更好的方法是创建个人 WIP 分支并将其推送到远程,如果远程具有相关的问题跟踪系统,则连同 WIP PR/MR。不要让每个人都用未完成的垃圾堵塞
master或任何真正的分支。 -
您可以有一个 WIP 分支,您可以在其中连续应用,然后还原每个变体,然后推送它。这样所有的提交都会被保留,但每个提交都基于原始代码。如果混乱不会进入“实时”分支,那也没关系。而且绝对比在没有上下文的情况下漂浮在以太中的孤立、神秘、不直观的提交更可取,即使这是可能的!
-
请注意,如果您的重置提交没有分支或标签或其他永久名称,最终将被
git gc丢弃。只要它具有 一些 可查找的名称(包括 reflog 条目),它就会保留在您的存储库中,这对于此特定目的很重要。但是,Reflog 条目最终会过期并被清除。一旦它的唯一名称是它的哈希 ID,它就有资格进行 GC。 -
reflog 条目的默认生命周期为 30 或 90 天。 30 天的生命周期适用于这种特殊情况。之后,
git gc运行的git reflog expire将删除 reflog 条目,然后git gc运行的git prune将删除提交。git gc运行的确切时间很难预测:各种命令为您运行git gc --auto,--auto模式检查 Git 是否认为gc会好。如果没有,auto-gc 会立即退出而不做任何事情,但如果是这样,它会在后台运行其余的日常工作。
标签: git