点击上方 "程序员小乐"关注, 星标或置顶一起成长
每天凌晨00点00分, 第一时间与你相约
每日英文
When most people are concerned about your flying HISTEP is not high, only a few people care about you fly tired, that is friendship.
当大部分人都在关注你飞得高不高时,只有少部分人关心你飞得累不累,这就是友情。
每日掏心话
最能让人感到快乐的事,莫过于经过一番努力后,所有东西正慢慢变成你想要的样子
来自:枕边书 | 责编:乐乐
链接:cnblogs.com/zhenbianshu/p/12018714.html
程序员小乐(ID:study_tech)第 767 次推文 图片来自 Pexels
往日回顾:爱奇艺的 "数据库" 选型到底有多牛逼?
00 前言
最后决定先将代码回退到 A 版本之前,再基于旧版本修复 Bug,也就开始了五个小时的受苦之路。
01 正文
git revert commit_id
merge commit
mainline
所以 revert 的文案被废弃了。
reset
--hard
master> git reset --hard commit_idmaster> git push --force origin master
force push
re
flog
另外,reset 毕竟太野蛮,我们还是想能保留提交历史,以后排查问题也可以参考。
rebase
要回退到
git rebase -i N
pick 6fa5869 commit1pick 0b84ee7 commit2pick 986c6c8 commit3pick 91a0dcc commit4
这些 commit 自旧到新由上而下排列,我们只需要在 commit_id 前添加操作命令即可。
在合并 commit 这个需求里,我们可以选择 pick(p) 最旧的 commit1,然后在后续的 commit_id 前添加 squash(s) 命令,将这些 commits 都合并到最旧的 commit1 上。
pick(p)
squash(s)
如果出错了,也可以使用 git rebase --abort/--continue/--edit-todo 对之前的编辑进行撤销、继续编辑。
git rebase --abort/--continue/--edit-todo
older, commit1, commit2, commit3, commit4
older, commit5
所以我们需要执行 git merge master 将主分支向 F 分支合并,合并后 git 会发现 commit1 到 commit4 提交的内容和 F 分支上 commit5 的修改内容是完全相同的,会自动进行合并,内容不变,但多了一个 commit5。
git merge master
再在 F 分支上对 commit5 进行一次 revert 反提交,就实现了把 commit1 到 commit4 的提交全部回退。
这种方法的取巧之处在于巧妙地利用了 rebase 操作历史提交的功能和 git 识别修改相同自动合并的特性,操作虽然复杂,但历史提交保留得还算完整。
rebase 这种修改历史提交的功能非常实用,能够很好地解决我们遇到的一个小功能提交了好多次才好使,而把 git 历史弄得乱七八糟的问题,只需要注意避免在多人同时开发的分支使用就行了。
这种更可行的方式就是对文件操作,然后让 git 来识别变更,具体是:
从主分支上切出一个跟主分支完全相同的分支 F。
从文件管理系统复制项目文件夹为 bak,在 bak 内使用 git checkout N 将代码切到想要的历史提交,这时候 git 会将 bak 内的文件恢复到 N 状态。
git checkout N
在从文件管理系统内,将 bak 文件夹下 除了 .git 文件夹下的所有内容复制粘贴到原项目目录下。git 会纯从文件级别识别到变更,然后更新工作区。
除了 .git
在原项目目录下执行 add 和 commit,完成反提交。
add 和 commit
最后终于靠着文件操作方式成功完成了代码回退,事后想来真是一把心酸泪。
revert 适合需要回退的历史提交不多,且无合并冲突的情景。
如果你可以向 master 强推代码,且想让 git log 里不再出现被回退代码的痕迹,可以使用 git reset --hard + git push --force 的方式。
git reset --hard + git push --force
如果你有些 geek,追求用”正规而正统”的方式来回退代码,rebase + revert 满足你的需求。
如果你不在乎是否优雅,想用最简单,最直接的方式,文件操作正合适。
git 真的是非常牛逼的代码管理工具,入手简单,三五个命令组合起来就足够完成工作需求,又对 geeker 们非常友好,你想要的骚操作它都支持,学无止境啊。
欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。
欢迎各位读者加入订阅号程序员小乐技术群,在后台回复“加群”或者“学习”即可。
猜你还想看
阿里、腾讯、百度、华为、京东最新面试题汇集
一种前端灰度发布方案
高并发下的抽奖优化
这些方法,能够让你的Python程序快如闪电
文章有问题?点此查看未经处理的缓存