零散的点
- Git中文乱码
- 可以使用Git Bash,不会乱码
- 修改配置,百度下
- 引用
- 引用就是指向某个commit的指针,或指向某个指针的指针
- HEAD
- 是1个引用
- 永远指向当下的位置
- HEAD通过分支指向了commit
//HEAD指向了main分支,main分支指向了commit(df1bcaba8c485ea7eeb2458002dd2559614293ff)
//引用origin/main 指向了commit(df1bcaba8c485ea7eeb2458002dd2559614293ff)
//引用origin/HEAD 指向了commit(df1bcaba8c485ea7eeb2458002dd2559614293ff)
commit df1bcaba8c485ea7eeb2458002dd2559614293ff (HEAD -> main, origin/main, origin/HEAD)
Author: HuanHaiLiuXin <472868476@qq.com>
Date: Sun Oct 4 10:30:10 2020 +0800
老子也想看
- 分支
- 创建分支: git branch feature1
commit df1bcaba8c485ea7eeb2458002dd2559614293ff (HEAD -> main, origin/main, origin/HEAD, feature1)
Author: HuanHaiLiuXin <472868476@qq.com>
Date: Sun Oct 4 10:30:10 2020 +0800
老子也想看
- 切换到新分支 feature1
- 切换分支,只是将HEAD从1个分支指向另1个分支
commit df1bcaba8c485ea7eeb2458002dd2559614293ff (HEAD -> feature1, origin/main, origin/HEAD, main)
Author: HuanHaiLiuXin <472868476@qq.com>
Date: Sun Oct 4 10:30:10 2020 +0800
老子也想看
- git pull
- origin/-- 分支
- origin是远程仓库的名称
- origin/-- 分支是远程仓库分支的本地镜像
- origin/-- 分支不是在本地直接操作的,一般在push/pull/fetch成功后自动更新
- origin/HEAD: 这是一个永远跟随 origin/main 的引用,它最大的作用是用来标记默认分支
//origin/HEAD 永远跟随 origin/main 证明:
1:上一次push成功后
//HEAD -> main, origin/main, origin/HEAD 都指向同一个commit
commit 66ad5140520b814935bfd5ba7e99e67023414331 (HEAD -> main, origin/main, origin/HEAD) Author: HuanHaiLiuXin <472868476@qq.com>
Date: Sun Oct 4 13:53:57 2020 +0800
房租也高
2:本地修改,提交一次commit后
//HEAD -> main 指向最新提交
//origin/main, origin/HEAD还是指向之前的commit
commit 6a6af9d246ae0530f7db4c5a3b104c27e48dc287 (HEAD -> main)
Author: HuanHaiLiuXin <472868476@qq.com>
Date: Sun Oct 4 14:48:32 2020 +0800
测试origin/HEAD
commit 66ad5140520b814935bfd5ba7e99e67023414331 (origin/main, origin/HEAD)
Author: HuanHaiLiuXin <472868476@qq.com>
Date: Sun Oct 4 13:53:57 2020 +0800
房租也高
3:再次push成功后
//HEAD -> main, origin/main, origin/HEAD 都指向最新push成功的commit
commit 6a6af9d246ae0530f7db4c5a3b104c27e48dc287 (HEAD -> main, origin/main, origin/HEAD) Author: HuanHaiLiuXin <472868476@qq.com> Date: Sun Oct 4 14:48:32 2020 +0800
测试origin/HEAD
- git pull 示意图

- git push
- git push 示意图

- git push成功后,本地仓库中的origin/HEAD的指向不一定会变化.
- 只有push的是远程仓库的默认分支/main分支, origin/HEAD的指向才会变化.
- commit
- git add
- 将指定文件,或全部变动文件放到暂存区
- 暂存区:待commit的内容暂时存放的地方
- 分支
- branch本质上是一个引用,即指向某个commit的指针
- branch只和它当下指向哪个commit有关
- 默认分支,仓库的默认分支是master,main,默认分支可以修改
- git clone拉取仓库,默认checkout的就是默认分支
- 执行push命令,远程仓库的HEAD永远跟随默认分支,而不是和本地仓库HEAD同步,即只有push默认分支到远程仓库,远程仓库的HEAD才会移动
- git merge

- 删除本地分支
- 删除远程分支
- git push origin --delete 远程分支名称
- git rebase
- git reset
- git reset --hard 会将当前分支指向对应的commit,并丢弃本地修改
- git add -i 同一文件的多出修改,多次提交
git add -i
patch
指定文件序号,回车
y+回车:选用当前块
n+回车:不用当前块
s+回车:把当前块做自动切分后再重新询问
- tag
- tag一般用于标记版本号
- 创建tag
- 显示所有tag
- 显示指定tag
- tag不能从本地改变位置,也不能被HEAD指向,同1个commit可以打多个tag
- 删除本地标签
- 删除远程仓库标签
- git push origin --delete tag1
- git reflog 或 git reflog 分支名称
- 用于查看HEAD 或 分支的移动历史,从而找到特定的commit
- git checkout
- git checkout 分支名称
- git checkout commit
- git checkout tag名称
- git cherry-pick commitA commitX commitN
- 一般用于将指定分支的指定几个commit应用到当前分支,并移动HEAD到commitN
- git log --oneline --author=shuaige
- 查找作者名字包含'shuaige'的所有commit记录,每条记录单行展示
- git l --pretty=format:"时间: [%ad] , 哈希: %H , 作者: %an%n%s%n" --date=format:"%Y-%m-%d %H:%M:%S"

- –date=format格式说明
- %a 星期(缩写):Sat
- %b 月份(缩写):Apri
- %c 格式化输出日期时间 月/日/年 时:分:秒:04/25/20 18:21:01
- %d 日期:25
- %j 一年的第几天:116
- %m 月份数字:04
- %p 上下午:AM/PM
- %w 星期几(0-6):6
- %x 格式化输出短日期:04/25/20
- %y 年份:20
- %z 时区:+0800
- %A 星期(全写):Saturday
- %B 月份(全写):April
- %H 24小时制:18
- %I 12小时制:06
- %M 分钟:21
- %S 秒:01
- %U 一年的第几周(星期日作为每周的第一天):16
- %W 一年的第几周(星期一作为每周的第一天):16
- %X 格式化输出短时间:18:21:01
- %Y 年份:2020
- %Z 时区:+0800
- --pretty=format 支持的常用属性
%H 提交的完整哈希值
%h 提交的简写哈希值
%T 树的完整哈希值
%t 树的简写哈希值
%P 父提交的完整哈希值
%p 父提交的简写哈希值
%an 作者名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 --date=选项 来定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期(距今多长时间)
%s 提交说明