《精通Git(第2版)》阅读笔记

第1章 入门

  1. 在git中,文件有三种状态:

    • 文件被修改编辑了,那么文件处于modified状态
    • 文件被git add了,那么文件处于staged状态,(将文件的某个时间点的快照加入暂存区)
    • 文件被git commit了,那么文件处于committed状态(暂存区里的快照被永久保存在git本地仓库中)
  2. 如果我克隆了一个代码仓库到本地后,那么本地代码仓库中将自动包含此代码仓库的所有的历史版本

  3. git在电脑中的配置文件有三个,对于windows里面有两个我是知道的(还有一个不是知道在哪里):

    • 一个是代码仓库中里面的.git/config文件 (优先级最高)
    • 一个是电脑的C:\Users\用户目录下的.gitconfig文件
  4. 通过命令行读取git配置值:

    • 读取.gitconfig文件 的配置值:git config --global user.email
    • 读取git 全部配置值:git config --list
      (注意:因为该命令行读取了三个配置文件的配置值,可能会出现配置名相同,配置值不同的情况)
    • 读取git某个配置项的当前最终配置值,也就是优先级最高的配置值:git config user.name

第2章 Git基础

  1. Git中的文件有两种状态:
  • 未跟踪的(Untracked):上一次本地Git仓库的快照中并未包含该文件,则该文件属于未跟踪状态
  • 已跟踪的(Tracked):上一次本地Git仓库的快照中包含该文件,则该文件属于已跟踪状态
  1. 初始化一个Git仓库:当我们在本地项目的根目录中执行git初始化命令git init后,会自动生成一个.git目录,但是这不意味着git开始跟踪该项目的文件,需要再进行git add .git commit命令后,Git仓库才能获得了一个快照,因为这个快照包含该项目的文件,所以项目文件终于处于已跟踪的状态了。

  2. 克隆仓库到指定目录:将需要克隆的远程仓库克隆到指定目录中new_folder的命令: git clone https://e.coding.net/ttsefhsel/liflef/tp.git new_folder

  3. 克隆仓库到本地目录后,这些文件都已经是已跟踪且未修改的状态。

  4. git status输出结果怎么看?

    下面是对红框三个区域的解释:

    • Changes to be committed:列出暂存区文件,只要执行git commit 那么这些文件在执行git add的一瞬间的状态下的内容都会被包含到最新的本地GIT仓库快照中
    • Changes not staged for commit:列出已被跟踪,且被修改的,但还未执行git add的文件(也就是未添加到暂存区),等待被执行git add
    • Untracked files:列出还没跟踪的文件,等待被执行git add
  5. git status简洁版:git status -s
    在这里插入图片描述

  6. 左边的两个字符是代表状态的,第一个字符说明文件是否已暂存,第二个字符表明文件是否被修改,例如:
    在这里插入图片描述

  7. 跳过git add . 直接提交所有已跟踪文件的修改 (P22):git commit -a
    在这里插入图片描述

  8. 直接完成删除文件并提交删除状态到暂存区(P22):git rm
    在这里插入图片描述

  9. 不删除文件的情况下,让git不再跟踪某个文件或文件夹 (P24):git rm --cached
    在这里插入图片描述

  10. 查看git 提交历史 (顺序新–>旧) (P25):git log
    按回车键可以加载更多以往历史,按q键可以结束退出
    最近两条提交:git log -2
    可以看差异内容(diff 信息):git log -p
    可以看每次提交的简要统计信息:git log --stat
    只列出提交信息(P27):git log--pretty=oneline
    在这里插入图片描述只列出提交人、日期、提交信息:git log--pretty=short
    在这里插入图片描述
    待图标显示分支和合并历史 (P28):git log --graph
    在这里插入图片描述
    今天到两周前的提交内容:git log --since=2.weeks
    查询作者为maureen2 的提交记录:git log --author=maureen2
    在这里插入图片描述
    在这里插入图片描述

  11. 将文件从暂存区中移出来:git restore --staged api/app/api/service/user/LoginService.php

  12. 撤销对未暂存的文件进行的修改内容(P31):git restore api/app/api/service/user/LoginService.php

  13. 什么是remote?(P32)
    remote指的是远程仓库。

  14. 什么是origin?(P32)
    如果克隆了一个远程仓库,则git 给该克隆源服务器(也就是remote)取的默认名字就是origin。
    想要知道origin到底是指哪个服务器,可以执行git remote -v,这里可以获得远程仓库的url
    在这里插入图片描述

  15. 添加远程仓库(P33):git remote add + 仓库名 + url
    (可以同时有多个远程仓库)
    在这里插入图片描述

