Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 在挤压后更改上一个提交消息,而不是推送_Git_Rebase - Fatal编程技术网

Git 在挤压后更改上一个提交消息,而不是推送

Git 在挤压后更改上一个提交消息,而不是推送,git,rebase,Git,Rebase,我的场景:我尝试挤压3次提交,来自2次提交的消息与分支前的最后一次提交合并,我想删除虚拟提交消息 (很抱歉,下面的示例不是终端的直接副本,只是我的解释。) 我连续犯了7次罪。其中3个是我想在合并我的分支回到master之前压扁的 af7d12c31e123023425a7b6f88bd3d6f43103358 dummy commit 3 69ec87cf490313086627df5224a1bcdbd3e9addd KEEP THIS COMMIT 4 fd6c843d59451c01762

我的场景:我尝试挤压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)设置为挤压。保存并重新设置基址已完成

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

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

    LAST COMMIT BEFORE BRANCHING

    dummy commit 1

    dummy commit 2
commit 98DFB5299B122E496AE29142038894488F0871
作者:
日期:2013年4月25日星期四14:51:28-0700
分支前的最后一次提交
虚拟提交1
虚拟提交2
我从同一个提交98DFB5299B122E496AE29142038894488F0871再次运行git rebase,并将该提交更改为“reword”,并更改了消息,但没有任何效果

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

我是否需要在分支之前从上一次提交的父级重新设置基础?

首先,请注意以下几点:

  • 如果
    98dfb529
    是分支之前的最后一次提交(也就是说,它出现在master和分支中),那么将分支的第一次和第二次提交设置为“挤压”(
    290f261f
    914dc32f
    )可以有效地将分支点提前一步移动。这是因为
    98dfb529
    在您的分支中不再存在,它已被压缩的
    98dfb529
    +
    290f261f
    +
    914dc32f
    (我们称之为
    aaaaaaaa
    )<代码>98dfb529,但仍存在于主机中

  • 然后您决定在
    aaaaaa
    上执行
    重写。您更改了提交消息。此更改触发了提交哈希本身的更改,因此现在您的分支包含
    bbbbbbbb
    ,而不是
    aaaaaa
    <但是,code>aaaaaa
    仍然存在,即使它没有被任何分支直接引用:它将在git下次触发悬空提交的垃圾收集时被删除。因此,
    git日志aaaaaa
    仍将显示旧消息

总而言之,这可能是您当前的情况:

                          (..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 ...)

您的过程是正确的。您是否尝试更改在提交期间出现的rebase列表或commit msg编辑器中的提交消息?通过使用
fixup
而不是
squash
可以避免将来出现此问题。修复程序将在提交消息编辑器中丢弃虚拟提交的提交消息。这是唯一一个第二次出现的编辑。第一次通过时,它在vim中打开,而不是我通常使用的nano。我想我在试图摆脱维姆的时候把事情搞砸了。我是否应该再次执行整个过程,但在分支之前使用上次提交的父级?我不敢这么做,因为那是以前的分支。好吧,我不知道为什么,但我又重新编辑了2次,这次更改卡住了。提交
98dfb52
是从
master
分支出来的吗?换句话说,那是在
主机中提交的吗?