第一章 Git基础
1.1 课程综述
版本变更管理 VCS的演化
目录拷贝--> 集中式VCS(SVN) --> 分布式VCS(Git)
Git优点:开源、性能好、存储优、方面备份、易于制定工作流程、支持离线操作
1.2 安装Git
安装地址:Git官网
1.3 使用Git之前需要做的最小配置
最小配置
git config --global user.name 'your_name'
git config --global user.email 'your_email@domain.com'
config的三个作用域
git config --local 针对某个仓库(可缺省)
git config --global 当前所有用的仓库
git config --system 系统所有登录用户
显示config的配置
git config --list --local
1.4 创建第一个仓库并配置local用户信息
两种方式
1、把已有的项目代码纳入Git管理
cd 项目代码所在的文件夹
git init
2、新建的项目直接用Git管理
cd 某个文件夹
git init your_project #会在当前路径下创建和项目名称同名的文件夹
cd your_project1.5 通过几次commit来认识工作区和暂存区
工作区 ==> 暂存区 ==> HEAD ==> 远端
add commit push/pull(fetch+merge)
git add -u:添加文件的修改,文件的删除(只操作跟踪过的文件)
git add . :添加文件的修改,文件的新建
git add -A:添加文件的修改,文件的删除,文件的新建(全部文件)
工作中一般是用到 git add . 或者 git add -A(-all)
1.6 给文件重命名的简便方法
文件重命名: git mv oldName newName
大小写问题: git config core.ignorecase true1.7 通过git log查看版本演变历史
ps: 对于git命令参数 如果单字母用-,如果单词使用--
git log --all 查看所有分支的历史
git log --all --graph 查看图形化的 log 地址
git log --oneline 查看单行的简洁历史
git log --oneline -n4 查看最近的四条简洁历史。
git log --oneline --all -n4 --graph 查看所有分支最近 4 条单行的图形化历史。
git help --web log 跳转到git log 的帮助文档网页1.8 gitk:通过图形界面工具来查看版本历史
个人日常工作使用souceTree更多
1.9 探秘.git目录
.git/
├── HEAD # 指向当前分支的引用(如 `refs/heads/main`)
├── config # 仓库的本地配置(用户名、远程仓库等)
├── objects/ # 存储所有Git对象(提交、树、文件内容)
│ ├── pack/ # 压缩后的对象包(优化存储)
│ └── ... # 松散对象(未被压缩的单个对象)
├── refs/ # 存储引用(分支、标签、远程跟踪分支)
│ ├── heads/ # 本地分支(如 `main`, `dev`)
│ ├── tags/ # 标签(如 `v1.0.0`)
│ └── remotes/ # 远程跟踪分支(如 `origin/main`)
├── index # 暂存区(Staging Area)的二进制表示
├── hooks/ # 客户端/服务端钩子脚本(示例,默认未激活)
├── logs/ # 记录所有分支的提交历史(用于 `git reflog`)
└── info/ # 全局排除文件配置(如 `.git/info/exclude`)
git cat-file
git cat-file -t 查看git 对象的类型
git cat-file -p 查看git 对象的内容
git cat-file -s 查看git 对象的大小1.10 commit、tree和blob三个对象之间的关系
blob ==> tree ==> commit
享元模式:一种结构型设计模式,旨在通过共享对象来减少内存使用和提高性能,特别适用于存在大量相似对象的情况。享元模式的核心思想是将对象的内在状态(可共享的部分)与外在状态(不可共享的部分)分离,从而减少对象的数量。
1.11 小练习:数一数tree的个数
可以简单的理解为commit是根节点,tree是子节点,blob是叶子节点,其中blob是可以共用的。
1.12 分离头指针情况下的注意事项
直接git checkout commitId会出现分离头指针的情况,这个时候提交的代码没有与分支关联起来,在切换分支时容易丢失代码(恢复比较麻烦)。应用场景:做测试时,可以用这个方法,不需要则直接丢弃,需要的话则创建新分支 git branch <新分支的名称> commitId
1.13 进一步理解HEAD和branch
HEAD总结:
1、HEAD当和分支挂钩的时候,指向的是该分支的最新提交
2、HEAD不和分支挂钩,而是指向某个commit,此时处于分离头指针的状态
3、切换分支HEAD的状态:切换分支时,HEAD指向的时branch的最新提交
4、HEAD指向branch的时候,指代的是某个具体的commit
5、HEAD 代表当前分支最新的提交,HEAD^ 上一个commit,HEAD ^^:上上个commit,HEAD~N:前n个commit
第二章 独自使用Git时的场景
2.1 怎么删除不需要的分支
git branch -d branch_name 在删除分支前Git会判断在该分支上开发的功能是否被merge的其它分支
git branch -D branch_name2.2 怎么修改最新的commit的message
git commit --amend
不只是修改最新commit的message 而是会创建一个将暂存区的内容生成一个commit,再将当前最新的commit替换成新生成的那一个
Linux下 git默认的文本编辑器是nano,很多快捷键不熟悉,执行下面的命令可以将git的文本编辑器改为我们熟悉的vim
git config --global core.editor vim2.3 怎么修改老旧commit的message
变基操作
git rebase -i <commit>
git rebase -i --root 修改根节点
-r,reword <commit> 使用提交,同时修改提交信息2.4 怎样把连续的多个commit整理成1个
git rebase -i <commit>
-s,squash <commit> 使用提交,同时合并到之前的提交中2.5 怎样把间隔的几个commit整理成1个
git rebase -i <commit>
-s,squash <commit> 使用提交,其他行加上-s commit id2.6 怎么比较暂存区和HEAD所含文件的差异
git diff --cached2.7 怎么比较工作区和暂存区所含文件的差异
git diff
ps:
git diff HEAD # 工作区 <===> HEAD
git diff # 工作区 <===> 缓存区
git diff --cached # 缓存区 <===> HEAD2.8 如何让暂存区恢复和HEAD的一样
git reset HEAD
git reset 有三个参数
--soft 只修改HEAD,暂存区、工作区不变
--hard HEAD、暂存区、工作区均修改
--mixed 默认参数,修改HEAD和暂存区,但工作区保持不变2.9 如何让工作区的文件恢复和暂存区一样
git checkout/git restore -- fileName2.10 怎样取消暂存区部分文件的更改
git reset HEAD -- fileName2.11 消除最近的几次提交
方法一:
git rebase -i <commit> 改成 d
方法二:
git reset--hard hash值
2.12 看看不同提交的指定文件的差异
git diff commit-id1 commit-id2 path-to-filename2.13 正确删除文件的方法
git rm file name2.14 开发中临时加塞了紧急任务怎么处理
git stash 把当前工作区的内容放入暂存区
git stash pop 把暂存区的内容恢复到工作区,且删除
git stash apply 把暂存区的内容恢复到工作区,且保留2.15 如何指定不需要Git管理的文件
通过.gitignore设置git不用管理文件或文件夹2.16 如何将Git仓库备份到本地
git clone xxx.git第三章 Git与GitHub的简单同步
3.1 注册一个GitHub账号
已注册 https://github.com/augenstern326
3.2 配置公私钥
https://github.com/settings/keys
3.3 在GitHub上创建个人仓库
无
3.4 把本地仓库同步到GitHub
无
第四章 Git与多人单分支集成协作时的常见场景
4.1 不同人修改了不同文件如何处理
不受影响,直接提交即可
git add
git commit
git pull(git fetch+merge)
git push4.2 不同人修改了同文件的不同区域如何处理
不会产生冲突,但提交前一样git pull拉一下远端代码,保持与远端一致
4.3 不同人修改了同文件的同一区域如何处理
会产生冲突,手动解决冲突后再进行提交操作
4.4 同时变更了文件名和文件内容如何处理
当多人修改同一文件的文件名和内容时,Git 会检测到冲突。处理步骤如下:
- 拉取最新代码:先拉取远程仓库的最新代码
git pull origin branch-name- 解决冲突:Git 会提示冲突,手动解决冲突后,将文件添加到暂存区并提交
# 解决冲突后
git add <file>
git commit -m "Resolved conflict in <file>"- 推送更改:将解决后的代码推送到远程仓库
git push origin branch-name
4.5 把同一文件改成了不同的文件名如何处理
- 拉取最新代码:先拉取远程仓库的最新代码
git pull origin branch-name- 检查文件差异:检查两个文件的内容,决定保留哪个或合并内容。
git diff fileA.txt fileB.txt- 解决冲突:Git 会提示冲突,手动解决冲突后,将文件添加到暂存区并提交
假设保留文件A
git add fileA.txt
git rm fileB.txt- 推送更改:将解决后的代码推送到远程仓库
git push origin branch-name
第五章 Git集成使用禁忌
5.1 禁止向集成分支执行push -f操作
git push -f 强制同步远端和本地相同,导致远端修改的内容丢失
可以使用 git reflog 命令查找历史,然后利用 git reset --hard HAED@{n} 的方式恢复。
5.2 禁止向集成分支执行变更历史的操作
个人向远端执行变更历史的操作,会导致抹除一些历史提交信息,影响该分支下其他开发者的
评论 (0)