使用 git 修改旧提交时会发生什么?

发布于 2024-08-30 19:20:06 字数 98 浏览 12 评论 0原文

我真的不明白如果我检查旧的提交,进行一些修改,然后使用 git commit --amend 进行提交,会发生什么。

该更改会自动传播到未来的提交吗?它是如何运作的?

I don't really understand what happens if I check out an old commit, do some modifications, and commit using git commit --amend.

Will that change automatically propagate to future commits? How does it work?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一场信仰旅途 2024-09-06 19:20:06

在 git 中,提交只是对象。当您git commit --amend时,您只是创建具有相同父级的新提交。最初看起来像这样:

                  {HEAD}
                  {master}
---[A]---[B]---[C]

现在您修改 C,创建一个新的提交 D

                  {HEAD}
                  {master}
---[A]---[B]---[D]
            \
             \
              [C]

旧的 C 目前仍然存在。但是,它不再被任何分支引用,因此下次发生垃圾收集时,它将被清除。

In git, commits are just objects. When you git commit --amend, you're just creating a new commit with the same parent. Initially that looks like this:

                  {HEAD}
                  {master}
---[A]---[B]---[C]

Now you amend C, creating a new commit D:

                  {HEAD}
                  {master}
---[A]---[B]---[D]
            \
             \
              [C]

The old C is still there for the moment. However, it is no longer referenced by any branch, so the next time a garbage collection occurs, it's going to be swept away.

神爱温柔 2024-09-06 19:20:06

为了补充约翰的答案,如果您修改旧的提交,其子项不会发生任何事情。

       old commit
            v
o--o--o--o--o--o--o--o--o < original branch tip
          \
           o  < ammended old commit & new branch tip

也许你想做的事情可以通过 压缩提交的交互式变基

To complement John's answer, if you ammend an old commit, nothing happens its children.

       old commit
            v
o--o--o--o--o--o--o--o--o < original branch tip
          \
           o  < ammended old commit & new branch tip

Maybe what you want to do can be accomplished with a interactive rebase that squashes commits.

凉宸 2024-09-06 19:20:06

创建的新提交与旧提交具有相同的父级,并且您当前的分支现在引用新提交。旧的提交仍然在对象数据库中,可以使用 git reflog 找到。

A new commit is created with the same parent as the old commit, and your current branch now refers to the new commit. The old commit is still in the object database and can be found with git reflog.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文