Git三剑客之Git

作者: vannesspeng | 来源:发表于2019-11-24 13:28 被阅读0次

一、Git概述

版本管理的演变
1)集中式的版本管理(SVN)

  1. 有集中的版本管理服务器
  2. 具备文件版本管理和分支管理能力
  3. 集成效率有明显地提高
  4. 客户端必须时刻和服务器相连

2)分布式的版本管理(Git)

  1. 服务端和客户端都有完整的版本库
  2. 脱离服务端、客户端照样可以管理版本
  3. 查看历史和版本比较等多数操作,都不需要访问服务器,比集中式VCS更能提高版本管理效率
分布式的管理系统

3)GIt的优点

  • 最优的存储能力
  • 非凡的性能
  • 开源的
  • 容易做备份
  • 支持离线操作
  • 很容易定制工作流程

二、安装Git

1、Git官方文档地址:

https://git-scm.com/book/zh/v2

2、macOS 平台 Git 下载地址:

https://git-scm.com/download/mac

3、Windows 平台 Git 下载地址:

https://git-scm.com/download/win

4、Linux 平台 Git 下载地址:

https://git-scm.com/download/linux

5、检查安装结果

$ git --version ## 通过执行该命令,看git是否返回版本信息

三、使用Git之前的最小配置

  1. 配置user.name和user.email
$ git config --global user.name 'your_name'
$ git config --global user.email 'your_email@domain.com'
  1. git config命令的三个作用域
缺省等同于local
$ git config --local ## local只对某个仓库有效
$ git config --global ## global对当前用户所有仓库有效
$ git config --system ## system对系统所有登录的用户有效
  1. 查看config配置,加--list
$ git config --list     #会输出global、local、system所有的配置信息
$ git config --list --global  #仅输出global的配置信息
$ git config --list --system  #仅输出system的配置信息
$ git config --list --local    ##仅输出local的配置信息
  1. 清除config配置,加--unset
$ git config --unset --global user.name
$ git config --unset --system user.name
$ git config --unset --local user.name

四、创建第一个仓库,并创建local用户

  1. 创建Git仓库
    两种场景
  • 把已有的项目代码纳入git管理
$ cd 项目所在文件夹
$ git init
  • 新建的项目,直接使用git进行管理
$ cd 某个文件夹
$ git init your_project
$ cd your project
新建git仓库
查看新建的git仓库
  1. 向Git仓库中添加文件
$ git add file_name ## file_name表示你的文件的名字
$ git add file_name1 file_name2 file_name3 ## 添加多个文件
$ git add -u ## 保存修改和删除,但是不包括新建文件。
$ git add . ## 保存新的添加和修改,但是不包括删除
$ git add -A ## 保存所有的修改

五、通过几次commit来认识工作区和暂存区、版本历史

工作区和暂存区、版本历史
几次commit

通过git log命令来查看版本历史


git log命令

六、给文件重命名的简便方法

  1. 麻烦的方式
$ mv old_file_name new_file_name ## 第一步,修改文件名
$ git add new_file_name ## 第二步,将修改后的文件,添加到Git中
$ git rm old_file_name ## 第三步,移除掉旧的文件
  1. 简单的方式
$ git mv old_file_name new_file_name ## 通过git mv命令,直接将文
件名修改

七、通过git log查看版本演变历史

  1. 查看git log列表


    image.png
  2. 指定查看几个版本的历史


    指定查看最近两个版本的历史记录
    指定查看最近三个版本的历史记录,并以列表的形式显示

3、查看本地的分支信息


查看本地分支信息

4、新建一个临时分支,并稍作修改


image.png

查看所有分支历史版本信息


以图形化的方式查看所有分支的版本信息
总结
查看详细日志
$ git log
$ git log --graph ## 图形化显示
$ git log branch_name ## 查看branch_name分支的日志
查看简洁日志
$ git log --oneline
$ git log --oneline branch_name ## 查看branch_name分支的日志
$ git log --oneline --all
$ git log --oneline --graph
查看最近几次的日志
$ git log -n4 ## n4表示查看最近4次的日志
$ git log --oneline -n4

查看git 的命令api文档
$ git help --web log

八、gitk:通过图形界面工具来查看git历史

gitk命令


gitk图形工具

九、探秘.git文件夹

.git目录文件

  • HEAD文件
    该文件内容为当前的分支信息,切换分支的时候,该文件信息会随之改变,如下图所示


    HEAD文件
  • config文件
    存放了本地仓库的配置信息

    config文件
  • refs
    refs文件中存放了,所有分支和tag(里程碑)信息(40位的hash值),对应的是分支最新的一个commit哈希

    refs文件夹
  • objects
    objects文件夹下都是一些两位数的文件夹,里面存放一个40位hash文件,类型为tree,这个tree文件中又存放了一个blob对象,通cat-file命令查看,发现这个blob就是git管理的文件对象,如图所示是一个css文件。

    objects文件夹

十、commit、tree、blob三者之间的关系

commit就相当于当前仓库的一个快照,而一个commit也对应一棵tree(目录对应tree,文件对应blob)
tree就相当于文件夹


commit、tree、blob三者之间的关系

通过命令行来证明上面的图


image.png

十一、数一下tree的个数

image.png

答案:有两棵树(commit对应的一棵树,文件夹doc对应的一颗树),一个commit,一个blob


