Git基础

一、关于版本控制

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。目前存在以下三种版本控制系统:

1、本地版本控制系统

通过复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。这么做唯一的好处就是简单。不过坏处也不少:有时候会混淆所在的工作目录,一旦弄错文件丢了数据就没法撤销恢复

2、集中式版本控制系统

接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作?于是,集中化的版本控制系统( Centralized Version Control Systems,简称 CVCS )应运而生。这类系统,诸如 CVS,Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

这样做法带来了许多好处,相对于老式的本地版本工具来说,每个人可以看到项目中其他人在做什么,管理员也可以轻松的分配权限,也有许多弊端,集中式版本控制系统,每个人的操作会直接与中央仓库进行交互,如中央仓库宕机,任何人将无法操作,也会受限于网络波动等原因。

3、分布式版本控制系统

在这类系统中,像 Git,Mercurial,Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。

二、Git工作方式

Git属于分布式管理系统,安装git客户端后,每个人的本地都相当于一个git仓库,Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接.

1、提交仓库的五个状态,四个区域

5种状态:未修改origin/unmodified、已修改modified、已暂存staged、已提交committed、已推送:pushed

特点:1、几乎所有操作都在本地进行  2、  时刻数据完整性(在提交到git之前,所有内容都要进行校验形成一个40个十六进制的字符,所有保存在git数据库中的东西都通过此哈希值索引)

2、git提交方式

这就有git独特的提交方式:git add → git commit -m  →git push 

git add :跟踪新文件,后面可以指明要更新的文件和目录路径,也可以加上 . (点)代表加入所有未纳入版本库的文件。译文:官方的解释git add 的潜台词就是把目标文件快照放入暂存区域,也就是 add file into staged area,同时未曾跟踪过的文件标记为需要跟踪

git commit:提交到本地仓库。-m代表添加注释,-a代表git add和git commit合并

git push origin master:推送到名为origin的远程仓库的master分支

3、git获取代码方式

git clone url:克隆代码

git pull:拉取远端代码并与本地代码合并(#在你要提交代码到远端服务器之前,一定要做pull,保证你与远端版本一致,此过程有可能会有冲突,先解决冲突,再提交)

git fetch:拉取远端仓库到本地仓库

git merge:合并操作

所以说,git merge + git fetch = git pull

4、常见的命令

#上面两图中的命令不在做分析

git status:查看文件状态

git diff: 查看已暂存和未暂存的更新,也就是修改之后还没有暂存起来的变化内容。

git diff --cached : 查看暂存起来的文件和上次提交时的快照之间的差异,Git1.6.1版本以后可以用git diff --staged

git rm:删除已经提交的文件,-f:如果之前已经修改过并且放入暂存区,需加-f

git mv:移动文件,git并不跟踪文件移动操作,相当于以下两条命令:git rm xx.txt     git add xx.txt

git log: 查看提交历史,默认只显示commitID、作者、提交日期,-p代表每次提交的内容差异,-2代表最近两次日志,--stat代表显示行数,--pretty=oneline代表简化日志信息,一行显示,也可以定制日志格式,例如:Git log git log --pretty=format:"%h - %an, %ar : %s":各选项含义见下方附录

git checkout:取消对文件的修改(没有提交到暂存区,也就是没有git add过),也可以用作切换分支(前提要保证当前工作区的整洁)

git tag:创建标签,标签时用来记录开发过程中的一些关键时刻,-m:添加标签注释

5、小技巧

1、git命令别名:

例如:git config --global alias.co checkout ,此时git checkout = git co

           git config --global alias.last 'log -1 HEAD',  此时git last = git log -a HEAD

附录:

选项  说明
%H    提交对象(commit)的完整哈希字串
%h    提交对象的简短哈希字串
%T    树对象(tree)的完整哈希字串
%t    树对象的简短哈希字串
%P    父对象(parent)的完整哈希字串
%p    父对象的简短哈希字串
%an   作者(author)的名字
%ae   作者的电子邮件地址
%ad   作者修订日期(可以用-date=选项定制格式)
%ar   作者修订日期,按多久以前的方式显示
%cn   提交者(committer)的名字
%ce   提交者的电子邮件地址
%cd   提交日期
%cr   提交日期,按多久以前的方式显示
%s    提交说明 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值