【记不住】
git
//配置
git config user.name xx
git config user.email xxxx
//创建仓库
git init
git remote add origin url
//日常
git stash save "msg"
git stash pop
git stash pop stash@{id}
git add .
git commit -m 'msg'
git commit --amend -m '修改的提交信息'
git restore. //暂存区还原到工作区
git reset --hard HEAD~0 //用本地仓库还原暂存区+工作区,commit号从0开始
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 merge
git pull(远程仓库->本地仓库/暂存区/工作区)
//.gitignore
1.md //忽略1.md文件
build/ //忽略build目录下的所有文件
//用本地仓库还原暂存区+工作区
git reset --hard HEAD~0
git reset --hard 版本号
//一个已经 `push` 到 `main` 分支的提交,发现有 bug,需要撤销
//本地仓库还原暂存区+工作区,且新增一个【撤销提交】记录。
git revert [commit号]
git revert HEAD~0
//本地仓库最近一次提交HEAD还原到工作区。不会影响暂存区。(新命令)
git restore .
git restore <filename>
//优先从暂存区恢复工作区,没有才从 本地仓库最近一次提交HEAD,不影响暂存区(老命令)
git checkout .
git checkout <filename>
//本地仓库最近一次提交还原到暂存区。不影响工作区
git restore --staged .
git restore --staged <filename>
//撤销 commit,将当前代码回到上一个commit
git reset --soft HEAD~1
//撤销已push的代码
git reset --soft HEAD~1 //撤销commit:将本地仓库的HEAD指向上一个,同时保留工作目录和暂存区的更改
git push
git reflog 找到撤销的commit
git reset --hard <commit-hash> 恢复到撤销的commit
//排错(假设提交记录A和记录B之间有错误,记录A正确,记录B错误,但不知道是哪个提交出问题)
git bisect bad B
git bisect good A
重新编译、运行下看看正确与否。如果正确,输入:git bisect good
继续重新编译、运行下看看正确与否。若正确,输入:git bisect good
...
直到出现错误,输入:git bisect bad
继续重新编译、运行下看看,若错误,输入:git bisect bad
...
最后,git会找到出错的提交记录。
通过git show 记录查看错处记录的提交
//分支
git branch daily //创建分支
git branch -d daily //删除分支
git branch -a -vv //显示所有分支
git checkout daily //切换分支
git checkout -b daily origin/master//创建本地分支daily并把远程分支origin/master的最新提交作为分支daily的起点
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 save "msg"
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
#删除光标所在行及向下2行
d2j
#批量替换
:%s/old/new/gc
#%s表示在当前文件
#old要替换的词
#new新词
#gc替换询问:
y(yes):替换当前词
n(no):跳过当前词
a(all):替换当前词及后面所有待选项
l(last):只替换当前词就停止
q(quit):退出替换模式
//搜索
n下一个
N上一个
正则表达式
()——子表达式
\——转义
*——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结尾

浙公网安备 33010602011771号