Git是一种分布式版本控制系统,既然提到了分布式,那肯定也有集中式版本控制系统了,常见的集中式版本控制系统有:CVS和SVN。
对于集中式版本控制系统,版本库是放在*服务器的,如果我们要对版本库中的文件进行操作,必须首先联网,取得服务器中的最新版本,然后在本地电脑操作完毕之后,再将自己的操作内容推到服务器上。*服务器类似于图书馆,当小明借了图书A(图书A唯一)后,小红必须等到小明归还图书A后,才能借这本书(是不是感觉像编程语言中的同步模式。。)。
对于分布式版本控制系统,并没有*服务器,在每个人的电脑上都可以有一份完整的版本库,因此,用户并不需要联网,并且彼此的操作是独立的。分布式版本控制系统通常也有一台充当“*服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
在总结Git的常用命令之前,首先在github上创建一个仓库,用来测试Git的常用命令。点击进入仓库
本地一个仓库用来对应于github上的仓库。
mkdir git-practice //首先在本地创建一个目录
cd git-practice // 进入创建的目录中
git init //这个命令主要是将当前目录变为Git可以管理的仓库,在当前目录中会生成一个.git目录,这个目录是用来跟踪管理仓库的,非常重要,不要乱改。。
echo "# git-practice" >> README.md //创建一个文件
git add README.md //将创建的文件添加到本地仓库中(注:其实这个命令是将所做的修改提交到暂存区中,暂存区概念之后会说)
git commit -m "first commit" //将暂存区中的内容提交到仓库中,-m 可以认为对于提交的内容添加一个注释
git remote add origin git@github.com:jiangxr/git-practice.git//用于关联本地仓库和github的远程仓库,让我们本地的修改能够提交到远程仓库中
git push origin master //将本的修改内容提交到上一个命令关联的远程仓库的master分支上
上面介绍的是最基本的一般性操作,能够将我们修改的内容提交到远程的仓库中。。
工作区和暂存区
Git和SVN的一个重要区别是,Git中有暂存区的概念。我们在电脑上直接可以操作的目录就是工作区。而其中的隐藏目录.git其实就相当于版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
常用的命令git add其实就是将所做的修改提交到暂存区中,而git commit其实是将暂存区的所有内容提交到当前分支。上面的一幅图需要理解透彻,大部分命令都是基于这个结构来实现不同的操作。
Git常用命令
添加远程仓库(git remote add)
git remote add origin git@github.com:jiangxr/git-practice.git
从远程仓库克隆(git clone)
git clone git@github.com:jiangxr/git-practice.git
显示工作树的状态(git status)
在图片的显示中,bb.txt文件新创建的,已经使用git add命令提交到暂存区中;README.md文件是之前已经有过提交的记录,现在仅仅进行了修改,没有其他操作;aa.txt文件新创建了,没有其他的任何操作。显示了三种文件的不同状态。
显示最近到最远的提交日志(git log)
回退版本(git reset [–hard|soft|mixed|merge|keep] [< commit > 或 HEAD])
-
–hard:
替换引用的指向.引用指向新的提交ID;
替换暂存区.替换后,暂存区的内容和引用指向的目录树一致;
替换工作区.替换后,工作区的内容变得和暂存区一致,也和HEAD所指向的目录树内容相同. -
–soft:
替换引用的指向.引用指向新的提交ID,即只更改引用的指向,不该编暂存区和工作区. -
–mixed:
替换引用的指向.引用指向新的提交ID;
替换暂存区.替换后,暂存区的内容和引用指向的目录树一致;
即更改引用的指向及重置暂存区,但是工作区不变.
取消工作区的修改(git checkout – filename)
这个命令的实质是用暂存区的内容覆盖工作区对应文件的额内容。
隐藏当前工作现场(git stash)
如果现在正在branch1分支上进行作业,但是作业进行到一半,有一个急需的bug需要修复,但是完成一半的作业还不能进行提交,可以使用git stash命令将完成一半的作业隐藏起来,然后再创建一个分支修复bug。
git stash list // 显示隐藏的修改内容
git stash pop //恢复隐藏的修改内容,stash内容删除
git stash apply //回复隐藏的内容,stash内容不进行删除
标签操作(git tag)
git tag < name > //新建一个标签,可以指定commit id。
git tag //查看所有标签信息
git tag push < tagname> //推送一个本地标签
git tag push --tags //推送本地所有未推送的标签
git tag push origin < tagname> //推送标签到远程
git tag -d < tagname> //删除本地的一个标签
git tag push :refs/tags/< tagname> //删除远程的标签
显示尚未暂存的目录更新的内容(git diff)
其实就是比较工作目录和暂存区的区别
上面主要简要的介绍一些比较常用的命令,算是平常用的比较多的了