5157
13533
这个问题的答案是社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。
我在提交消息中写错了内容。
如何更改信息?提交尚未被推送。 
修改最新的提交消息
git commit-修改
将打开您的编辑器,使您可以更改最近一次提交的提交消息。另外,您可以直接在命令行中使用以下命令设置提交消息:
git commit --amend -m“新提交消息”
…但是,这会使输入多行提交消息或进行小的更正变得更加麻烦。
在执行此操作之前,请确保没有进行任何工作副本更改,否则它们也会被提交。 (未暂存的更改将不会提交。)
更改已经推送到远程分支的提交消息
如果您已经将提交推送到远程分支,那么-在本地修改提交(如上所述)之后-您还需要通过以下方式强制推送提交:
git push <远程> <分支> --force
# 要么
git push <远程> <分支> -f
警告:强行推入将用您本地的状态覆盖远程分支。如果远程分支上有您本地分支中没有的提交,您将丢失这些提交。
警告:对于修改您已经与其他人共享的提交要谨慎。修改提交实质上会将它们重写为具有不同的SHA ID,如果其他人拥有您已重写的旧提交的副本,则会带来问题。拥有旧提交副本的任何人都需要将他们的工作与新重写的提交同步,这有时可能很困难,因此在尝试重写共享提交历史记录时请确保与他人协调,或者只是避免重写共享提交共。
执行交互式变基
另一种选择是使用交互式变基。
这样,即使不是最新消息,您也可以编辑要更新的任何消息。
为了做一个壁球南瓜,请按照下列步骤操作:
// n是您想要编辑的最后一次提交之前的提交数量
git rebase -i HEAD〜n
压缩提交后,请选择e / r来编辑消息:
有关交互式变基的重要说明
当您使用git rebase -i HEAD〜n时,可以提交n次以上。 Git将“收集”最近n次提交中的所有提交,如果在该范围之间某处存在合并,您还将看到所有提交,因此结果将为n +。
好提示:
如果您需要为多个分支执行此操作,并且在修改内容时可能会遇到冲突,请设置git rerere并让Git为您自动解决这些冲突。
文献资料
git-commit(1)手册页
git-rebase(1)手册页
git-push(1)手册页
|
git commit --amend -m“您的新消息”
|
如果您要修复的提交不是最新提交:
git rebase --interactive $ parent_of_flawed_commit
如果要修复几个有缺陷的提交,请传递其中一个最古老的提交。
将出现一个编辑器,并列出您提交以来的所有提交。
在要修复的所有提交之前,将pick更改为reword(或在旧版本的Git上进行编辑)。
保存后,Git将重播列出的提交。
对于您要重新编写单词的每次提交,Git都会将您带回到编辑器中。对于您要编辑的每个提交,Git会将您放入外壳。如果您在外壳中:
以您喜欢的任何方式更改提交。
git commit-修改
git rebase-继续
您将通过执行各种命令的输出向您解释此序列的大部分内容。非常简单;您无需记住它-只需记住git rebase --interactive即可纠正提交,无论提交多久了。
注意,您将不想更改已经推送的提交。也许您这样做了,但在那种情况下,您将必须格外小心,与可能撤消了您的承诺并在其上完成工作的所有人进行沟通。在有人将基准或重置推送到已发布的分支后,如何恢复/重新同步?
|
要修改上一次提交,请进行所需的更改并进行更改,然后运行
git commit-修改
这将在文本编辑器中打开一个文件,代表您的新提交消息。它开始时填充了旧提交消息中的文本。根据需要更改提交消息,然后保存文件并退出编辑器以完成操作。
要修改上一次提交并保持相同的日志消息,请运行
git commit --amend -C头
要通过完全删除之前的提交来修复它,请运行
git reset --hard HEAD ^
如果要编辑多个提交消息,请运行
git rebase -i HEAD〜commit_count
(用要编辑的提交数替换commit_count。)此命令启动编辑器。将第一个提交(您要更改的提交)标记为“编辑”而不是“选择”,然后保存并退出编辑器。进行您要提交的更改,然后运行
git commit-修改
git rebase-继续
注意:您也可以从git commit --amend打开的编辑器中“进行所需的更改”
|
就像已经提到过,git commit --amend是覆盖最后一次提交的方法。注意事项:如果您还想覆盖文件,则命令为
git commit -a --amend -m“我的新提交消息”
|
您也可以为此使用git filter-branch。
git filter-branch -f --msg-filter“ sed's / errror / error /'” $ flawed_commit..HEAD
它不像普通的git commit --amend那样容易,但是如果您在错误的commit消息之后已经进行了一些合并,则它特别有用。
请注意,这将尝试重写HEAD和有缺陷的提交之间的每个提交,因此您应该非常明智地选择msg-filter命令;-)
|
我更喜欢这样:
git commit --amend -c <提交ID>
否则,将有一个具有新提交ID的新提交。
|
如果使用的是Git GUI工具,则有一个名为Amend last commit的按钮。单击该按钮,然后它将显示您的最后提交文件和消息。只需编辑该消息,就可以使用新的提交消息来提交它。
或从控制台/终端使用此命令:
git commit -a --amend -m“我的新提交消息”
|
您可以使用Git变基。例如,如果要修改回以提交bbc643cd,请运行
$ git rebase bbc643cd ^-交互式
在默认编辑器中,在要修改其提交的行中将“ pick”修改为“ edit”。进行更改,然后使用
$ git add <文件模式>
现在您可以使用
$ git commit-修改
修改提交,然后
$ git rebase-继续
返回到先前的头提交。
|
如果您只想修改最后的提交消息,请执行以下操作:
git commit-修改
这将使您进入文本编辑器,并更改最后的提交消息。
如果要更改最后三个提交消息,或者直到该点为止的任何提交消息,请向git rebase -i命令提供HEAD〜3:
git rebase -i HEAD〜3
|
如果您必须在多个分支上更改旧的提交消息(即,错误消息的提交存在于多个分支中),则可能需要使用:
git filter-branch -f --msg-filter \
'sed“ s / <旧消息> / <新消息> / g”'--全部
Git将创建一个用于重写的临时目录,并另外将旧引用备份到refs / original /中。
-f将强制执行该操作。如果临时目录已经存在或在refs / original下已经存储了引用,则这是必需的。如果不是这种情况,则可以删除此标志。
-将筛选器分支选项与修订选项分开。
--all将确保所有分支和标签都被重写。
由于备份了旧的引用,因此您可以轻松地返回到执行命令之前的状态。
假设您要恢复主数据库并在old_master分支中进行访问:
git checkout -b old_master refs / original / refs / heads / master
|
使用
git commit-修改
要详细了解它,一个出色的文章是4.重写Git历史记录。它还讨论了何时不使用git commit --amend。
|
如果这是您的最后一次提交,只需修改提交即可:
git commit --amend -o -m“新提交消息”
(使用-o(--only)标志来确保仅更改提交消息)
如果这是掩埋的提交,请使用超赞的交互式rebase:
git rebase -i @〜9#在文本编辑器中显示最后9次提交
找到所需的提交,将pick更改为r(reword),然后保存并关闭文件。做完了!
微型Vim教程(或者,如何仅用8次击键3jcwrEscZZ重新设置基础):
如果有时间,请运行vimtutor
hjkl对应于移动键←↓↑→
所有命令都可以以“范围”作为前缀,例如3j下移三行
我进入插入模式-您键入的文本将出现在文件中
Esc或Ctrlc退出插入模式并返回“正常”模式
你要撤消
Ctrlr重做
dd,dw,dl分别删除行,字或字母
cc,cw,cl分别更改行,词或字母(与ddi相同)
yy,yw,yl分别复制(“拉”)行,词或字母
p或P分别粘贴在当前位置之后或之前
:w输入以保存(写入)文件
:q!输入不保存即退出
:wqEnter或ZZ保存并退出
如果您经常编辑文本,请切换到Dvorak键盘布局,学习触摸式输入法,并学习Vim。值得付出努力吗?是。
ProTip™:不要害怕尝试使用“危险”命令来重写历史记录*-Git默认不会删除您的提交90天;您可以在参考日志中找到它们:
$ git reset @〜3#返回三次提交
$ git reflog
c4f708b HEAD @ {0}:重置:移至@〜3
2c52489 HEAD @ {1}:提交:更多更改
4a5246d HEAD @ {2}:提交:进行重要更改
e8571e4 HEAD @ {3}:提交:进行一些更改
...较早的提交...
$ git reset 2c52489
...而您又回到了起点
*但是要小心--hard和--force之类的选项,它们会丢弃数据。
*另外,请勿在您正在合作的任何分支机构上重写历史记录。
|
修改
你有几个这里的选项。你可以做
git commit-修改
只要这是您的最后一次提交。
互动基础
否则,如果这不是您的最后一次提交,则可以进行交互式变基,
git rebase -i [branched_from] [提交前的哈希]
然后,在交互式变基内部,您只需向该提交添加编辑。当它出现时,执行git commit --amend并修改提交消息。如果要在该提交点之前回滚,也可以使用git reflog并删除该提交。然后,您只需再次执行git commit。
|
如果您使用的是Git GUI,则可以修改尚未推送的最后一次提交:
提交/修改上一次提交
|
我尽可能多地使用Git GUI,这使您可以选择修改最后一次提交:
同样,git rebase -i origin / master是一个不错的口头禅,它将始终向您展示您在master之上所做的提交,并为您提供修改,删除,重新排序或压缩的选项。无需先掌握该哈希值。
|
哇,所以有很多方法可以做到这一点。
执行此操作的另一种方法是删除最后的提交,但保留其更改,以免丢失工作。然后,您可以使用更正后的消息再次提交。看起来像这样:
git reset --soft HEAD〜1
git commit -m'新的和更正的提交消息'
如果忘记添加文件或进行更改,我总是这样做。
记住要指定--soft而不是--hard,否则将完全丢失该提交。
|
对于正在寻找Windows / Mac GUI来帮助编辑较旧消息(即不仅是最新消息)的任何人,我建议使用Sourcetree。要执行的步骤在图像下方。
对于尚未推送到远程的提交:
确保您已提交或保存了所有当前更改(即,因此“文件状态”标签中没有列出文件)-否则将无法正常工作。
在“日志/历史记录”选项卡中,右键单击图形中您要编辑的提交下方的一条相邻行的条目,然后选择“以交互方式重新设置的子级...”
选择要更改的提交消息的整行(单击“消息”列)。
单击“编辑消息”按钮。
在出现的对话框中根据需要编辑消息,然后单击“确定”。
如果还有其他提交消息要更改,请重复步骤3-4。
单击“确定”:重新启动。如果一切顺利,输出将结束“成功完成”。注意:我有时会因无法创建'project_path / .git / index.lock'而失败:文件存在。尝试同时修改多个提交消息时。不确定确切的问题是什么,或者不确定它是否会在Sourcetree的将来版本中解决,但是如果发生这种情况,建议一次将其重新设置为基础(速度较慢,但​​似乎更可靠)。
...或者...对于已经推送的提交:
请遵循此答案中与上述类似的步骤,但是需要从命令行运行另一个命令(git push origin  -f)以强制推送分支。我建议您阅读所有内容并采取必要的警告!
|
如果只想编辑最新的提交,请使用:
git commit-修改
要么
git commit --amend -m'一行消息'
但是,如果要连续编辑多个提交,则应改用重新基准化:
git rebase -i <错误提交之前一次提交的哈希>
与上面的文件一样,在文件中编写edit / e或其他选项之一,然后单击保存并退出。
现在,您将处于第一个错误的提交。在文件中进行更改,它们将自动为您上演。类型
git commit-修改
保存并退出并输入
git rebase-继续
移至下一个选择,直到完成所有选择。
请注意,在特定的提交之后,这些操作会更改您的所有SHA哈希。
|
如果只想更改最后一条消息,则应使用--only标志或其快捷方式-o和commit --amend:
git commit --amend -o -m“新提交消息”
这样可以确保您不会意外地使用分阶段的东西来增强您的承诺。当然,最好具有适当的$ EDITOR配置。然后,您可以不使用-m选项,Git将使用旧的预填充提交消息。这样就可以轻松地对其进行编辑。
|
在一行中用新的提交消息更新您的最后一个错误的提交消息:
git commit --amend -m“您的新提交消息”
或者,尝试按以下方式重置Git:
#您可以将头重置为n次提交
#更改最后提交消息不是一个好主意,
#但您可以将想法分成多个提交
git reset --soft HEAD ^
#它将重置您的最后一次提交。现在轮到你
#可以使用新的提交消息重新提交它。
使用重置将提交拆分为较小的提交
git reset也可以帮助您将一个提交分解为多个提交:
#重头。我正在重置为最后的提交:
git reset --soft HEAD ^
#(您可以通过执行HEAD〜2(提交数量)来重置多个提交
#现在,重头转向将其拆分为多个提交
git reset HEAD
#分别添加和提交文件以进行多次提交:例如
git添加应用程序/
git commit -m“将所有文件添加到应用程序目录中”
git添加配置/
git commit -m“将所有文件添加到配置目录中”
在这里,您已成功将上一个提交分为两个提交。
|
关于这个问题,有很多答案,但是都没有一个非常详细地解释如何使用Vim更改旧的提交消息。我一直试图自己做这件事,所以在这里我将详细记述我是如何做到的,特别是对那些没有Vim经验的人!
我想更改我已经推送到服务器的五个最新提交。这是非常“危险的”,因为如果其他人已经从中退出,则可以通过更改提交消息来弄乱事情。但是,当您在自己的小分支上工作时,请确保没有人拉过它,您可以按以下方式进行更改:
假设您要更改最近的五个提交,然后在终端中键入以下内容:
git rebase -i HEAD〜5
* 5是要更改的提交消息数(因此,如果要将第10次更改为最后一次提交,请键入10)。
此命令将使您进入Vim,在那里您可以“编辑”您的提交历史记录。您将在顶部看到最后五次提交,如下所示:
选择提交消息
除了选择外,您还需要编写重写文字。您可以通过输入i在Vim中执行此操作。这使您可以进入插入模式。 (您会看到在底部的INSERT字样处于插入模式。)对于要更改的提交,请输入reword而不是pick。
然后,您需要保存并退出此屏幕。您可以先按Esc按钮进入“命令模式”(如果底部的“插入”一词消失了,则可以检查您是否处于命令模式)。然后,您可以通过键入:来键入命令。保存并退出的命令是wq。因此,如果您输入:wq,那么您的位置正确。
然后,Vim会遍历您要改写的所有提交消息,您实际上可以在此处更改提交消息。为此,您将进入插入模式,更改提交消息,进入命令模式,然后保存并退出。这样做五次,您就离开了Vim!
然后,如果您已经推送了错误的提交,则需要git push --force来覆盖它们。请记住,执行git push --force是一件非常危险的事情,因此请确保自您推送错误的提交以来,没有人从服务器中拉出!
现在,您已经更改了提交消息!
(如您所见,我对Vim并不了解,所以如果我使用错误的“行话”来解释正在发生的事情,请随时纠正我!)
|
您可以使用git-rebase-reword
它旨在以与--amend相同的方式编辑任何提交(不仅仅是最后一次)
$ git rebase-reword <提交或引用名>
它是基于对rebase交互式操作进行修改以修改提交的名称:“ reword”。请参阅此帖子和人-部分交互模式-
例子:
$ git rebase-reword b68f560
$ git rebase-reword HEAD ^
|
我已经添加了别名reci和recm来重新提交(修改)它。现在我可以使用git recm或git recm -m来做到这一点:
$ vim〜/ .gitconfig
[别名]
......
cm =提交
reci =提交-修改
recm =提交-修改
......
|
我意识到自己已经在提交中打错了。为了撤消操作,我执行了以下操作:
git commit --amend -m“ T-1000,高级原型”
git push --force
警告:强行推动您的更改将用您的本地分支覆盖远程分支。确保您不会覆盖任何您想要保留的内容。如果其他人与您共享分支,则在强制推送经过修改(重写)的提交时也要保持谨慎,因为如果他们拥有刚重写的提交的旧副本,则他们需要重写自己的历史记录。
|
我喜欢使用以下内容:
git状态
git添加--all
git commit -am“有关更改的消息在这里”
git pull <起源主>
git push <来源主控>
|
如果您尚未将代码推送到远程分支(GitHub / Bitbucket),则可以在命令行上更改提交消息,如下所示。
git commit --amend -m“您的新消息”
如果您在特定分支上工作,请执行以下操作:
git commit --amend -m“分支名称:新消息”
如果您已经用错误的消息推送了代码,则在更改消息时需要小心。也就是说,在您更改提交消息并尝试再次推送它之后,最终会遇到问题。要使其平滑,请按照下列步骤操作。
请先阅读我的完整答案,然后再做。
git commit --amend -m“分支名称:您的新消息”
git push -f origin分支名称#不是最佳实践。读下面为什么?
重要说明:直接使用强制推送时,可能会遇到其他开发人员在同一分支上工作的代码问题。因此,为了避免这些冲突,您需要在执行强制操作之前从分支中提取代码推:
git commit --amend -m“分支名称:您的新消息”
git pull origin分支名称
git push -f origin分支名称
这是更改提交消息(如果已被推送)的最佳实践。
|
不是您要找的答案?浏览标记为git的其他问题git-commit git-rewrite-history修改或提出您自己的问题。