2026/2/20 15:08:52
网站建设
项目流程
网站优化和推广方案ppt,深圳东门属于哪个区,WordPress采集淘宝头条插件,长沙网站推广优化日常add、commit、push三连确实够了。但总有那么几次#xff0c;你会遇到#xff1a;
合并冲突不知道怎么解commit写错了想改把代码搞乱了想回退想从别的分支偷一个提交过来
这篇把这些场景的处理方法都写一遍#xff0c;下次遇到直接查。
合并冲突
两个人改了同一个文件的同…日常add、commit、push三连确实够了。但总有那么几次你会遇到合并冲突不知道怎么解commit写错了想改把代码搞乱了想回退想从别的分支偷一个提交过来这篇把这些场景的处理方法都写一遍下次遇到直接查。合并冲突两个人改了同一个文件的同一个地方Git不知道该保留哪个就产生冲突了。gitmerge feature# CONFLICT (content): Merge conflict in src/config.js打开文件会看到这样的标记HEADconstAPIhttps://prod.api.com;constAPIhttps://test.api.com;feature到是你当前分支的代码到是要合并进来的代码。手动改成你想要的样子把那些标记删掉constAPIprocess.env.API_URL||https://prod.api.com;然后gitaddsrc/config.jsgitcommit搞定。偷懒的办法如果你确定要用其中一边的gitcheckout--ourssrc/config.js# 用我的gitcheckout--theirssrc/config.js# 用他的不想合并了gitmerge--abort回到合并前的状态。改最后一次提交commit message写错了gitcommit--amend-m正确的提交信息忘了加某个文件gitaddforgotten.jsgitcommit--amend--no-edit注意如果已经push了amend之后要push --force这个在团队项目里慎用。撤销这个场景最多分情况改了文件还没addgitrestore src/config.js# 恢复单个文件gitrestore.# 恢复所有add了还没commitgitrestore--stagedsrc/config.js# 从暂存区撤出commit了还没push# 撤销commit代码还在gitreset HEAD~1# 撤销commit代码也不要了危险gitreset--hardHEAD~1push了这时候不能直接reset了会影响别人用revertgitrevert abc1234# abc1234是要撤销的commit hash这会创建一个新的commit来撤销之前的改动。找回搞丢的代码手残reset --hard之后发现代码没了别慌。gitreflog这个命令会显示你所有的操作历史abc1234 HEAD{0}: reset: moving to HEAD~1 def5678 HEAD{1}: commit: 重要的改动找到你想恢复的那个hashgitcheckout def5678# 或者gitbranch recover def5678reflog是救命的东西只要提交过都能找回来。cherry-pick从别的分支偷一个commit过来。场景在develop修了个bug想把这个修复也应用到release分支。# 先在develop上提交gitcheckout developgitcommit-mfix: 修复登录问题# 假设hash是abc1234# 然后cherry-pick到releasegitcheckout releasegitcherry-pick abc1234这个命令用得很多尤其是多版本维护的时候。rebase -i整理提交历史代码写完了但提交历史很乱abc1234 Add feature def5678 Fix typo ghi9012 Fix another typo jkl3456 Actually fix it this time提PR之前整理一下gitrebase-iHEAD~4# 整理最近4个打开编辑器pick abc1234 Add feature pick def5678 Fix typo pick ghi9012 Fix another typo pick jkl3456 Actually fix it this time把那几个typo修复合并到第一个pick abc1234 Add feature fixup def5678 Fix typo fixup ghi9012 Fix another typo fixup jkl3456 Actually fix it this timefixup会把这个commit合并到前一个并且丢弃commit message。保存退出4个commit变成1个干净的commit。bisect二分查找bug有个bug不知道是哪个commit引入的但你知道v1.0是好的现在是坏的。gitbisect startgitbisect bad# 标记当前版本有buggitbisect good v1.0# 标记v1.0是好的然后Git会自动checkout中间的版本你测试一下gitbisect good# 这个版本没问题# 或gitbisect bad# 这个版本有问题几轮之后Git会告诉你是哪个commit引入的bug。gitbisect reset# 结束如果有自动化测试更方便gitbisect start HEAD v1.0gitbisect runnpmtest# 自动跑测试stash临时保存写代码写到一半突然要切分支修个紧急bug。gitstash# 暂存当前修改gitcheckout hotfix# 切分支干活# 干完活...gitcheckout featuregitstash pop# 恢复之前的修改可以加描述方便找gitstash push-m正在做用户模块gitstash list# 看列表常用别名推荐配置gitconfig--globalalias.st statusgitconfig--globalalias.co checkoutgitconfig--globalalias.br branchgitconfig--globalalias.lglog --oneline --graph --allgit lg看提交历史特别爽。清理本地分支时间长了本地会有很多已经合并的分支# 删除已合并的分支gitbranch--merged|grep-vmain\|develop|xargsgitbranch-d# 清理远程已删除的追踪分支gitfetch--prune这些操作平时可能用不到但真遇到问题的时候能救命。建议收藏到时候直接搜。