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