3

我的场景:我尝试压缩 3 个提交,来自 2 个的消息在分支之前与最后一个提交合并,我想删除虚拟提交消息。

(对不起,下面的示例不是从终端直接复制的,只是我的解释。)

我连续提交了 7 次。其中 3 个是我想在将我的分支合并回 master 之前压缩的。

af7d12c31e123023425a7b6f88bd3d6f43103358 dummy commit 3
69ec87cf490313086627df5224a1bcdbd3e9addd KEEP THIS COMMIT 4
fd6c843d59451c017628d03f3b4674045f06e54a KEEP THIS COMMIT 3
9ec44b48384373cbc8571b6beba7fd094db03e93 KEEP THIS COMMIT 2
53b8a217a4dcc85fb74e7c57861253f801ff882a KEEP THIS COMMIT 1
914dc32f7882b2b459e46b35a9314aef1c6824ba dummy commit 2
290f261f9d1541967f491fe8cba0fdd085ad5c20 dummy commit 1 (1st one in branch)
98dfb5299b122e496aeae29142038894488f0871 LAST COMMIT BEFORE BRANCHING

我跑了

git rebase --interactive 98dfb5299b122e496aeae29142038894488f0871

然后我将 3 个虚拟提交 (1,2,3) 设置为 squash。保存并变基完成。

现在,当我“git log”时,98dfb5299b122e496aeae29142038894488f0871 的提交消息如下所示:

commit 98dfb5299b122e496aeae29142038894488f0871
Author: <me>
Date:   Thu Apr 25 14:51:28 2013 -0700

    LAST COMMIT BEFORE BRANCHING

    dummy commit 1

    dummy commit 2

我从同一个提交 98dfb5299b122e496aeae29142038894488f0871 再次运行 git rebase,并将该提交更改为“reword”并更改了消息,但它没有任何效果。

我还没有推送任何这些更改,只是在我的分支本地提交。

我是否需要再次变基,但从分支之前的最后一次提交的父级?

4

1 回答 1

2

首先,有几点注意事项:

  • if98dfb529是分支之前的最后一次提交(即,它同时出现在 master 和您的分支中),然后将分支的第一个和第二个提交设置为“squash”(290f261f914dc32f)有效地将分支点移动了一步。这是因为98dfb529在您的分支中不再存在,它已被压扁的98dfb529++所取代(我们称之为290f261f)。但是,master 中仍然存在。914dc32faaaaaaaa98dfb529

  • 然后你决定做rewordon aaaaaaaa。您更改了提交消息。此更改触发了提交哈希本身的更改,因此现在您的分支包含bbbbbbbb而不是aaaaaaaa. aaaaaaaa但是,即使它没有被任何分支直接引用,它仍然存在:它将在下次 git 触发悬空提交的垃圾收集时被删除。因此,agit log aaaaaaaa仍会向您显示旧消息。

回顾一下,这可能是您目前的情况:

                          (..your branch..)
                          |
                          * af7d12c3  // Note however that these five commits
                          * 69ec87cf  // have now a different hash, because
                          * fd6c843d  // the history has been changed: when
(..master..)              * 9ec44b48  // the parent of a commit changes, then
|                         * 53b8a217  // the child's hash changes as well.
* 98dfb529   * aaaaaaaa   * bbbbbbbb
|            |            |
| __________/____________/
|/
(... previous history ...)
于 2013-05-08T06:20:03.950 回答