image.png

十二、分离头指针情况下的注意事项

分离头指针指的是,HEAD当前没有指向任何一个分支,而是某一个历史commit上。
1、分离头指针状态下,开发的代码,需要关联到分支,如果不关联到分支,在分离头指针状态下,切换到分支上时,分离头指针状态下开发的代码,将会被git清除


分离头指针 分离头指针的状态下,切换到master分支

十三、进一步理解HEAD和branch

# 基于新分支创建一个老的分支,此时git会自动切换到新建的分支上
$ git checkout -b newbranch oldbranch
# git diff命令可以这样比较两个commit(快照)的之间的差异
$ git diff d3af93fba4f0a  990c6561e69fee
# 使用git diff命令比较版本,也可以使用HEAD来指代当前版本与之前n个版本之间的区别
$ git diff HEAD HEAD~n

十四、删除无用的分支

git branch -d 分子名称
当-d无法删除,并且确认分支无用的情况下,使用-D进行强制删除


删除分支

十五、怎样修改最新commit的message

image.png

十六、怎样修改老旧commit的message

!怎样修改老旧commit的message](https://img.haomeiwen.com/i4038260/6ec0f55a8ef04bcd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
想要修改modify index and style这个commit message,则需要使用rebase变基操作,这里要用到这个commit的父亲commit,此时会弹出一个交互窗口,使用r命令来修改message

rebase
修改保存退出,又会弹出一个交互窗口,在这个交互窗口中修改commit messge,保存退出
image.png
修改成功

十七、怎样将连续的commit合并成为一个

git rebase -i 父亲commit的hash
在交互窗口中,将要合并的commit 使用squash(压缩命令进行合并),保存退出


rebase

输入合并的message保存退出


image.png

十八、怎样将间隔的commit合并成为一个

image.png

在交互窗口中将要合并的两个commit放到一起,使用s命令进行合并,保存退出
此时会有消息提示
git status查看状态
git rebase continue命令输入合并后的commit messge后,再保存退出


合并成功

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

git diff --cached-------比较暂存区和HEAD的差别


git diff --cached

二十、怎么比较工作区和暂存区的差异

git diff 比较工作区暂存区所有的文件差异

git diff

git diff -- filepath(可以指定多个文件)


git diff -- filepath

二十一、如何让暂存区恢复成HEAD的版本

git reset HEAD--------取消暂存区的修改,恢复到HEAD版本


git reset HEAD

二十二、如何让工作区恢复成暂存区的版本


修改暂存区使用git checkout命令,修改暂存区则使用git reset命令


二十三、怎么取消暂存区部分文件的修改

取消暂存区中index.html的修改


二十四、消除最近的几次提交

回退到以前的某个commit

二十五、看看不同commit的指定文件的差异

二十六、正确删除文件看的方法

二十七、开发中紧急加塞了紧急任务怎么处理

正常开发需求,修改了index.html和js文件



此时临时加塞了一个需求,比如项目bug修改,这个时候就需要把上面需求开发的代码暂存起来,用到命令git stash



可以看到之前两个文件的修改都被暂存到stash中了,然后我们就能开发我们的新需求

新需求开发完毕,提交版本库后,我们回过头来取出stash中暂存的两个文件修改



发现我们之前开发的代码被恢复了回来

二十八、如何指定不需要git管理的文件

通过添加名为.gitignore的文件,来指定

二十九、如何将git仓库备份到本地

image.png
image.png
image.png

新建一个文件夹git-backup,克隆远程仓库,可以看到远程仓库有两个分支master,temp
然后再远程仓库git_learning中添加备份仓库地址,新建一个pyy的分支,并push到备份仓库



然后查看备份仓库中的分支信息,发现也更新了pyy的分支


image.png

相关文章

  • git 使用三剑客

    git 使用三剑客gitwhy use githow use gitgitflowwhy use git flow...

  • Git

    玩转Git三剑客 学习笔记 配置 user 信息 显示 config 的配置,加 --list 建 git 仓库 ...

  • Git三剑客之Git

    一、Git概述 版本管理的演变1)集中式的版本管理(SVN) 有集中的版本管理服务器 具备文件版本管理和分支管理能...

  • 版本控制

    在开发中 git 是最常用的版本控制软件,在学习极客时间苏玲的《玩转 git 三剑客》前,对 git 的使用只停留...

  • Git 学习笔记 1

    参考:极客时间 玩转Git三剑客 1. Git 1.1 初始化 username email 保证变更信息能够溯源...

  • git资源学习

    git资源学习 Git详解之一 Git起步 Git详解之二 Git基础 Git详解之三 Git分支 Git详解之四...

  • Git 快速使用

    MENU Git 快速使用 之 配置并获取SSH公钥Git 快速使用 之 Git 分支 branchGit 快速使...

  • Git学习之思维导图

    Git学习之思维导图 Git学习之思维导图

  • git revert 与 git reset

    Git版本回滚之 git revert 与 git reset 在使用 git 的时候,如果错误push之后,经常...

  • Git-07: 用 Git log 查看版本

    李文轩 2019-02-19声明:这是本人学习极客时间的Git三剑客的笔记,有侵权请联系我。 常用 git log...

网友评论

    本文标题:Git三剑客之Git

    本文链接:https://www.haomeiwen.com/subject/ggllwctx.html