很经常遇到涉及到多人协作,在公共分支开发的一些需求,但总会看到 merge(这个还好理解🤏一点点),回退,强推(黑人问号.jpg)等比较诡异的 git 操作。
所以给大家分享一下我的做法,比较干净,保证后人使用丝滑,对追求 git 节点顺畅的人比较友好,可以放心食用。
- 每次代码提交后到再次进行改动前,记得记得记得先
git pull
- 本地代码发生改动进行提交,🚶老三部曲:
git add .
git commit -m 'feat: xxx'
git push
- 以上如果没有冲突,那,那我这篇文章就白写了🙄️
- 还是有冲突吧,我就说有。精华来了:
-
git log
拿到当前你的刚提交的 commit id -
git reset --hard HEAD^
(hard 表示强制回退,HEAD后面加^或者~表示回退一个版本,即一个 commit ,也即回到本地未改动前的那个 commit) -
git pull
拉取线上最新代码(如果线上公共分支没有发生回退之类的会引起节点变化的改动,这将是成功的 pull,否则 pull 可能会有冲突)- 如果有冲突,执行
git reset --hard <commit id>
或git reset —hard HEAD~<n>
( n 代表任意数字,也可以用 HEAD^^^^^,几个 ^ 就表示回退几步),这里自己把握,只要确定这个commit之后不会冲突就行 - 再执行
git pull
- 如果还冲突,再回到以上1步骤,直到不冲突为止
- 如果有冲突,执行
-
git cherry-pick <commit id>
(如果 commit id 丢了可以用git reflog
,然后根据 commit message 找到丢失的 id hash)- 如果有冲突,修改,然后再执行提交三部曲:
git add .
git commit -m 'feat: xxx'
git push
- 如果没有冲突,直接执行
git push
- 如果有冲突,修改,然后再执行提交三部曲:
-