使用场景:当我们将代码提交到错误的分支,我们想要把提交删除或者想要把提交应用到其他分支中,就可以使用下面两种方式来解决了。
- 方式一可以解决直接在当前分支删除错误的提交记录。
- 方式二可以解决删除错误提交记录(间接删除,重新设置一个分支),并将错误提交记录应用到其他分支。
方式一:使用git rebase -i commitid
,打开交互模式,直接修改git提交记录
先通过git rebase -i commitid
切换到删除commit的前一个commitid。-i
表示要进行交互式 rebase,<commit-hash>^
表示要删除指定提交及之后的提交。这将打开一个文本编辑器,列出了要进行 rebase 的提交。
这样他只是删除了本地的记录,但是并没有更新远程仓库。
所以我们需要强制当前记录提交
git push origin <branch> --force
如果直接执行git push
他会告诉你需要拉取最新代码。如果执行了git pull
前面做的工作就没用了。所以我们需要使用--force
强制提交。
注意:最后git push
一定要强制提交,不然按照他的提示拉取了远程代码,那么前面做的内容都没用了。
使用git rebase -i commitId
可以在编辑区域操作很多内容,比如合并commit。
感兴趣的也可以了解一下其他的操作。
方式二:使用git checkout -b commitId
创建分支 + git cherry-pick commitIds
如果不了解git cherry-pick,可以学习阮一峰老师的讲解。
首先我们需要使用git checkout -b commitId
基于当前提交创建一个新分支。然后再使用git cherry-pick commitIds
将错误提交分支之前中的commit合并过来。然后再将错误commit合并到其他分支上面。
如果你在操作时,git cherry-pick报错,解决办法。
git cherry-pick
命令通常用于将单个提交从一个分支应用到另一个分支。然而,当您尝试 cherry-pick 一个合并提交(merge commit)时,git 会报错并要求您提供 -m
选项,以指定您要选择哪个父提交。
合并提交有多个父提交,因为它们是两个或更多个不同的分支的合并点。所以,您需要告诉 git 从哪个父提交中选择更改。-m
选项后面应该跟着一个数字,表示您要选择哪个父提交。
通常,-m 1
表示选择第一个父提交,-m 2
表示选择第二个父提交,依此类推。可以通过git show <hash>
来查看提交commitId。
例如,如果您有一个合并提交,并希它选择第一个父提交的更改,可以这样运行 git cherry-pick
:
git cherry-pick -m 1 <合并提交的SHA>
请注意,这个选项仅适用于合并提交,对于普通的单一提交,不需要使用 -m
选项。只有在 cherry-pick 合并提交时才需要指定父提交。
这里就是简单介绍一下思路,如果工作中遇见了就可以这样操作试一试。
往期年度总结
往期文章
- 众多跨标签页通信方式,你知道哪些?(二)
- 众多跨标签页通信方式,你知道哪些?
- 反调试吗?如何监听devtools的打开与关闭
- 因为原生,选择一家公司(前端如何防笔试作弊)
- 结合开发,带你熟悉package.json与tsconfig.json配置
- 如何优雅的在项目中使用echarts
- 如何优雅的做项目国际化
- 近三个月的排错,原来的憧憬消失喽
- 带你从0开始了解vue3核心(运行时)
- 带你从0开始了解vue3核心(computed, watch)
- 带你从0开始了解vue3核心(响应式)
- 3w+字的后台管理通用功能解决方案送给你
- 入职之前,狂补技术,4w字的前端技术解决方案送给你(vue3 + vite )
专栏文章
结语
本篇文章到此就结束了,欢迎在评论区交流。
🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论, 支持一下博主~
原文链接:https://juejin.cn/post/7350123500936462386 作者:Spirited_Away