我已经提交了git并随后推送。我想更改提交消息。如果我理解正确,这是不可取的,因为在我进行此类更改之前,可能有人从远程存储库中删除了内容。如果我知道没人拉过呢?

有办法做到这一点吗?


当前回答

要编辑除最近提交以外的提交,请执行以下操作:

步骤1:git rebase-i HEAD~n为受影响的最后n次提交执行交互式rebase。(即,如果您想将提交消息3改回提交,请执行gitrebase-i HEAD~3)

git将弹出一个编辑器来处理这些提交,请注意以下命令:

#  r, reword = use commit, but edit the commit message

这正是我们需要的!

步骤2:将要更新消息的提交的pick更改为r。不要在此处更改提交消息,它将被忽略。下一步你会这么做。保存并关闭编辑器。

请注意,如果您编辑了重新命名的“计划”,但它没有开始允许您重命名文件的过程,请运行:

git rebase --continue

如果要更改用于交互式会话的文本编辑器(例如,从默认vi更改为nano),请运行:

GIT_EDITOR=nano git rebase -i HEAD~n

第三步:Git将为您之前的每个修订弹出另一个编辑器。根据需要更新提交消息,然后保存并关闭编辑器。

步骤4:更新所有提交消息后。您可能需要执行gitpush-f来更新远程。

其他回答

git commit --amend

使用编辑提交消息打字键盘

git push --force

如果使用-S参数提交工作消息,则会发生以下事件:

 git checkout branch

 git commit --amend -m "Your new message"

在这一点上,不要忘记您添加了一个更改,而您的遥控器是不同的,这就是为什么您需要这样做的原因:

 git push --force

如果您使用VSCode,您将看到不同之处,使用--force参数,您将忽略git pull,并将更改后的消息推送到相同的提交。

我第一次尝试重命名已经推送的大约6条旧提交消息,之后我又做了进一步的提交。

因此,这是最糟糕的案例“案例4:已推送+旧提交”。

我是Vim(现在是Nvim)的用户,也是Vim《逃犯》的超级粉丝。所以我就是这样做的。

这是您在《逃犯》中关于重新定基的一般帮助:

Rebase maps ~

ri                      Perform an interactive rebase.  Uses ancestor of
u                       commit under cursor as upstream if available.

rf                      Perform an autosquash rebase without editing the todo
                        list.  Uses ancestor of commit under cursor as
                        upstream if available.

ru                      Perform an interactive rebase against @{upstream}.

rp                      Perform an interactive rebase against @{push}.

rr                      Continue the current rebase.

rs                      Skip the current commit and continue the current
                        rebase.

ra                      Abort the current rebase.

re                      Edit the current rebase todo list.

rw                      Perform an interactive rebase with the commit under
                        the cursor set to `reword`.

rm                      Perform an interactive rebase with the commit under
                        the cursor set to `edit`.

rd                      Perform an interactive rebase with the commit under
                        the cursor set to `drop`.

r<Space>                Populate command line with ":Git rebase ".

r?                      Show this help.

获取提交列表。:Git日志--单行我想修复第12行的提交消息(4d43a1b构建(MPL-402):editorconfigfixformesages.json),因为它不是正确的常规提交格式。我将光标放在提交哈希4d43a1b上,然后键入rw这将“在光标设置为reword的情况下执行一个交互式rebase和commit”。请注意,与gitrebase-i HEAD~X相比,这是多么好-知道X是什么并不是那么简单。现在,这将为您提供正确的gitrebase命令。所以用:wq写并退出缓冲区然后按照git/逃犯指导的步骤进行操作。我的一个提交出现了合并冲突,我通过正常的fugitve合并冲突过程解决了这个问题。

希望这足以让你度过第一个“我以前从未做过一次重新训练,我到底该做什么?”的难关。如果您需要后续步骤的帮助,请给我留言。

要编辑除最近提交以外的提交,请执行以下操作:

步骤1:git rebase-i HEAD~n为受影响的最后n次提交执行交互式rebase。(即,如果您想将提交消息3改回提交,请执行gitrebase-i HEAD~3)

git将弹出一个编辑器来处理这些提交,请注意以下命令:

#  r, reword = use commit, but edit the commit message

这正是我们需要的!

步骤2:将要更新消息的提交的pick更改为r。不要在此处更改提交消息,它将被忽略。下一步你会这么做。保存并关闭编辑器。

请注意,如果您编辑了重新命名的“计划”,但它没有开始允许您重命名文件的过程,请运行:

git rebase --continue

如果要更改用于交互式会话的文本编辑器(例如,从默认vi更改为nano),请运行:

GIT_EDITOR=nano git rebase -i HEAD~n

第三步:Git将为您之前的每个修订弹出另一个编辑器。根据需要更新提交消息,然后保存并关闭编辑器。

步骤4:更新所有提交消息后。您可能需要执行gitpush-f来更新远程。

如果您使用的是位桶管道,则有关相同问题的附加信息

编辑您的邮件

git commit --amend

推到服务器

git push --force <repository> <branch>

然后在管道上的push命令中添加--force

git ftp push --force

这将删除您以前的提交并推送当前提交。

在第一次推动后移除--力

我在bitbucket管道上试过了,效果很好