如何修改现有的、未推送的提交信息?

我在提交信息中写错了。

我怎样才能改掉这个信息呢?这个提交还没有被推送。

解决办法

修改最近的提交信息

git commit --amend

将打开你的编辑器,允许你改变最近一次提交的提交信息。此外,你可以在命令行中直接设置提交信息,方法是:。

git commit --amend -m "New commit message"

...然而,这可能会使多行提交信息或小的更正的输入更加麻烦。

在这样做之前,请确保你没有任何工作副本的修改staged,否则它们也会被提交。(未暂存的修改不会被提交)。

改变你已经推送到远程分支的提交信息

如果你已经将你的提交推送到了远程分支,那么你将需要强制推送提交

git push   --force
# Or
git push   -f

警告:强制推送将以你本地分支的状态覆盖远程分支。如果远程分支上有你的本地分支没有的提交,你将**失去这些提交。

警告:修改已经与他人共享的提交时要谨慎。修改提交实质上是将它们改写成不同的 SHA ID,如果其他人有你改写的旧提交的副本,就会造成问题。任何拥有旧提交副本的人都需要将他们的工作与你新改写的提交同步,这有时会很困难,所以当你试图改写共享提交历史时,请确保与其他人协调,或者完全避免改写共享提交。


使用交互式rebase

另一个选择是使用交互式rebase。 这允许你编辑任何你想更新的信息,即使它不是最新的信息。

为了做一个Git squash,请按照以下步骤。

// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X

一旦你压扁了你的提交 - 选择e/r来编辑信息。

![在此输入图片描述][2]

关于交互式rebase的重要说明

当您使用git rebase -i HEAD~X时,可以有**多于X的提交。Git会"收集"最后X个提交中的所有提交,如果在这个范围内有一个合并,你也会看到所有的提交,所以结果会是X+。

好的提示。

如果你必须为不止一个分支做这件事,而且在修改内容时可能会遇到冲突,可以设置git rerere,让 Git 自动为你解决这些冲突。


文档

评论(32)

如果你想修复的提交不是最新的提交。

1.git rebase --interactive $parent_of_flawed_commit

如果您想修复几个有缺陷的提交,请传递其中最古老的一个提交的父本。

2.2.会出现一个编辑器,里面有自你给的那个提交之后的所有提交的列表。

1.在任何你想修改的提交前,把 "pick "改为 "reword"(或者在旧版本的Git上,改为 "edit")。 2.一旦你保存,Git会重放列出的提交。

3.3. 对于每一个你想重写的提交,Git会让你回到你的编辑器。对于每一个你想编辑*的提交,Git会让你进入shell。如果你在shell中。

1.以任何你喜欢的方式修改提交。 2. git commit --amend。 3. git rebase --continue

这个顺序的大部分内容会在你进行时通过各种命令的输出解释给你。这很简单,你不需要记住它--只要记住git rebase --interactive可以让你纠正提交,不管它们是在多久以前。


注意,你不会想修改已经推送的提交。或者你想,但在这种情况下,你必须非常小心地与所有可能拉过你的提交并在上面做了工作的人沟通。*[在有人向已发布的分支推送rebase或重置后,我如何恢复/重新同步?

评论(15)