【极客时间】玩转Git三剑客笔记
标签搜索

【极客时间】玩转Git三剑客笔记

Augenstern
2025-01-24 / 0 评论 / 3 阅读 / 正在检测是否收录...

第一章 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_project

1.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 true

1.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_name

2.2 怎么修改最新的commit的message


git commit --amend

不只是修改最新commit的message 而是会创建一个将暂存区的内容生成一个commit,再将当前最新的commit替换成新生成的那一个

Linux下 git默认的文本编辑器是nano,很多快捷键不熟悉,执行下面的命令可以将git的文本编辑器改为我们熟悉的vim
git config --global core.editor vim

2.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 id

2.6 怎么比较暂存区和HEAD所含文件的差异


git diff --cached

2.7 怎么比较工作区和暂存区所含文件的差异


git diff

ps:
git diff HEAD       # 工作区 <===> HEAD
git diff            # 工作区 <===> 缓存区
git diff --cached   # 缓存区 <===> HEAD

2.8 如何让暂存区恢复和HEAD的一样


git reset HEAD

git reset 有三个参数
--soft  只修改HEAD,暂存区、工作区不变
--hard  HEAD、暂存区、工作区均修改
--mixed 默认参数,修改HEAD和暂存区,但工作区保持不变

2.9 如何让工作区的文件恢复和暂存区一样


git checkout/git restore -- fileName

2.10 怎样取消暂存区部分文件的更改


git reset HEAD -- fileName

2.11 消除最近的几次提交


方法一:
git rebase -i <commit>  改成 d

方法二:
git reset--hard hash值

2.12 看看不同提交的指定文件的差异


git diff commit-id1 commit-id2 path-to-filename

2.13 正确删除文件的方法


git rm file name

2.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 push

4.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

评论 (0)

取消