前言
对于Git,想必大家都不陌生。Git以其最优的存储能力、非凡的性能、开源、容易做备份、支持离线操作、容易定制工作流程,因而对于项目开发过程中版本管理特别方便,尤其是对于多人进行合作进行项目开发时,Git可谓是一把利器。
此处小凡学习了极客时间上携程代码平台负责人苏玲主讲的关于Git视频课程,在文末我将给出课程链接,感兴趣的小伙伴可以自行购买学习。在此小凡整理了下学习笔记(笔记中的图片部分来自视频截图,如有侵权,请联系删除),以希望让更多人受益。
Git的安装教程,可参考以下网址,给出了在Linux、Mac、Linux以及从源代码安装教程:
https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git
上述安装完之后,在终端下执行下面的命令,查看是否返回git的版本:
$git --version
首先,我们配置user.name和user.email。
$git config --global user.name ‘your_name’
$git config --global user.email’your_email@domain.com’
备注,这里的global有何作用呢?
简单介绍下,config的三个作用域:
$git config --local (local只对仓库有效,如果缺省的话,默认等同于local)
$git config --global (global对登录用户所有仓库有效)
$git config --system (system对系统的所有用户有效)
那么我们如何显示config的配置呢?加--list
$git config --list --local
$git config --list --global
$git config --list --system
如果我们想清除我们的user.name或者user.email,我们可以按如下:
$git config --unset --local user.name
$git config --unset --global user.name
$git config --unset --system user.name
当然,优先级:local>global>system
共有两种方式:
1、用Git之前已经有项目代码
$cd 项目代码所在的文件夹
$git init
2、用Git之前还没有项目代码
$cd 某个文件夹
$git init your_project #会在当前路径下创建和项目名称同名的文件夹
$cd your_project
对于这部分,简单总结如下:
1)对于工作目录修改后的文件,使用以下命令上传到暂存区(这可以理解为待定区,临时保存,要习惯使用)。
$git add 文件名或是文件夹名
小技巧,对于多个文件被修改,可以使用如下命令一起更新:
$git add -u
2)如果已经上传到暂存区,可以使用以下命令提交到历史库。
$git commit -m “注释”
以将文件readme重新命名为readme.md为例,可以通过以下方式:
方法一:(需要三步)
$mv readme readme.md
$git add readme.md //将重命名的文件添加到暂存区
$git rm readme //删除原来的文件
方法二(推荐 仅需一步)
$git mv readme readme.md
$git log //查看版本历史
$git log --oneline //一行简洁地显示
$git log --oneline --all //所有分支的演进历史
$git log --oneline --all -n4 //只看就近的4个历史
$git log --online --all --graph //以图形化形式呈现版本历史
$git help --web log //在web网页查看git log的使用方法
$git branch -v //查看本地有多少分支
在我们的git分支终端命令行输入,即可打开图形界面。
$gitk
首先,在我们的本地仓库终端输入:
$ls –al
可以看到我们的目录中有个.git,接下来,我们进入到.git目录下:
$cd .git
原来.git目录里有这么多东西。对于HEAD文本文件里面到底装的是什么呢?
$cat HEAD
我们通过以上指令便可以查看。
上面指出来,HEAD里是一个引用,指向分支:refs/heads/config_file_dev
通过以下命令,可以知道config_file_dev为我们当前的分支
$git branch -av
同样,大家可以使用如下命令查看其它对应文件。
$cat config //存放user.email和user.name等信息
$cat refs //存放各个分支和tags的信息
$cat objects // 核心