社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

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

mvo • 5 年前 • 1196 次点击  

当我试图理解撤销各种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
 
1196 次点击  
文章 [ 1 ]  |  最新文章 5 年前