git已merge到master分支代码如何回退(多人共同合并)
- 场景
- 已经被同事代码覆盖的解决方案(无需强制合并权限)
- 代码revert后又需要重新启用怎么办
- 如果是未受保护分支代码的回退且只有你一人合并的代码 可以直接使用下面的命令即可
- 如果只是commit没有push 剔除错误commit的方法
- 如何查看commitId
场景
master分支自己开发的需求branch_a已经合并push,但是代码出现错误或者暂时不需要上线,此时同事A,与B 都在这之后提交了代码,怎么办。(master分支受保护不能回退,即使可以回退也需要联系已合并分支代码的同事重新合并,比较麻烦且容易出错)。楼主这边合并的代码涉及到第三方一起上线,因为比较紧急的回滚,所幸改动不大,就重新new分支,把改动的部分先剔除掉重新上线。回过头来找解决方案。
已经被同事代码覆盖的解决方案(无需强制合并权限)
git revert a6d1c4b5(回退版本的commitid 一般输前5位即可)
该命令是剔除非合并分支代码的commit,如果是 合并提交 的commit 需使用下面这条。(什么是合并分支 合并分支即为合并某个分支后在master生成的commit)
git revert -m 1 a6d1c4b5(回退版本的commitid 一般输前5位即可)
-m 后面一般填1 即可,1 代表merge前master分支代码的最后一次快照。2代表merge分支的上一次commit快照。git revert 做的是剔除哪俩个commit版本之间的改动,当然是回到merge前的最后一次快照。如果还不懂,可看这篇点这里
// 获取当前 合并提交 commit的父分支
git cat-file -p [MERGE_COMMIT_ID]将按顺序显示父分支。列出的第一个-m 1是第二个-m 2。
代码revert后又需要重新启用怎么办
使用 git revert 命令重新提交剔除后的代码,可是开发的需求还在commit2上面,这个时候在合并之前的分支会提示没有更改的东西,因为之前的commit已经提交过了。这个时候怎么办呢 revert revert的commitId即可
git revert commit5(图内的第五次提交)
如果是未受保护分支代码的回退且只有你一人合并的代码 可以直接使用下面的命令即可
git reset --hard a6d1c4b5(回退版本的commitid 一般输前5位即可)
// 强制提交
git push -f
该命令会将本地分支代码回退到指定的commitId ,然后需要强制重新提交。适用于快速回退的那种情况
详细可以了解 git撤销已push的代码
楼主拿下图举例,如果commit3和commit4都是提交的错误代码 直接
git reset --hard commit2Id 本地分支代码就会回到commit2的版本。
之后 git push -f 强制提交就可以了。不过这样做的话commit3和commit4提交的代码就会丢失。做之前先备份一次分支。
本命令适用于自己一个人开发或者目前只有自己提交代码的分支(如果是master分支,不能 git push -f 强制提交,如果已经提交到master分支且不能强制提交的情况不适用)
如果只是commit没有push 剔除错误commit的方法
git reset --soft a6d1c4b5(回退版本的commitid 一般输前5位即可)
**该命令适用于还没有提交到远端分支的情况。**在提交代码的时候,commit之后,然后我又在工作区添加了东西,这时候突然发现,上一次的commit有错误的文件,需要重新修改,但是我添加的东西又不想丢失,而且我想修改上一次的提交,这时候可进行git reset --soft 版本号
如图所示,git reset --soft commit2 后,commit3和commit4代码还会在本地,只是撤销了commit,最终再提交就变成commit5。这个命令不会丢失代码。但是如果代码已经合并到远程分支就需要用到git pull(解决冲突后提交)或者git push -f 强制提交。
如何查看commitId
如何查看commitid
希望本文可以帮到你。