第3章 Git分支机制

  1. head和多个分支和提交版本记录的关系(P43-45)
    在这里插入图片描述
  2. 如何生成新的分支(P44):git branch test1
    (这里只是新增一个分支,但是还没切换到该新分支中,HEAD指针未改变指向)
  3. 切换到指定分支(P45):git checkout test1
  4. 查看当前在哪个分支:git branch
    带*号的即当前所在分支(也即是HEAD指针指向的分支)
    在这里插入图片描述
  5. 查看当前各分支指向的提交版本(P45):git log --decorate
    图中test1分支和master分支都指向同一个提交版本,因为test1分支是我处在master分支上的时候新增的一个分支,所以会跟着当前分支一起指向同一个提交版本
    在这里插入图片描述
    因为此时HEAD指向test1分支,那么我提交一个版本后,test1分支就不再跟master指向不同的提交版本了
    在这里插入图片描述
  6. 如何理解两个分支的合并(P48):如果切换到master,然后合并dev分支,其实等于master吸收了dev分支的内容,然后创建了一个新的快照版本,并且让master分支的指针指向新版本,而dev分支的指针还是停留在原本的版本中没有变动。如果想要dev分支指向合并后的那个快照版本,则直接切换到dev分支,并合并master分支。执行后git不会生成新的快照版本,而是直接让dev分支指针往前挪,最后的效果就是master分支和dev分支的指针都指向了合并后的那个快照版本。
  7. 不同分支对同一个文件进行写操作,什么情况下合并会产生冲突(P53):
  • 当该文件只有两行时,一个分支修改第一行,第二个分支修改第二行,合并后会产生冲突。看下面三张图就是例子:
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/a0145f6b483d4a7ea069fe21098ff833.png在这里插入图片描述
    在这里插入图片描述
    合并后产生冲突了
    在这里插入图片描述
  • 同一个文件,这个文件有三行,也就是说大于二行,第一个分支修改第一行,第二个分支修改第三行,合并后不会产生分支。看下面三张图就是例子:
  • 在这里插入图片描述
    在这里插入图片描述
    合并执行顺利
    在这里插入图片描述
  1. 远程分支:即是远程仓库所有的分支的指针,用来说明每条远程分支正在指向哪个快照版本,通过git branch -a可以看到远程仓库的所有分支指针
    在这里插入图片描述
  2. 将本地的某个分支推送到远程仓库的某个分支(P63):git push origin serverfix:awesomebranch
    把本地serverfix分支推送到远程的awesomebranch分支上去。
  3. 如何想要推送的时候不用输入用户名和密码(P64)?
    设置一个凭据缓存:git config --global credentital.helper cache
  4. 如果git clone后,远程仓库又添加多了一条dev新分支,那么本地执行拉取后,会看到本地多了一条对应的远程dev分支的指针,看下面两个图
    拉取前,没有dev分支指针:
    在这里插入图片描述
    拉取后,会显示有dev分支指针:
    在这里插入图片描述
  5. 直接将远程仓库的某个分支内容合并到当前的本地分支(P64):git merge origin/dev
    就算目前所在的本地分支不是dev分支也没关系、本地没有dev分支也没关系,反正就是把指定远程的分支合并到我本地当前分支即可。
    13.创建一个本地分支来对应一个远程仓库分支(P65):git checkout -b dev_2 origin/dev_2
    执行后本地会多一条分支叫dev_2,这个分支的指向的版本就是远程分支dev_2指向的版本
    在这里插入图片描述
  6. 基于上一条的例子,此时远程分支dev_2的跟踪分支(tracking branch),也叫上有分支(upstream branch)就是本地的dev_2分支。他们是直接关联的。(P64)
  7. 当我们执行git pushgit pull 时,git 会识别当前的分支是哪个远程仓库的哪个分支的跟踪分支,然后执行推送到该分支、或拉取该分支的数据并于本地分支合并。(P64)
  8. 如果切换分支时,本地暂无该分支,但是远程仓库有一个同名分支,则git会添加远程分支同名的本地跟踪分支。(P65)
    下面图中,原本本地没有dev分支,但是远程有dev分支,只要我执行git checkout dev,立刻直接自动生成一个本地跟踪分支
    在这里插入图片描述
  9. 设置某个的本地分支跟踪指定的远程分支(P65):git branch -u origin/serverfix
    用–set-upstream-to也可以:git branch --set-upstream-to=origin/mybranch1 mybranch1
  10. 查看本地分支和远程分支的对应跟踪关系(P66):
    git branch -vv

    不仅可以看到本地分支对应哪条远程分支,还可以看到差异:
    ahead 3:指的是本地master分支提交了两次都还没推送到远程master分支
    behind2:指的是远程master分支提交了两次的更改都还没合并到本地master分支

    在这里插入图片描述
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值