# 查看状态
git status
git log
# 创建分支
git branch <分支名>
# 创建并切换分支
git checkout -b <分支名>
# 提交代码
git commit -m "备注内容"
# 切换分支
git checkout <分支名>
git switch <分支名> //git 2.23版本引入
# 合并分支
git merge <分支名> // 把其他分支合并到自己身上来
git rebase <分支名> // 把自己合并到主分支前面去-让代码的开发路线更清晰,让并行开发看起来像是顺序开发
# 分离HEAD HEAD的原理
HEAD--帮助我们在提交树上进行移动
可以利用checkout命令, 让HEAD指针指向某个具体的提交记录(比如C3,C4,C5)而不是分支名(main,bugFix)
# git 的相对引用:
^ 向上移动1个提交记录 ^ 还有上一代的意思,一个^就是往上1代
git checkout main^ 切换到main的父节点
~<num> 向上移动多个提交记录
^和~的使用,支持链式操作
-f:强制让指针指向某一个具体的提交
git branch -f main HEAD~3
git branch -f bugFix C1 //让bugFix指向C1节点
# 撤销变更
git reset HEAD~1 //对远程分支无效
git revert HEAD
# cherry-pick可以将提交树上任何的提交记录追加到当前所在位置(HEAD)上
# 适用场景: 提交记录号和哈希值已知
git cherry-pick <提交号>
# 交互式 rebase
交互式rebase 指的是使用带参数 --interactive的rebase命令 简写为 -i
git rebase -i HEAD~4
# git tag
git tag <标签号> <提交号>
git tag v0 c1
# 描述离自己最近的锚点
git describe <ref> // ref可以是任何能被git识别成提交记录的引用
//如果你没有指定的话,Git 会以你目前所检出的位置(HEAD)。
它输出的结果是这样的:
<tag>_<numCommits>_g<hash>
tag 表示的是离 ref 最近的标签, numCommits 是表示这个 ref 与 tag 相差有多少个提交记录, hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位。
当 ref 提交记录上有某个标签时,则只输出标签名称
# 查找产生Bug的提交记录
git bisect
# 两个父节点之间的切换
git checkout HEAD^2 //切换到另一个父节点
# git 远程仓库
git clone
# 远程分支
命名规范: <remote name>/<branch name> 一般远程仓库的名称默认为origin
# 从远程仓库下载记录
git fetch
从远程仓库下载本地仓库中缺失的提交记录
更新远程分支指针
不会改变本地仓库的状态,也不会更新main分支
# 合并远程分支
git cherry-pick origin/main
git rebase origin/main
git merge origin/main
# 从远程仓库下载并合并分支
# pull操作时, 提交记录会被先下载到origin/main 分支上,再合并到本地的main分支
git pull
git pull --rebase //重要,提交代码前一定要先做这一步
# 推送本地记录到远程仓库
# push操作时,我们把工作从main推到远程仓库中的main分支,同时更新远程分支origin/main
git push
git push <remote> <place> //git push origin main
git push origin <source>:<destination> //git push origin foo^:main
# 偏离的提交历史
git 会强制你先合并远程最新的代码,再分享你的工作
git pull --rebase //下载远程代码并合并
git push //再将自己的代码推送到远程分支
# 如何自定义远程分支
# 方法一
git checkout -b <期望能够跟踪origin/main分支的本地分支> o/main
# 方法二
git branch -u o/main <本地分支名>
# git 远程仓库高级操作
# 推送主分支
# 合并远程仓库
# 远程追踪
# git push 的参数
git push <remote> <place> //git push origin main
git push origin <source>:<destination> //git push origin foo^:main
# git fetch 的参数
git fetch <remote> <place> //git fetch origin foo //把远程仓库foo分支下载到本地的origin/foo分支上
git fetch <source>:<destination> //source指的是远程仓库的位置,destination是要放置提交的本地仓库的位置
# 没有source的source
git push origin :side //远程仓库和本地仓库中的side分支会被删除
git fetch origin :bugFix //本地会创建一个新分支bugFix
# git pull的参数 git pull 实际上就是 fetch + merge 的缩写
git pull origin <source>:<destination>
########################草稿区############################
# 帮助命令
show solution #查看参考答案
git fakeTeamwork #模拟团队合作