如何修改现有的,未删除的提交?
我在提交消息中写了错误的东西.或者,我忘了包含一些文件.
如何更改提交消息/文件?提交尚未被推送.
回答
修改最新的提交消息
git commit --amend
将打开您的编辑器,允许您更改最近提交的提交消息.此外,您可以在命令行中直接设置提交消息:
git commit --amend -m "New commit message"
...但是,这可能使多行提交消息或小修正更加麻烦.
确保你没有任何工作副本的修改上演这样做,否则它们可能会犯太多了.(未分级变化将不会提交.)
更改已经推送到远程分支的提交消息
如果您已经将提交推送到远程分支,那么您需要强制推送提交:
git push <remote> <branch> --force
# Or
git push <remote> <branch> -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
编辑消息
关于交互式rebase的重要说明
当您使用git rebase -i HEAD~X
可以有更多的比X
的提交.Git将"收集"上次提交中的所有X
提交,如果在该范围之间的某处有合并,您将看到所有提交,因此结果将是X +.
好提示:
如果您必须为多个分支执行此操作,并且在修改内容时可能会遇到冲突,请设置git rerere
并让git自动为您解决这些冲突.
文档
- 但是`git commit --amend`和`git rebase -i`一样强大.
- 如果其他人使用相同的存储库,@ hughes不是`git push -f`有点危险吗?
- 如果你已经推动了,只需再次强制推动:`git push -f origin branchname`
- 如果您不想重写整个提交消息,请转到``git commit --amend -c HEAD``.这将打开预先填充旧提交消息的编辑器,以便您可以更改它.
- @jeffjose,绝对不需要.另外,`git commit --amend`可以修复(a?)主提交.
- 如果你只输入`git commit --amend`,那么@Sam所说的内容似乎也有效.
- 但是,**不要修改已经共享的提交**!
- 只是一点点细节.如果在执行阶段性更改(添加了`git add`)时执行`git commit --amend`,它们将成为修改提交的一部分.这对于添加您忘记登台的更改或删除很有用(通常我在删除文件时忘记了`git add`命令中的-A选项)
- @hughes不要强行推送到其他人正在使用的存储库而不先警告它们!否则,当他们再次尝试获取时会导致奇怪的冲突.如果那个人不知道他/她在做什么,他们可能会错误地解决冲突,然后推*那*,这将进一步搞砸了存储库.
- @ guillegr123,不,正确的术语是,或者至少曾经是分支的"小费".
- 如果这个答案还提到编辑一个不是最新的提交消息,那就太好了.即,它应该包括这个[答案](http://stackoverflow.com/a/180085/1659403).
git commit --amend -m "your new message"
- 我不知道答案看起来很像两年前写的答案的主要想法,而且接受的答案得到了如此多的选票.奇怪.(虽然答案没有错)
- @Kyralessa不是真的.在bash中,您可以轻松地组合多行提交消息,只需在完成之前不关闭报价(在报价中的每一行的末尾点击返回).
- 我做了git commit --amend -m"新消息",但推送到Github生成了"在再次推送之前合并远程更改".在pull,commit --amend和再次推送之后,新消息不会出现.相反,我有"github.com的合并分支'大师':[myrepo]"
- @DaveEveritt你很可能在尝试修复它之前推送你的提交.
- @AmalMurali,好吧.我的观点不在于问题的普及程度,也不在于答案的实用性.但是这个特殊答案并不是最古老的答案,也没有提供对已接受答案的任何进一步了解.它似乎是已接受答案的一部分的副本.这是我的观点.干杯!
- @happycoder:因为这个问题非常受欢迎,并且谷歌(以及许多其他搜索引擎)首次涉及许多与git相关的术语.人们发现它很有用.
如果要修复的提交不是最新的提交:
-
如果要修复多个有缺陷的提交,请传递最旧的提交的父级.
-
- 在要修复的任何提交之前更改
pick
为reword
(或旧版本的Gitedit
). - 保存后,Git将重播列出的提交.
- 在要修复的任何提交之前更改
-
- 以您喜欢的任何方式更改提交.
git commit --amend
git rebase --continue
大多数此序列将通过各种命令的输出向您解释.这很容易,你不需要记住它 - 只要记住,git rebase --interactive
无论多久以前它都能让你正确提交.
请注意,您不希望更改已推送的提交.或者也许你这样做,但在这种情况下,你必须非常谨慎地与每个可能已经完成提交并完成工作的人进行沟通.在有人推送rebase或重置到已发布的分支后,如何恢复/重新同步?
- 顺便说一句,`$ parent_of_flawed_commit`相当于`$ flawed_commit ^`.
- 如果你已经向上游推进,那么永远都不要这样做(或者一般来说是反叛的)!
- 可以更改第一次提交的消息(没有父级)吗?
- 在其他一个答案中提到了这一点,但我将在此处记下它.从git 1.6.6开始,您可以使用`reword`代替`pick`来编辑日志消息.
- 如果在有缺陷的提交之后存在合并,请使用`-p`(` - preserve-merges`).
- @pingu:不,你不会失去任何提交日期.
- 另外,`$ parent_of_flawed_commit`的意思是"在你搞砸之前提交":)
- 使用`--root`而不是提交哈希.
- @13ren 您可能已经找到了答案,但这可能对其他人有所帮助(我没有看到对您评论的回复)。http://stackoverflow.com/questions/2246208/change-first-commit-of-project-with-git
要修改先前的提交,请进行所需的更改并暂存这些更改,然后运行
git commit --amend
这将在文本编辑器中打开一个表示新提交消息的文件.它首先填充旧提交消息中的文本.根据需要更改提交消息,然后保存文件并退出编辑器以完成.
要修改先前的提交并保留相同的日志消息,请运行
git commit --amend -C HEAD
要通过完全删除它来修复先前的提交,请运行
git reset --hard HEAD^
如果要编辑多个提交消息,请运行
git rebase -i HEAD~commit_count
(将commit_count替换为您要编辑的提交数.)此命令将启动编辑器.将第一个提交(您要更改的提交)标记为"编辑"而不是"选择",然后保存并退出编辑器.进行您要提交的更改,然后运行
git commit --amend
git rebase --continue
注意:您也可以从打开的编辑器中"进行所需的更改" git commit --amend
- `git rebase -i HEAD~commit_count`也允许你更改你选择的多次提交的提交消息.只需将所选提交标记为"reword"而不是"pick".
- Agreed, `git reset --hard` is a perfectly legitimate command, but it is misleading given the question. You use `--hard` if you committed changes you want to throw away, not if you made a typo in the commit message!
- 如果你不想变基怎么办?您只想更改较旧的消息?
- git reset --hard消灭未提交的更改。请用--soft代替--hard。
如前所述,git commit --amend
是覆盖最后一次提交的方法.一个注意事项:如果您还想覆盖文件,那么命令就是
git commit -a --amend -m "My new commit message"
- 如果您不想添加所有内容,则可以先执行git add file.ext,然后执行git commit --amend。
你也可以使用git git filter-branch
.
git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD
它并不像琐碎那么容易git commit --amend
,但如果你在错误的提交消息之后已经有一些合并,它就特别有用.
请注意,这将尝试重写每次提交HEAD
和有缺陷的提交,所以你应该msg-filter
非常明智地选择你的命令;-)
- @Mark是的他们这样做,他们是必须的.提交ID取决于先前的提交.如果他们没有改变,git将毫无用处.
- 如果正则表达式没有找到任何内容,是否有一个版本不会更改提交?
- @DavidHogue只有在使用filter-branch方法时才会这样.如果使用交互式rebase,则修改后的提交后的提交ID不会更改.
- AFAIK filter-branch --msg-filter在任何情况下都会生成新的提交.但是,您可以在msg-filter中检查,如果sed成功并在filter-branch操作结束时使用此信息将树重置为refs/original.
- 你需要`$flawed_commit^..HEAD`,而不是`$flawed_commit..HEAD`。如手册页所述:«_该命令只会重写命令行中提到的正引用(例如,如果您通过 a..b,则只会重写 b)。_»
我更喜欢这种方式.
git commit --amend -c <commit ID>
否则,将有一个带有新提交ID的新提交
- 修改_always_会使用新的提交ID创建新的提交.提交ID是提交内容的SHA哈希,包括提交消息和创作/提交的时间戳.这是Git的一个特性,它禁止散列冲突,确保具有相同ID的两个提交完全相同,具有完全相同的内容,历史记录等.
- 对我来说,使用上面的命令实际上创建了一个新的提交,其中包含一个新的提交ID以及另一个提交,称"合并分支"作为默认提交消息.
- 同意埃米尔.另外,阅读文档 - 似乎所有"-c"都告诉git哪个提交的消息用作新提交的默认/模板.实际上它已经默认执行"-c <commit ID>" ,所以不需要指定它.
- `-c`做了一些事情.它默认使用旧消息,但它也复制作者信息(人和时间).`-C`做同样的事情,除了它不要求你编辑消息.
如果您使用的是Git GUI工具,则会有一个名为modify last commit的按钮.单击该按钮,然后它将显示您上次提交的文件和消息.只需编辑该消息,您就可以使用新的提交消息进行提交.
或者从控制台/终端使用此命令:
git commit -a --amend -m "My new commit message"
- 这个答案从字面上看与[旧版本](/sf/ask/12538641/#6258114)相同。在提供另一个答案之前,您是否已经检查了现有答案?
你可以使用Git rebasing.例如,如果要修改回提交bbc643cd,请运行
$ git rebase bbc643cd^ --interactive
在默认编辑器中,将"pick"修改为要修改其提交的行中的"edit".进行更改,然后进行演示
$ git add <filepattern>
现在你可以使用了
$ git commit --amend
修改提交,然后修改
$ git rebase --continue
返回上一个头部提交.
-
git commit --amend
这将使您进入文本存储器并让您更改最后一次提交消息.
-
git rebase -i HEAD~3
- [这个早先的答案](http://stackoverflow.com/a/7070976/456814)已经说过你可以使用`git commit --amend`,它也说你可以使用`git rebase -i HEAD~commit_count `,你所做的只是为`commit_count`插入`3`.
如果您必须在多个分支上更改旧的提交消息(即,多个分支中存在错误消息的提交),您可能希望使用:
git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all
Git将创建一个临时目录,用于重写和另外备份旧引用refs/original/
.
由于旧引用的备份,您可以在执行命令之前轻松返回状态.
说,您想要恢复您的主人并在分支中访问它old_master
:
git checkout -b old_master refs/original/refs/heads/master
- 这个答案没有解决OP的问题,因为他们纯粹对修复他们刚刚完成的提交感兴趣.我经常使用`git commit --amend`来修复注释或添加我忘记了`git add`的文件,但只有*在*git push`之前.当我想完全搞乱版本历史时我也使用`git filter-branch`,但是OP不想要这个,所以这个答案需要一个很大的健康警告 - 不要在家里试试,偷看!!
使用
git commit --amend
要详细了解它,一篇优秀的文章是4.重写Git历史.它还谈到何时不使用 git commit --amend
.
- 有没有一种很好的方法来修复已经推送到公共存储库的提交消息?到目前为止,我已经得出结论,一旦推动,我的提交消息拼写错误和thinkos必须永远存在.
- 总之,NOPE!没有好的方法来收回你所推动的东西.所有的撤回都或多或少都是不利的.您需要采用在您自己的私有存储库中的分支中工作的规则,在添加一点时进行多次提交,稍微测试一下,稍微调整一下.然后将整个分支合并到一个提交中,写一个描述整体更改的新提交消息,PROOFREAD它和push.
修改
你有几个选择.你可以做
git commit --amend
只要这是你的最后一次提交.
交互式变革
否则,如果它不是你的最后一次提交,你可以做一个交互式的rebase,
git rebase -i [branched_from] [hash before commit]
然后在交互式rebase中,您只需向该提交添加edit.当它出现时,执行a git commit --amend
并修改提交消息.如果要在该提交点之前回滚,您也可以使用git reflog
并删除该提交.然后你再做git commit
一次.
如果您使用的是Git GUI,则可以修改最后一次未被推送的提交:
Commit/Amend Last Commit
如果这是你的最后一次提交,只需修改提交:
git commit --amend -o -m "New commit message"
(使用-o
(--only
)标志确保仅更改提交消息)
如果它是埋藏的提交,请使用令人敬畏的交互式rebase:
git rebase -i @~9 # Show the last 9 commits in a text editor
找到所需的提交,更改pick
为r
(reword
),然后保存并关闭文件.完成!
微型vim教程(或者,如何只用8次击键来重新定义3j
cw
r
EscZZ
):
-
vimtutor
如果你有时间,请跑 -
h
j
k
l
对应于移动键 ←↓↑→ - 所有命令都可以以"范围"为前缀,例如
3j
向下移动3行 -
i
进入插入模式 - 您键入的文本将出现在文件中 -
Esc或Ctrl
c
退出插入模式并返回"正常"模式 -
u
撤销 -
Ctrl
r
重做 -
dd
,dw
,dl
删除线,字或字母,分别 -
cc
,cw
,cl
以改变线,字或字母,分别为(相同dd
i
) -
yy
,yw
,yl
复制("抽出")的线,字或字母,分别 -
p
或P
分别在当前位置之后或之前粘贴 -
:w
Enter 保存(写入)文件 -
:q!
Enter 退出而不保存 -
:wq
Enter或者ZZ
保存并退出
如果你经常编辑文本,那么切换到Dvorak键盘布局,学习触摸式,并学习vim.值得努力吗?是.
ProTip™:不要害怕尝试重写历史记录的"危险"命令* - Git默认情况下不会删除你的提交90天; 你可以在reflog中找到它们:
$ git reset @~3 # Go back three commits
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~3
2c52489 HEAD@{1}: commit: more changes
4a5246d HEAD@{2}: commit: make important changes
e8571e4 HEAD@{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started
*注意喜欢--hard
和选择的选项--force
- 他们可以丢弃数据.
* 此外,不要在您正在协作的任何分支上重写历史记录.
- vim 部分完全是题外话,与其鼓励用户花时间学习使用神秘的编辑器,不如教他们一些更切题的东西,比如如何将默认的 git 编辑器设置为用户友好的东西,比如`纳米`?我们谈论的是需要对文本文件进行的微不足道的修改,而不是会引发关于“最佳”文本编辑器的火焰战争的硬核编码。
- @DanDascalescu:因为使用上述说明学习 Vim 比使用 nano 执行多次变基更快。git 打开一个文本编辑器而不是它自己的 rebase 界面的全部原因是因为 Vim 存在:它是轻量级的,默认安装在大多数系统上,并且非常容易学习以轻松执行 rebase:例如,`ddjjpZZ` 移动提交2下。基本的 Vim 知识没有什么神秘的;使用 Vim 比使用 nano 需要 10 分钟。
我尽可能多地使用Git GUI,这使您可以选择修改上次提交:
此外,这git rebase -i origin/master
是一个很好的口头禅,它将始终为您提供您在master上完成的提交,并为您提供修改,删除,重新排序或压缩的选项.无需先获取该哈希值.
- 如何进入示例中显示的屏幕?
- 它是 Windows Git Gui 的右下部分。只需选择“修改上次提交”开关,它就会填充最新的提交信息。
哇,所以有很多方法可以做到这一点.
另一种方法是删除最后一次提交,但保留其更改,这样您就不会丢失工作.然后,您可以使用更正的消息进行另一次提交.这看起来像这样:
git reset --soft HEAD~1
git commit -m 'New and corrected commit message'
如果我忘记添加文件或进行更改,我总是这样做.
请记住指定--soft
而不是--hard
,否则您将完全失去该提交.
- 这与`git commit --amend`完全相同,只是它是一个两步过程.
- @ JosephK.Strauss我相信修改提交还会保留原始提交作者和日期信息,并分别拥有新提交者和日期信息。我不确定这种方法能做到这一点。
- @EvertonAgner你是对的。“ --amend”将保留作者信息,但问题仅要求更改消息。
对于任何寻找Windows/Mac GUI以帮助编辑旧消息(即不仅仅是最新消息)的人,我建议使用SourceTree.要遵循的步骤如下.
对于尚未推送到远程的提交:
- 确保您已提交或隐藏所有当前更改(即"文件状态"选项卡中未列出任何文件) - 否则将无法正常工作.
- 在"日志/历史记录"选项卡中,右键单击要编辑的提交下方图形中相邻行的条目,然后选择"以交互方式重新生成<commit ref>的子项 ..."
- 选择要更改的提交消息的整行(即单击"消息"列).
- 单击"编辑消息"按钮.
- 在出现的对话框中根据需要编辑消息,然后单击"确定".
- 如果要更改其他提交消息,请重复步骤3-4.
- 单击"确定":将重新开始重新定位.如果一切顺利,输出将结束"已成功完成".
......或者......对于已被推送的提交:
按照本答案中的步骤进行操作,这些步骤与上述类似,但需要从命令行运行另一个命令来强制推送分支 - 全部阅读并应用必要的注意事项!
如果您只想编辑最新的提交使用:
git commit --amend
要么
git commit --amend -m 'one line message'
但是如果你想连续编辑几个提交,你应该使用rebasing代替:
git rebase -i <hash of one commit before the wrong commit>
在上面的文件中写入编辑/ e或其他选项之一并点击保存并退出.
现在你将处于第一次错误的提交.对文件进行更改,它们将自动为您播放.类型
git commit --amend
保存并退出并键入
git rebase --continue
移动到下一个选择,直到完成所有选择.
请注意,这些内容会在特定提交后更改所有SHA哈希值.
- git rebase -i <hash of one commit before the wrong commit> 对我有用。谢谢。
如果你只是想改变你的最后一条消息,你应该使用的--only
标志或它的快捷方式-o
有commit --amend
:
git commit --amend -o -m "New commit message"
这可以确保您不会意外地使用分段内容增强您的提交.当然最好有一个合适的$EDITOR
配置.然后你可以退出-m
选项,git会用旧的预先填充提交消息.通过这种方式,它可以轻松编辑.
- 也就是说你可以自由编辑最佳答案,因为人们正在使用它作为"正确"的答案.很容易发生修改你的提交与阶段的东西 - 它发生在我身上,当你碰巧推动它时,它真的很烦人.但是,数量并不能保证正确性.无论是答案数量还是票数.
- 公平地说:即使从 git 1.3.0 开始可以使用带有 `--amend` 的 `--only` 选项,但它在 1.7.11.3 中修复之前无法正常工作([ea2d4ed35902ce15959965ab86d80527731a177c](https://github .com/git/git/commit/ea2d4ed35902ce15959965ab86d80527731a177c))。所以 2008 年的正确答案可能是这样的:`git stash; git commit --amend; git stash pop`。
使用一行中的新提交消息更新上次错误的提交消息:
git commit --amend -m "your new commit message"
或者,尝试git reset,如下所示:
# You can reset your head to n number of commit
# NOT a good idea for changing last commit message,
# but you can get an idea to split commit into multiple commits
git reset --soft HEAD^
# It will reset you last commit. Now, you
# can re-commit it with new commit message.
使用reset将提交拆分为较小的提交
git reset
可以帮助您将一个提交分成多个提交:
# Reset your head. I am resetting to last commits:
git reset --soft HEAD^
# (You can reset multiple commit by doing HEAD~2(no. of commits)
# Now, reset your head for splitting it to multiple commits
git reset HEAD
# Add and commit your files separately to make multiple commits: e.g
git add app/
git commit -m "add all files in app directory"
git add config/
git commit -m "add all files in config directory"
在这里,您已成功将最后一次提交分成两次提交.
- 如果你想要做的是编辑您的最后的消息提交,使用软重置为目的**过杀**.只要使用`git的承诺--amend`,**一模一样它怎么说的[顶投票答案](http://stackoverflow.com/a/179147/456814)**.此外,`git的复位--soft HEAD ^`同样工作在[这个较早前的答复(http://stackoverflow.com/a/20338254/456814),因为它们都重新回到第一个父提交软复位.
- 我只想在解决方案中添加```git reset```,只是想把一个提交消息拆分成多个提交消息.因为,当我开始使用```git```时,我遇到了这个问题.有时,这可能真的有用.:)
在这个问题上有很多答案,但没有一个能够详细解释如何使用VIM更改旧的提交消息.我自己一直试图这样做,所以在这里我会详细写下我是如何做到的,尤其是那些没有VIM经验的人!
我想改变我已经推送到服务器的五个最新提交.这是非常"危险"的原因,如果其他人已经从中撤出,你可以通过更改提交消息搞砸了.但是当你在你自己的小分支上工作并且确定没有人拉它时你可以改变它:
假设您要更改五个最新提交,然后在终端中键入:
pick
*其中5是您要更改的提交消息数.(所以如果你想改变你输入的第10个到最后一次提交10)
此命令将使您进入VIM,您可以"编辑"您的提交历史记录.你会看到最后5个提交在顶部,如下所示:
reword
而不是i
你需要写reword
.您可以通过输入来在VIM中执行此操作pick
,这将使您进入INSERT模式.(您可以通过底部的INSERT一词看到您处于插入模式)对于要更改的提交,请键入:
而不是wq
然后你需要保存并退出这个屏幕,你可以先按下esc按钮进入'命令模式'.(如果底部的INSERT单词已经消失,你可以检查你是否处于命令模式)然后你可以输入一个命令:wq
,保存和退出命令git push --force
.因此,如果你打字,git push --force
他就是正确的.
然后VIM将遍历您想要重写的每个提交消息,在这里您可以实际更改提交消息.您将通过进入INSERT模式,更改提交消息,进入命令模式并保存并退出来执行此操作.这样做5次,你就离开了VIM!
然后,如果您已经推送了错误的提交,则需要pick
覆盖它们.请记住,这reword
是一件非常危险的事情,所以请确保自推送错误提交后没有人从服务器中拔出!
现在您已经更改了提交消息!
(如你所见,我在VIM中没有经验,所以如果我用错误的'lingo'来解释发生了什么,请随时纠正我!)
- `<nitpick>`Stack Overflow上没有"线程",因为它不是一个讨论论坛,只有"问题","答案"和"帖子".` </ nitpick>`.此外,并非所有Vim版本都相同,并非所有版本的Vim都允许您在插入模式下删除字符(在某种程度上是有道理的,对吧?).如果你想总是能够删除Vim中的字符,`X`和`x`就会这样做(小`x`删除光标前面的字符,'X`将在后面删除).如果你犯了错误,你可以反复使用`u`来撤消.最后,`r`是交互式rebase编辑器中`reword`的简写.
你可以使用git-rebase-reword
它旨在编辑任何提交(不仅仅是最后一次) commit --amend
$ git rebase-reword <commit-or-refname>
它以rebase交互操作命名,以修改提交:"reword".看这篇文章和man -section交互模式 -
例子:
$ git rebase-reword b68f560
$ git rebase-reword HEAD^
- 这需要安装外部程序.在我看来,学会更有效地使用内置工具和别名会更好.我会输入:`gc; g rb -i @ ~9`(commit and rebase),将新提交移动到我想要的位置,将`commit`更改为`f`(`fixup`),然后保存.如果你想要比这更快的东西,你可以别名`git commit --fixup = <commit>; git rebase -i --autosquash <commit> ^`
我添加了别名reci
,recm
为此recommit (amend)
,现在我可以使用git recm
或git recm -m
.
$ vim ~/.gitconfig
[alias]
......
cm = commit
reci = commit --amend
recm = commit --amend
......
我意识到我已经推了一个错误的提交.为了撤消,我做了以下事情:
git commit --amend -m "T-1000, advanced prototype"
git push --force
警告:强制推送您的更改将覆盖您的本地更改远程分支.确保您不会覆盖任何您想要保留的内容.如果其他人与你共享分支,也要谨慎推动修改(重写)提交,因为如果他们拥有你刚刚重写的提交的旧副本,他们将需要重写他们自己的历史记录.
- 在git中没有任何东西被"覆盖".在这种情况下,分支指针将被设置为您的新提交,如果没有任何引用,旧提交将变得陈旧,并且几周后它可能会被清除.(在此之前,其他人仍然可以找到并引用它,例如通过查看reflog.)
我喜欢使用以下内容:
git status
git add --all
git commit -am "message goes here about the change"
git pull <origin master>
git push <origin master>
如果您尚未将代码推送到远程分支(GitHub/Bitbucket),则可以在命令行上更改提交消息,如下所示.
git commit --amend -m "Your new message"
如果您正在处理特定分支,请执行以下操作:
git commit --amend -m "BRANCH-NAME: new message"
如果您已经使用错误的消息推送了代码,则在更改消息时需要小心.也就是说,在您更改提交消息并尝试再次推送它之后,您最终会遇到问题.要使其顺利,请按照下列步骤操作.
在做之前请先阅读我的整个答案.
git commit --amend -m "BRANCH-NAME : your new message"
git push -f origin BRANCH-NAME # Not a best practice. Read below why?
重要说明:直接使用强制推送时,最终可能会遇到其他开发人员在同一分支上工作的代码问题.因此,为了避免这些冲突,您需要在强制推送之前从分支中提取代码:
git commit --amend -m "BRANCH-NAME : your new message"
git pull origin BRANCH-NAME
git push -f origin BRANCH-NAME
这是更改提交消息时的最佳做法(如果已经推送).