【问题标题】:Why does my git interactive rebase change for the last commit message then show Everything up-to-date when I do a push?为什么我的 git 交互式 rebase 会更改最后一条提交消息,然后在我进行推送时显示 Everything up-to-date?
【发布时间】:2014-03-01 14:33:39
【问题描述】:

我推送了我的最新更改

git push origin master

然后我用交互式变基修改了提交消息,即

git rebase -i HEAD~5

并在最后一次提交中更改了消息。

这保存成功,但是当我执行git push origin master 时,它只显示Everything up-to-date

现在 git 历史记录并没有显示实际所做的措辞更改?

但是,当我执行 git commit --amend -m"msg" 然后尝试推送更改时“看到”了。

【问题讨论】:

    标签: git github rebase git-push git-interactive-rebase


    【解决方案1】:

    在交互式 rebase 期间,我更改了提交消息...但我没有将第一列('action')从 pick 更改为 reword(或简称为 r)。

    这样做可以正确应用更改。

    【讨论】:

    • 正如interactive-rebase 待办事项列表(启动rebase 时在编辑器中打开的文件)中的描述所说,该文件中的消息仅用于说明/导航目的。所有实际更改都会在您保存文件后发生。
    【解决方案2】:

    然后在我推送时显示所有最新信息?

    一种可能的解释,以 Git 2.18(2018 年第二季度)为例:在“rebase -i”会话期间,代码可能会为较早的“reword”创建的提交提供更早的时间戳,后者具有已更正。

    参见Johannes Sixt (j6t)commit 12f7bab(2018 年 4 月 18 日)。
    (由 Junio C Hamano -- gitster -- 合并于 commit 0657e0f,2018 年 5 月 8 日)

    sequencer:在提交之前重置提交者日期

    现在,当提交消息时,sequencer 无需分叉即可提交 未编辑所有选择的提交都具有相同的提交者 日期。
    如果提交被改写,它的提交者日期将是稍后的时间 因为它是通过运行“git commit”的单独实例创建的。

    如果改写的提交后面有进一步的选择,那些后来的提交 将有一个比改写的更早的提交者日期。这是 由 git 缓存导致GIT_COMMITTER_DATE 时使用的默认日期为 未设置。
    在进程中生成提交之前重置缓存日期。

    【讨论】:

      【解决方案3】:

      因为最后一次提交的提交哈希没有改变。 您必须更改上次提交的提交哈希,以便服务器知道您已进行更改。

      在进行交互式变基时,您可以使用 reword 或 edit 命令。或者只使用 commit --amend。

      【讨论】:

      • 这里的推理是合乎逻辑的,但是缺少一些东西。运行git commit --amend 确实会更改最近提交的哈希值,但git push 仍然显示Everything up-to-date
      猜你喜欢
      • 2014-06-06
      • 1970-01-01
      • 2017-07-04
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      相关资源
      最近更新 更多