git操作详解
一、项目版本管理
项目在开发的过程中,经常会出现多人分工协作进行项目分发并开发整合的过程,所以项目在刚开始实行的时候经常会出现一些协作开发的同步的问题,同时存在项目整体进度的控制和管理的问题,所以在程序开发行业衍生出来了版本管理工具。
版本管理工具,首先是一个内容管理工具,可以将项目的内容信息存放在版本管理服务器上方便项目组人员进行访问和查询修改。
版本管理里程碑意义的三个阶段:
- CVS阶段:项目搭建开发过程中,每次提交项目都会将整个项目提交到服务器进行保存,服务器存储着项目的 N 个备份,开发过程中的协作效率较低,同时也出现了各种传输的问题,所以慢慢淡出了行业。
- svn阶段:考虑到 CVS 的缺陷,开发人员研发出专门针对项目版本控制的软件 Subversion (简称 SVN), SVN 同样也是搭建服务器,让项目组成员将数据存储在服务器上,但是每次改动并提交的时候, SVN 服务器并不重新保存整个项目的完整信息,而是和原来的项目进行对比,只保存改动的信息。这样就在很大的程度上对于项目版本服务器、项目协作效率有了显著的提升。所以至今为止,有很多公司依然选用 SVN 作为公司内部项目协作的版本控制软件。
- git阶段:前面的 CVS 和 SVN 都是基于一个服务器的,如果脱离服务器,项目的版本保存就没有了任何意义,Git 恰恰处理了这样的问题,Git 是一个分布式的版本控制系统,在 Git 中即使用户离线,也能进行项目的提交和更新操作,等到下次连线服务器时进行整体的同步操作。
-
Git与SVN比较:
git 是分布式的,svn 不是。
git 按照元数据的方式存储内容,svn 是按照文件的形式存储
git 和 svn 中的分支不同。
git 没有全局版本号,svn 有。
git 内容的完整性优于 svn。
0
二、git介绍
- Git 是一个开源的分布式版本控制系统,用于敏捷高效的处理任何项目的版本问题。
- Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
- Git 与常用的版本控制工具 CVS,SVN 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
1)本地库的介绍:
- 工作区:个人 PC 中能看到的文件目录结构
- 暂存区: stage/index,一般存放在.git/index 中,所以 git 中的暂存区也会称为索引。
- 版本库:工作区中的.git 隐藏文件,不算是工作区,而是 Git 的版本库。
图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。
图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。
当对工作区修改(或新增)的文件执行"git add"命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即master指向的目录树就是提交时暂存区的目录树。
当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
当执行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
三、本地库的操作
1.新建代码库
1)在当前目录新建一个Git代码库
# 在当前目录新建一个Git代码库
git init
2)新建一个目录,将其初始化为Git代码库
# 新建一个目录,将其初始化为Git代码库
git init [project-name]
3)下载一个项目和它的整个代码历史
# 下载一个项目和它的整个代码历史
git clone [url]
2.代码库的配置
git config:用于配置和读取相应的工作环境变量。有三个配置级别:
项目级别:(权限过小,重复设置)
用户级别:(常用)
系统级别:(用户容易混淆)
#系统级别:
#配置文件为git安装目录/mingw32/etc/gitconfig文件。
#配置命令:
git config --system user.name '账户'
git config --system user.email '邮箱'
#全局级别:
#配置文件为用户主目录~/.gitconfig文件。
#配置命令:
git config --global user.name '账户'
git config --global user.email '邮箱'
#项目级别:
#配置文件为项目目录/.git/config文件。
#配置命令:
git config user.name '账户'
git config user.email '邮箱'
#查看config文件内容命令:
git config –-list
3.增加、删除文件以及查看提交后的状态
1)查看提交后的状态
#查看上次提交之后的修改状态
git status
2)增加文件
# 添加指定文件到暂存区 git add [file1] [file2] ... # 添加指定目录到暂存区,包括子目录(自行扩展) git add [dir] # 添加当前目录的所有文件到暂存区(自行扩展)
git add .
在gitStudy文件夹新建test.txt文件。查看状态。(注意文件转态的变化)
3)删除文件
先通过linux命令创建三个.txt文件
#在工作区中删除文件
rm <filename>
#忽略对缓存区文件的跟踪。
git rm –cached <filename>
#缓存区文件重命名,并自动add到暂存区。
git mv <oldname> <newname>
#在版本库中删掉该文件。删除完以后还要git commit
git rm <filename>
4.代码提交
#将缓存区的内容提交到版本库中。
git commit [file]
git commit 命令回车后进入下图的页面(vim编辑器)(填写文件提交备注信息):
vim添加注释的操作命令:
-
按 a, i 或 o 进入编辑模式
-
按 ESC 进入操作模式
-
在操作模式下,:wq 为写入退出(w和q可以分开执行),:q! 不保存退出
退出vim编辑器的执行结果
#-m 选项用于提交时添加注释内容。(建议用此方法提交文件)
git commit -m "注释内容"
#提交工作区自上次commit之后的变化,直接到仓库区(不建议如此操作)
git commit -a
5.本地库的文件管理
管理修改:
#查看工作区和暂存区的文件内容差异。
git diff
#查看暂存区和版本库的文件内容差异。
git diff --cached
#查看工作区和版本库的文件内容差异。
git diff HEAD
撤销修改:
#用于取消用户已经缓存的内容。
git reset HEAD <filename>
为好说明,此处将我们敲的所有的案例全部提交版本库,只针对文件test.txt文件做相应的修改
#丢弃工作区的内容修改,相对而言就是用暂存区的文件覆盖工作区,未添加则不存在此操作
git checkout -- <filename>
6.版本管理的文件设置
.gitignore配置文件:用于配置不需要加入版本管理的文件。
配置语法:
1:所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
2:以斜杠“/”开头表示目录;
3:以星号“*”通配多个字符;
4:以问号“?”通配单个字符;
5:以方括号“[]”包含单个字符的匹配列表;
6:以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
7.分支管理
#查看所有本地分支。-r:查看所有远程分支。-a:查看所有本地分支和远程分支。
git branch
#新建分支。
git branch <分支名>
#新建一个分支,与指定的远程分支建立追踪关系。
git branch --track <分支名> <远程名>/<分支名>
#在现有分支与指定的远程分支之间建立追踪关系。
git branch --set-upstream <分支名> <远程名>/<分支名>
#切换分支。参数-b:新建分支并切换。
git checkout <分支名>
#根据远程分支建立本地分支(直接包含跟踪关系)。
git checkout -b <分支名> <远程名>/<分支名>
#合并分支
git merge <分支名>
#删除分支
git branch –d <分支名>
8.查看提交历史记录
#专门用于查看所有的 git 仓库操作历史数据的命令
git log
#查看项目的历史纪录的简洁版本
git log --oneline
#查看历史记录中的分支、合并等操作
git log --graph
#显示最近n条记录
git log –n
#显示简要的增改行数统计,每次提交文件的变更统计
git log --stat
#展开显示每次提交的内容差异
git log –p
9.版本回退
#回退到上一个版本。
git reset --hard HEAD^
#回退到前100个版本。
git reset --hard HEAD~100
#回退到具体的版本号(版本号没必要写全,前几位就可以了,Git会自动去找)。
git reset –hard <具体的版本号>
#查看所有分支的所有操作记录。
git reflog
四、远程仓库的操作
1.创建远程库(远程库使用的是国内的码云)
(1)注册码云账号
(2)拥有账号登录既可以创建远程库
通过上面简单操作,我们的远程库就算创建完成了,码云的使用和GitHub的使用基本上没有什么差别,GitHub国外的网站本人嫌弃太慢,所以直接使用码云!接下来我们的操作目标就是本地库和远程库进行连接且pull(拉取)、push(推送)代码。