拓冰建站拓冰建站
首页 / 资讯中心 / 正文

git 可以修改已经push上去的commit说明吗

可以的但是需要满足一定条件并且伴随强制推送Force Push的操作。在 Git 中Commit 是不可变的。修改 Commit 说明Message本质上是销毁旧的 Commit 并创建一个带有新 Hash 值的新 Commit。因此修改后必须使用强制推送才能覆盖远程仓库的历史。根据你要修改的 Commit 的位置分为以下两种情况情况一修改最近一次最新的 Commit 说明这是最常见的情况操作非常简单修改说明git commit --amend执行后会进入编辑器如 Vim 或 Nano直接修改里面的 Commit 说明保存并退出。(如果只想在命令行直接修改可以使用git commit --amend -m 新的commit说明)强制推送到远程git push --force-with-lease情况二修改历史非最新的 Commit 说明如果要修改倒数第二次或更早的 Commit需要使用交互式变基Interactive Rebase启动交互式 rebase 找到你要修改的那个 Commit 的 Hash 值可以通过git log查看然后执行git rebase -i 你要修改的commit-hash^注意末尾的^符号不能漏它代表该 Commit 的前一个 Commit。或者你也可以用git rebase -i HEAD~NN 代表往回数第几个 Commit。标记需要修改的 Commit 此时会打开一个文本编辑器列出相关的 Commit 列表。找到你要修改的那一行将最前面的pick改为reword或简写为rpick abc1234 第一个commit说明 reword def5678 我要修改的这个commit说明 -- 把 pick 改成 reword pick ghi9012 第三个commit说明保存并退出编辑器。修改 Commit 说明 Git 会依次弹出编辑器让你修改标记为reword的 Commit 说明。修改完成后保存退出Rebase 过程就会继续直到完成。强制推送到远程git push --force-with-lease⚠️ 极其重要的注意事项必读绝对不要在公共分支上修改已 Push 的 Commit如果这个分支是多人协作的公共分支如main、master、develop且其他人已经基于你 Push 的 Commit 进行了开发你的强制推送会改变 Commit 的 Hash 值导致其他人的本地历史与远程历史产生严重冲突引发灾难。结论只在属于你个人的特性分支Feature Branch或尚未合并的分支上修改已 Push 的 Commit。使用--force-with-lease代替-f很多教程会教你用git push -f--force但这非常危险它会无脑覆盖远程分支。 强烈建议使用git push --force-with-lease。它会在推送前检查远程分支是否有别人刚 Push 的新代码如果有它会拒绝推送从而防止你不小心覆盖掉同事的代码。如果不小心在公共分支改错了怎么办如果你已经在公共分支强制推送了且影响了他人可以通过git reflog找到强制推送前的旧 Commit Hash然后使用git reset --hard 旧hash回退再次强制推送恢复原状并立刻通知团队成员重新拉取代码。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门