为了账号安全,请及时绑定邮箱和手机立即绑定

git commit --amend如何工作?

git commit --amend如何工作?

Git
猛跑小猪 2019-11-20 14:12:00
我已经看到GIT commit --amend处于分离的HEAD状态。这个问题要求答案比需要的要复杂。我想了解git commit --amend在正常的HEAD情况下如何工作。
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

假设您处于干净的工作状态,并且您的回购如下所示:

如果你再跑


git commit --amend

编写提交消息,保存并退出编辑器,将发生以下情况:


暂存区域,如果你还没有上演任何新的变化,将是相同的承诺f42c5-is用于创建一个新的提交:31b8e。它的父级将与您要修改的提交的父级相同f42c5。

该master分支参考移到点到新的提交(31b8e)。

该HEAD参考如下master。


请注意,现在修改后的commit(f42c5)无法从您的存储库中的任何引用中获得(因此在我的图表上其为“透明”样式)。它仍然存在于存储库的对象数据库中,但是当Git运行其定期内务处理时,或者如果您通过运行git gc(垃圾回收)显式触发它,则最终将被永久删除。


附录(基于Jason Baker的评论):请注意,只要修改过的commit f42c5仍然存在于您的仓库中,您就可以找出其commit ID(例如,通过从master分支的reflog中进行钓鱼),您仍然可以签出。跑步


git checkout master # just to be sure that master is the current branch

git reset --hard f42c5

或(假设与此同时,您尚未对master,重置master或以其他方式移动master分支引用进行任何新的提交)


git checkout master # just to be sure that master is the current branch

git reset --hard master@{1}

将使您处于以下情况:


但是现在,提交31b8e将变得无法实现。


查看完整回答
反对 回复 2019-11-20
  • 3 回答
  • 0 关注
  • 2001 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信