我在提交信息中写错了内容。
我该如何修改这个信息呢?该提交还未被推送到服务器上。
我在提交信息中写错了内容。
我该如何修改这个信息呢?该提交还未被推送到服务器上。
git commit --amend
将打开您的编辑器,允许您更改最近一次提交的提交消息。此外,您可以使用以下命令在命令行中直接设置提交消息:
git commit --amend -m "New commit message"
然而,这会使得多行提交信息或小改动更加繁琐。
确保在进行此操作之前没有任何工作副本更改被暂存,否则它们也将被提交。(未暂存的更改不会被提交。)
如果您已经将提交推送到远程分支,则在本地修改提交(如上所述)后,您还需要强制推送提交:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -f
警告:强制推送将使用本地分支的状态覆盖远程分支。 如果远程分支上有您本地分支中没有的提交,那么您将会丢失这些提交。另一个选项是使用交互式变基。 这使您可以编辑任何您想要更新的消息,即使它不是最新的消息。
为了进行Git压缩,请按照以下步骤进行:
// n is the number of commits up to the last commit you want to be able to edit
git rebase -i HEAD~n
一旦您压缩了提交记录 - 选择e/r
以编辑消息:
当您使用git rebase -i HEAD~n
时,可能会有多于n个提交。 Git将“收集”最后n个提交中的所有提交,并且如果该范围内的某个位置存在合并,则还将显示所有提交,因此结果将为n +。
如果您需要对多个分支执行此操作,并且在修改内容时可能会遇到冲突,请设置git rerere
并让Git自动为您解决这些冲突。
git commit --amend
并不像git rebase -i
那样强大。 - Jeffrey Josegit commit --amend
可以修补主提交。 - stragergit push -f origin branchname
。 - hughesgit push -f
命令是不是有些危险? - Armandgit commit --amend -m "your new message"
git rebase --interactive $有瑕疵提交的父提交
如果您想要修复多个有瑕疵的提交,请传递其中最旧的提交的父提交。
一个编辑器将出现,并显示从您提供的那个提交以来的所有提交的列表。
pick
改为 reword
(或在旧版本的 Git 中改为 edit
)。对于每个您想要重写的提交,Git 将使您返回到您的编辑器。对于每个您想要编辑的提交,Git 会将您带到 shell 中。如果您在 shell 中:
git commit --amend
git rebase --continue
大部分的操作流程将通过各个命令的输出向您解释。这很容易;您不需要记住它 - 只需记住 git rebase --interactive
让您可以纠正任何时候的提交。
reword
替代 pick
来编辑提交日志信息。 - MitMaro要修改之前的提交,请进行您想要的更改并将这些更改暂存,然后运行:
git commit --amend
这将在文本编辑器中打开一个文件,该文件表示您的新提交消息。它最初使用旧的提交消息中的文本填充。按照您的需求更改提交消息,然后保存文件并退出编辑器以完成操作。
要修改先前的提交并保留相同的日志消息,请运行
git commit --amend -C HEAD
要通过完全删除之前的提交来修复问题,请运行
git reset --hard HEAD^
如果你想编辑多个提交信息,运行以下命令:
git rebase -i HEAD~commit_count
(用要编辑的提交次数替换commmit_count。)此命令会打开您的编辑器。 将第一个提交(您想要更改的那个)标记为“edit”而不是“pick”,然后保存并退出编辑器。 执行所做的更改,然后运行
git commit --amend
git rebase --continue
注意:你也可以通过由git commit --amend
打开的编辑器来“进行所需的更改”。
git rebase -i HEAD~commit_count
还可以让您更改所选提交的提交信息。只需将所选提交标记为“reword”而不是“pick”。 - Joegit reset --soft
可以撤销提交前的更改,而保留这些更改的内容在工作目录中。请将 --hard
替换为 --soft
。 - eel ghEEzgit reset --hard
是一个完全合法的命令,但在这个问题中使用它是具有误导性的。如果你想要丢弃提交的更改,则使用 --hard
,而不是在提交信息中犯了一个拼写错误时使用它! - Soren Bjornstadgit commit --amend -C HEAD
是黄金操作!谢谢。 - Rafael Nobre如前所述,git commit --amend
是覆盖上一个提交的方式。请注意:如果你也想覆盖文件,那么命令会是
git commit -a --amend -m "My new commit message"
git add file.ext
然后执行 git commit --amend
。 - MalcolmOcean你也可以使用git filter-branch
来实现。
git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD
这并不像一个简单的 git commit --amend
那样容易,但如果在你的错误提交信息之后已经有一些合并的话,它就会特别有用。
请注意,这将尝试重写从 HEAD
到有缺陷的提交之间的每个提交,所以你应该非常明智地选择你的 msg-filter
命令;-)
$flawed_commit^..HEAD
,而不是 $flawed_commit..HEAD
。正如 man page 所述:«_该命令只会重写命令行中提到的正向引用(例如,如果你传递 a..b,则只有 b 会被重写)_»。 - Ángel我更喜欢这种方式:
git commit --amend -c <commit ID>
否则,将会有一个新的提交和一个新的提交 ID。fatal: Option -m cannot be combined with -c/-C/-F/--fixup.
- Andrew Grimm如果你正在使用Git GUI工具,那么有一个名为Amend last commit的按钮。单击该按钮,它会显示您最后一次提交的文件和消息。只需编辑该消息,然后使用新的提交消息将其提交。
或者在控制台/终端中使用此命令:
git commit -a --amend -m "My new commit message"
您可以使用Git 变基。例如,如果要修改回到提交 bbc643cd,运行:
$ git rebase bbc643cd^ --interactive
$ git add <filepattern>
现在您可以使用
$ git commit --amend
修改提交后,然后...
$ git rebase --continue
返回到之前的主头提交。
git commit --amend
所做的更改生效,您可以使用 git show
命令,它将显示新的消息。 - Steve Tauber如果您只想修改最后一次提交的消息,则执行以下操作:
git commit --amend
这将使你进入文本编辑器,让你更改最后一次提交的消息。
如果你想要更改最近三次提交或者在那之前的任何提交消息,请向 git rebase -i
命令提供 HEAD~3
:
git rebase -i HEAD~3
git commit --amend
命令,还提到了可以使用 git rebase -i HEAD~commit_count
命令,你所做的只是将 3
替换了 commit_count
。请注意,此处不提供解释。 - user456814