git
| //配置 |
| git config user.name xx |
| git config user.email xxxx |
| |
| //创建仓库 |
| git init |
| git remote add origin url |
| |
| //日常 |
| git add . |
| git commit -m 'msg' |
| git commit --amend -m '修改的提交信息' |
| git rebase -i HEAD~n //在当前分支上,合并包含HEAD在内的n个提交 |
| git push origin master |
| git push -f origin main |
| git log --oneline |
| git log --graph |
| git clone |
| git fetch(远程仓库->本地仓库) |
| git pull(远程仓库->本地仓库/暂存区/工作区) |
| //.gitignore |
| 1.md //忽略1.md文件 |
| build/ //忽略build目录下的所有文件 |
| |
| //回滚 |
| git reset --hard HEAD //用本地仓库还原暂存区+工作区 |
| git reset --hard 版本号 |
| git reset HEAD //本地仓库还原暂存区 |
| git checkout . //暂存区还原到工作区 |
| git checkout <filename> //暂存区还原到工作区(某个文件) |
| |
| //分支 |
| git branch daily //创建分支 |
| git branch -b daily origin/master //创建本地分支daily并把远程分支origin/master的最新提交作为分支daily的起点 |
| git branch -d daily //删除分支 |
| git branch -a -vv //显示所有分支 |
| git checkout daily //切换分支 |
| git checkout -b daily origin/master//功能同第2个 |
| git branch -m old new //修改分支名称 |
| |
| //合并 |
| git merge feature --no-ff //git checkout main切换到开发分支(当前分支),将feature(目标分支)上内容合并到main分支,并创建一个新的merge commit |
| git mergetool //merge发生冲突时,打开meld处理冲突 |
| git commit -m "merge commit" //给merge commit提交注释 |
| git clean -f //删除.orig文件(合并冲突时由meld创建) |
| |
| //变基后合并(永远不要在主分支上变基) |
| git checkout daily |
| git rebase main # 将daily从main分支分叉的节点全部放到main最新节点后重走一遍 |
| git merge main #将feature合并到main,此时不会产生冲突,不用no-fast-forward |
| |
| |
| //暂存 |
| git stash |
| git stash list |
| git stash pop stash@{0} |
| git stash clear |
| |
| //比较 |
| git diff HEAD <filename> //查看工作区文件和仓库中该文件最新版本之间的差异 |
| git diff feature main //比较feature和main分支代码 |
| |
常用bash
编译指令
| |
| g++ -E test.cc -o test.i //预处理 |
| g++ -S test.i -o test.s //编译 |
| g++ -c test.s -o test.o //汇编(经过汇编器,将汇编代码转换成机器码) |
| g++ test.o -o test.out //链接 |
| |
| //静态库 |
| ar -crv test.o libmytest.a //静态库 |
| g++ main.cc -o main.out -l mytest.a -L . -static //静态链接 -l表示静态库名称 -L表示静态库路径 -static表示静态编译 |
| |
| //动态库 |
//vim
| |
| D/d$ |
| |
| d0 |
| |
| dG |
| |
| d2j |
| |
| |
| :%s/old/new/gc |
| |
| |
| |
| |
| y(yes):替换当前词 |
| n(no):跳过当前词 |
| a(all):替换当前词及后面所有待选项 |
| l(last):只替换当前词就停止 |
| q(quit):退出替换模式 |
| |
| |
| |
正则表达式
()——子表达式
\——转义
*——0个1个或多个
+——1个或多个
?——0个或1个
{m}——固定m次
{m,}——最少m次
{m,n}——至少m个,最多n个
/w——字母或数字
/d——十进制数字
/s——空格
.——任意1个字符
[abc]——一组字符(a或b或c)会产生贪婪匹配:添加?,进行 非贪婪匹配。如:g[a-z]d+?
[^abc]——除去abc以外
^——字符串是否以某字符开头
$——字符串是否以某字符结尾
| a{2,3} 最少2个a最多3个a,都匹配 |
| a^以a开头 |
| a$以a结尾 |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)