Py学习  »  Git

还原以前暂存的更改(或:撤消对.git/index的更改)

mvo • 5 年前 • 1168 次点击  

当我试图理解撤销各种git操作的方法时,我想到了一个不确定如何处理它的场景。免责声明:我在实际与git“生产中”合作时没有这种情况,但我仍然认为这不仅仅是一个学术问题。

让我们看看下面的场景

  • 操作先前提交的文件: echo "some content" >> example.txt
  • 准备更改: git add example.txt
  • 签出上次提交的更改: git checkout @ -- example.txt
  • 意识到您选择了错误的文件,并且希望撤消最后一个命令以获取更改( "some content" )回来

我想在引擎盖下发生的事

每次转移更改时 git add blob对象是在 .git/对象/ 以及索引文件( .git/索引 )得到更新。如果我多次更改和添加内容,将有多个blob。旧的没有立即被垃圾收集。

当从上面运行checkout命令时,索引会立即得到更新(我还假设内容只在我的工作目录中,但未分页)。这样参考就不见了,我不能用 git checkout-index 还原它们。

除非垃圾收集在技术上仍然存在。但我不知道怎样才能把它弄回来,然后手动地寻找散列,并用 git cat-file . 跑步也是如此 Git添加 很多次,尽管在这里想要返回先前的阶段性更改可能不是一个真正的用例。(或者当从储藏室弹出变化时?……)


所以所有这些归结为以下问题:

  • 有什么像 git reflog 为了索引?
  • git checkout @ -- file 被认为是像git这样危险的命令 reset --hard 你在哪里可能会放松工作?

如果答案是“不”或“是”(我目前的推测):

  • 有手动更改/重写索引的管道命令吗?(见上例,物体仍在那里)

奖励:有没有其他方法可以在不立即转移文件的情况下签出单个文件?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39958
 
1168 次点击  
文章 [ 1 ]  |  最新文章 5 年前