场景
多个分支并行开发的情况下,将某次 commit提交错分支了,那么久需要从 A 分支将某次 commit 转移到 B 分支,可以这样操作。
操作
1、切换到 A 分支
git checkout A
2、查询 git 日志,找到错误 commit 的ID
git log
——————————————————————————————————————————
commit 74b1e990f409b2f75b46d6330a08af25ef76e164 (HEAD -> srm-20230324, origin/srm-20230324)
Author: 朝雾轻寒 <466595865@qq.com>
Date: Thu Apr 6 17:23:37 2023 +0800
如我的 commit 的ID 为 74b1e990f409b2f75b46d6330a08af25ef76e164 。
3、切换到B分支
git checkout B
4、将该 commit id pick 到正确分支
git cherry-pick 74b1e990f409b2f75b46d6330a08af25ef76e164
注意:git cherry-pick 后如果代码有冲突,先解决冲突,后 git push。
通过查询 git 日志,可以看到这个分支上已经有这个commit了,但是 commit id 却变了,所以这是拷贝,而不是转移,那么原来的还一定存在。
5、再切换到 A 分支
git checkout A
git log
会发现原来错误的 commit id 还是存在的,这时候把这个 commit 去掉。
6、去掉错误的 commit
如果 commit id 是最新提交的可以使用如下命令,可以毫无痕迹的去除:
git reset --hard ea2c8158e73bdea73e43dd18aa2678887a41c267 # 上一个commit id
git push -f origin srm-20230324 # 强行推送,需要谨慎
如果 commit id 是中间的某次 commit,那么使用 git revert 去回退即可,美中不足的是会增加一条 revert 记录。
评论区