我真的不明白如果我检查旧提交,做一些修改并使用git commit --amend
提交会发生什么。
这种变化会自动传播到未来的提交吗?它是如何工作的?
答案 0 :(得分:4)
在git中,提交只是对象。当您git commit --amend
时,您只是使用相同的父级创建新的提交。最初看起来像这样:
{HEAD}
{master}
---[A]---[B]---[C]
现在您修改C
,创建新提交D
:
{HEAD}
{master}
---[A]---[B]---[D]
\
\
[C]
旧C
目前仍在那里。但是,它不再被任何分支引用,因此下次发生垃圾收集时,它将被扫除。
答案 1 :(得分:2)
为了补充约翰的答案,如果你修改了一个旧的提交,那么它的孩子就什么都不会发生。
old commit
v
o--o--o--o--o--o--o--o--o < original branch tip
\
o < ammended old commit & new branch tip
也许您想要做的事情可以通过interactive rebase that squashes commits完成。
答案 2 :(得分:1)
使用与旧提交相同的父级创建新提交,并且您当前的分支现在引用新提交。旧提交仍在对象数据库中,可以使用git reflog
找到。