前言
之前在公司管理项目都是使用的SVN,SVN是集中式版本控制工具。
集中化的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。其缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
然而Git就不存在这样的缺点,可以这么说吧,Git是目前世界上最先进的分布式版本控制系统(没有之一)
一、Git概述及安装
1、Git概述
Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
分布式就是每个人手里都有一份自己的历史记录,而集中式只是集中服务器上有所有人的记录
工作区:本地存放代码的位置,存放本地写的代码
暂存区:临时存储,可将工作区的代码添加(add)到暂存区
本地库:将暂存区的代码提交(commit)到本地库后才会生成历史版本
工作区和暂存区的代码是可以被删掉的,没有历史记录和历史版本
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
可以使用push将本地库的代码推送到远程库
、
2、Git下载及安装
1、下载地址:Git官网
2、安装时除了安装路径以及此页面外其余均保持默认即可
系统建议是选择第二个,第二个意味着我们可以在第三方软件以及windows cmd命令行使用Git,但是选择第二个会修改环境变量,一般我们不会用,所以选择第一个即可
安装成功后鼠标右键选择Git Bash Here可以进行Git的命令操作
二、Git常用命令
1、使用前配置(git config --global xx)
git config --global user.name 用户名 git config --global user.email 邮箱
设置用户签名:签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。
想更改这些信息时,可以直接编辑设置文件“~/.gitconfig”。这里设置的姓名和邮箱地址会用在Git的提交日志中。由于在GitHub上公开仓库时,这里的姓名和邮箱地址也会随着提交日志一同被公开,所以请不要使用不便公开的隐私信息。
将color.ui设置为auto可以让命令的输出拥有更高的可读性。
git config --global color.ui auto
在Git bash中输入这些指令后
在Windows C:\Users\用户名 目录下有个.gitconfig的文件会记录这些信息
2、初始化本地库(git init)
让git获得目录的管理权。
git init
建议直接从需要操作的目录中进入git bash
设置查看文件夹选项->显示隐藏的文件夹,此时可以在文件夹下看到.git文件夹
注:git bash中的命令是和linux通用的
.git目录里存储着管理当前目录内容所需的仓库数据。在Git中,我们将这个目录的内容称为“附属于该仓库的工作树”。
3、查看本地库状态(git status)
git status
在主分支下,当前没有提交(空)
4、本地文件添加到暂存区(git add xx)
1、先创建一个本地文件hello.txt,并写入hello git!内容
vim hello.txt
:wq保存
2、查看本地库状态
git status
未追踪的文件
3、本地文件添加到暂存区
git add hello.txt
git默认转换了换行符
查看本地库状态
git status
此时文件存在于工作区&暂存区。是可以删除且不显示历史版本的 (use “git rm --cached …” to unstage)
执行下述指令后,只删除了暂存区的,工作区依然存在
git rm --cached hello.txt
如果不改变暂存区的文件,只把工作区文件删除(选中文件->右键->删除):
git会记录操作历史,可以用git restore xx恢复文件或手动将其从缓存区删除
git restore hello.txt
5、提交本地库,形成历史版本(git commit -m xx)
1、git commit命令可以将当前暂存区中的文件实际保存到仓库的历史记录中。
git commit -m "版本日志" 文件名
48f8429是版本
git status
2、当文件夹中所有文件都提交到本地库后,查看本地库状态,显示没有需要提交的
3、查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作
git reflog
此时指针指向第一个版本
4、查看详细日志不仅可以看到不同版本,还能看到是谁提交的(显示用户签名),此时显示的版本号是完整的版本号
git log
6、修改文件
模拟企业中版本和代码的迭代
vim hello.txt git status
修改文件后查看状态,可以看到修改记录,但此次修改还未加入暂存区:
git commit -m "my 2nd commit" hello.txt git reflog
git是按行维护文件的,修改了其中的一行就会显示一行被修改(把修改之前的删掉,插入修改之后的):
此时指针指向第二个版本
7、历史版本及版本穿梭(git reset --hard xx)
1、查看历史版本
git reflog //查看版本信息(显示的版本号是精简版的) git log //查看版本详细信息(显示完整版本号) git log --pretty=short //仅显示第一行简述信息 git log --graph //可视化显示版本信息
只要在git log命令后加上目录名,便会只显示该目录下的日志。如果加的是文件名,就会只显示与该文件相关的日志。
git log命令只能查看以当前状态为终点的历史日志
git reflog命令可以查看当前仓库的操作日志。
git log hello.txt //查看关于该文件的改动 git log -p hello.txt //查看该文件改动前后的差别
git diff查看工作树、暂存区、最新提交之间的差别。
执行git diff命令,如果工作树和暂存区的状态并无差别,什么都不会显示
要查看与最新提交的差别,执行git diff HEAD
2、版本穿梭(回溯历史版本)
如果想要切换到之前的版本,可以先查看对应的版本号
git reflog git reset --hard 48f8429 git reflog
打开.git文件夹下的HEAD文件,可以看到ref: refs/heads/master,表明指针指向master,目前处在master分支上
打开".git\refs\heads\master"文件可以看到当前指向的提交版本的哈希值。
版本穿梭会直接刷新工作区当前的文件内容
Git 切换版本,底层其实是移动的 HEAD 指针,而不是创造很多副本