手动将git分支头重新指向现已分离的提交对象

时间:2019-06-25 00:27:44

标签: git

我想重新使用git数据库中的提交对象,该对象当前未附加到任何分支。

场景如下:让我们称我的最后一次提交cfg = tf.ConfigProto(gpu_options=tf.GPUOptions.Experimental()) #TypeError: Parameter to MergeFrom() must be instance of same class: expected tensorflow.GPUOptions got tensorflow.GPUOptions.Experimental. 。从A起,我开始对工作树进行更改,但很快意识到A中存在一个需要修复的错误。我修复了该错误,并尝试修改我的提交,但未添加自A提交以来对工作树所做的任何其他更改。我通过A完成了此任务,然后仅分阶段修复了该错误。然后,我没有做git reset --soft HEAD^(注意git commit -c ORIG_HEAD),而没有做git commit -a -c ORIG_HEAD,所以我最终添加了所有我想保留的所有其他更改。可以将修订后的提交称为-a,以将其与原始提交区分开。

我有A'的原始提交对象的SHA1和,并且所有blob仍然应该存在,因为这是最近的,并且我没有将任何过期标记。我正在考虑简单地编辑A以使其指向.git/refs/heads/branch_name,然后根据需要在工作树中暂存内容,然后重新修改提交。

在这种情况下,这将是最好的做法吗?还是有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

可以重新指向您当前的分支名称,但是我发现只是为分支名称创建一个更方便,更安全的方法:

git branch oops <hash>

您现在有了分支名称oops,可以记住您手动记住的哈希ID。该名称或多或少地保护了垃圾回收器中的提交(及其所有文件,以及所有可从其获取的所有 及其所有文件)永久-与该名称或任何其他名称一样永久使它们可访问。

(默认情况下,HEAD和原始分支名称的引用日志使提交至少可以保留30天,因此创建新名称的时间就足够长了。)