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将变得无法实现。
- 3 回答
- 0 关注
- 2044 浏览
添加回答
举报