git是一个分布式版本控制系统
与SVN不同的是SVN是集中式的,有一个专门的服务器负责版本控制,而分布式管理控制系统不存在中央服务器,每一个电脑都有一个完整的版本库,不需要联网就可以工作。虽然分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是作为方便大家的修改。没有它大家一样可以干活,只不过方便了交换而已
基本概念
仓库(repository)
git的版本库,也可以说是git的仓库,英文repository,其实就是一个可以被git管理起来的目录。
工作区
其实就是你电脑上的那个目录
版本库
工程下有一个.git的文件,这个不属于工作区,而是git的版本库
暂存区
stage或index,一般在.git目录下的index文件中,所以我们把暂存区也叫做索引(index)
每一个文件的修改,删除git都可以追踪,以便git可以还原每一个历史的文件。
常见操作
git init
把一个目录变为git仓库,之后目录下会多了一个.git的文件夹。
添加文件(git add)
实际上是把文件添加到暂存区,也可以可以直接在目录下复制或新建。
提交文件(git commit)
实际上是把stage中所有的文件提交到当前的分支上。用法是:git commit -m "a file for test"
其中-m后边是对本次提交的说明性文字。
可以这么理解:首先将内容从工作区add到暂存区,然后通过commit一并提交到分支上,而且一提交后暂存区就没有任何内容了。
撤销修改(git checkout)
用法为:git checkout -- file_name
,可以撤销工作区的修改
例如git checkout -- readme.txt
的意思就是把readme.txt在工作区的修改全部撤销掉,这里有两种情况:
1. readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
2. 另一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态
删除文件(git rm)
在git中删除其实也是一种对文件的修改,一般情况下,可以直接在在工作区删除文件,此时工作区和版本库不一致,用git status会显示哪些文件被删除。可以通过两种方法进行同步:
- 确定删除这些东西:
git rm readme.txt
- 误删除,需要恢复之前的工作区内容:
git checkout -- readme.txt
如果一个文件已经被提交到版本库,那么永远不用担心误删,但是要小心,只能恢复文件到最新版本,而最近一次提交后所修改的内容都会消失。
连接远程仓库
- 首次需要关联远程仓库,
git remote add origin git@server-name:path/repo-name.git
其中server-name可以使远端的IP地址。
2. 使用git add/commit提交文件;
3. 推送到master分支
git push origin master
如果是第一次推送,需要加上-u命令,即git push -u origin master
,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令,直接使用git push origin master
就可以了.
clone
真正的clone很简单,一个命令
git clone url
注意:要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。