git修改提交不同的消息

时间:2016-05-24 05:49:13

标签: git

我已经提交了一个包含消息" m1"的文件。后来,我修改了它,并且我试图修改最后一次提交。但是,我已经更改了最后一条消息,并通过消息" m2"提交了更改。

情况是我提交了两个不同的提交,其中一个正在等待推送,另一个正在等待提取。我绝对不了解这种情况,我也无法弄清楚是什么。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

问题是git commit --amend没有 - 而且无法 - 更改提交。

相反,它创建了一个新的提交,除了你修改过的任何东西之外,它的味道很像旧的提交。然后它使当前分支名称指向新提交而不是旧提交。

如果其他人已经有旧提交,他们仍然拥有。在这种情况下,您已经发送了上游提交(使用git push),或者首先从您的上游获取它(使用git fetch后跟一些东西,通常是合并或变基,设置您的本地分支包含提交)。所以他们仍然有原版,现在你有副本:

              C'  <-- branch
             /
... <- A <- B
             \
              C   <-- upstream/branch

您还有C指向的原始版本upstream/branch(在此图表中)和您的reflog(您通常不会看到它)。你和你只有你的“修改”副本C',至少在你以某种方式发表它之前。

如果你使用git push --force,你可以 1 说服你的上游接受它,丢弃原始C的副本。这样做会让每个其他的人感到恼火,他们拥有原始C的副本并可能正在使用它,所以请确保即使你得到许可,你可以得到宽恕。 :-)如果没有其他人(除了上游)有C,或者如果每个人都同意接受这种替换,你就可以了。

1 上游是否接受强制推动是否达到上游。

答案 1 :(得分:1)

通过修改提交,您更改了存储库的历史记录。 Git试图通过声称您的分支已经与您的远程分支分道来纠正这一点,并允许您合并以修复它。

不合并。如果您修改了提交,则打算重写历史记录。

相反,你可以强制推动分支:

git push --force

这将告诉Git您完全打算覆盖历史记录,并且您的本地分支具有正确的历史记录,以反映在您的远程存储库中。

答案 2 :(得分:0)

&lt; p&gt;如果您已创建本地提交但忘记添加一些文件。您可以运行:&lt; / p&gt; &lt; pre&gt;&lt; code&gt; git add。 git commit --amend -m“新提交消息” &LT; /代码&GT;&LT; /预&GT; &lt; p&gt;这将在已创建的提交中添加这些新文件,并将更新提交消息。如果您只想更新提交消息而不是内容,则下面的命令就足够了。&lt; / p&gt; &lt; pre&gt;&lt; code&gt; git commit --amend -m“New Commit Message” &LT; /代码&GT;&LT; /预&GT;