'GIT提交--修改分离的磁头状态 [英] 'git commit --amend' in detached HEAD state

查看:14
本文介绍了'GIT提交--修改分离的磁头状态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道修改旧的Git提交的正确方法是使用rebase --interactive,但为了澄清概念,我想了解一下当我这样做时会发生什么

  • git checkout <commit>
  • 更改文件中的内容
  • 将更改的文件添加到索引
  • 然后git commit . --amend

当我这样做时,它不是修改提交,而是从同一提交的父级分支新提交。

这是否只是Git告诉我我无法修改已有子代提交的提交的方式?

推荐答案

在Git中,一旦创建了提交,它就是一成不变的;您无法更改它。您所能做的就是创建一个类似于它的新承诺,通过修改它、挑选它等等。

我理解您的困惑:&amendate";是一个有点用词不当的词;它有点误导,因为它暗示修改某些适当的东西。在Git中,修改提交实际上就是创建一个与原始提交具有相同父级的全新提交。

为例,假设在运行git checkout B后,您处于以下情况:

(您的HEAD是分离的,但这不是重点。)无论您是否进行更改和暂存更改,运行git commit --amend都会使您处于这种情况:

CommitD可能与B非常、非常相似;尤其是,它可能具有与B完全相同的补丁、完全相同的提交消息,等等。然而,(Commit,Author)时间戳通常会不同(unless you can amend a commit under a second!),这意味着D的SHA-1将与B的SHA-1不同;如果两个提交没有相同的SHA,则它们不是相同的提交。

当我们说BC的父提交时,我们指的是提交C引用提交B通过其SHA。 但是,COMMITC无法知道COMMITD的SHA,因为COMMITD是在C之后创建的。因此,D不能是C的父项。这就是提交D在切线上开始并且没有任何子项的原因。


如果您要在以下状态下着陆,

如果B'B仅略有不同,则应使用git rebase -i,而不是git commit --amend

这篇关于&#39;GIT提交--修改分离的磁头状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