git学习笔记
git clone
clone仓库:
git clone <仓库地址>
递归clone项目:
git clone --recurse-submodules <repo-address>
git checkout
从当分支上创建新分支:
git checkout -b <new-branch>
切换分支:
git checkout -b <other-branch>
从指定远程仓库中指定分支上创建新的分支:
git checkout -b <new-branch> <remote-repo>/<branch-name>
git branch
查看分支:
git branch # 默认查看本地分支
- -v:显示commit sha以及commit title
- -r:显示远程分支
- -a:查看所有分支
- -d:删除本地分支,
-d <loccal-branch-name>
git stash
查看stash区内容:
git stash list
将所有更改加入到stash:
git stash
弹出stash栈顶:
git stash pop
清空stash:
git clear
git add
将指定文件加入到暂存区:
git add <filename>
将当前目录所有文件加入到暂存区:
git add .
git commit
显式指定作者名字邮箱:
git commit --author="<author-name>" -c <commit-sha>
对commit签名:
git commit -S -m <commit-message>
git reset
撤回未push的commit:
git reset --soft HEAD^ # 撤回一次
git reset --soft HAED2 # 撤回两次
git remote
添加新的远程仓库:
git remote add <local-remote-repo-name> <repo-address>
git fetch
抓取新分支:
git fetch <branch-name>
git push
push的同时设置上游分支:
git push -u <local-repo-name> <branch-name>
- 当第一次推送本地分支到远程仓库时,使用
git push -u
会将本地分支与远程分支关联,这样以后就可以直接用git push
和git pull
- 通过设置上游分支,git会知道该使用哪个远程分支来同步操作
git revert
如果想单独撤销某个commit修改,可以使用git revert
git revert <commit-hash>
同样的,如果不想立马提交,想要修改commit log,添加选项-n
git revert -n <commit-hash>
git bisect
1. 开始二分:
git bisect start
2. 标记初始坏commit:
git bisect bad
3. 标记好的commit:
git bisect good <commit-hash>
之后git会自动切换到中间commit
4. 开始查找:
如果是好的commit,标记:
git bisect good
否则:
git bisect bad
5. 结束查找:
最后git会给出错误的commit信息
执行命令结束查找
git bisect reset
git format-patch
如果想要把最近提交的commit打包成patch方便别人使用,可以使用该命令:
git cherry-pick
如果想把远程仓库的某个commit应用到当前分支,可以使用以下命令:
git cherry-pick <commit-hash>
在新的commit中自动添加签名(Signed-off-by),这是一个git用来标识提交作者并确认对提交内容的合法性的一种方式
git cherry-pick -s <commit-hash>
如果不想立马提交,想要修改commit log,添加选项-n
:
git cherry-pick -n <commit-hash>
git tag
想知道哪些tag包含了某个commit
git tag --contain <commit-sha>
git log
查看一个文件提交时间线:
git log --oneline -- <文件路径>
git hook
- pre-commit:在提交之前运行。可以用来检查代码格式、运行单元测试等
- prepare-commit-msg:在提交信息编辑器打开之前运行。可以用来自动生成提交消息模板
- commit-msg:在提交信息编辑器关闭之后运行。可以用来验证提交信息的格式
- post-commit:在提交完成之后运行,可以用来发送通知或执行其他后续任务
- pre-rebase:在变基操作之前余小宁,可以用来检查变基之前的状态
- post-checkout:在git checkout命令执行之后运行,可以用来设置特定文件的状态
- post-merge:在合并操作完成之后运行,可以用来重新编译项目或执行其他合并后的任务。
git 签名
参考资料:https://docs.github.com/zh/authentication/managing-commit-signature-verification/about-commit-signature-verification#gpg-commit-signature-verification