Git是一个分布式的版本控制系统,github可以用于管理项目版本控制。
msysgit是Windows版的Git,从http://msysgit.github.io/下载,然后按默认选项安装即可。
工作原理
在开始正式尝试使用之前,先简单看一下GIT的工作原理:
、
在本地GIT仓库当中,实际分为工作区和版本库。简单来说:
- 工作区就是你存放工作文件的目录。
- 而当执行git init创建本地git仓库之后,隐藏的“.git”目录下就是版本库。
- 版本库当中有一个被称为“stage”或者“index”的暂存区。
- 当我们申请创建仓库之后,git会为我们创建版本库中的第一个默认的分支“master”,既主分支。
- 以及指向当前所使用分支的一个指针“HEAD”。
- git add将改动的文件提交到了暂存区。
- git commit将提交到暂存区存放的改动文件,一次性提交到我们的仓库分支上。
常用命令介绍
了解了基本原理,我们来看一下实际工作中最常用到的一些命令:
1、向git表明身份:
git config --global user.name "Your Name"
git config --global user.email "Your Email"
注:“global”参数代表当前机器上所有的GIT仓库都会使用这个配置。
2、将普通目录设置成GIT仓库:
git init
3、提交文件到GIT仓库:
git add 文件路径
git commit -m “提交说明”
4、查看GIT仓库中的内容的改动状态:
git status
5、如果有仓库状态有所改变化,查看变化的具体情况:
git diff 文件名
6、查看仓库中的历史“commit”记录:
git log 或 git log --pretty==oneline
7、版本回退
git reset --hard HEAD^
git reset --hard 版本号
注:
- HEAD用于表示当前版本,^表示上一版本,^^则表示上上个版本,而例如100个版本之前,可以写作HEAD~100.
- GIT每次通过“commit”执行提交时,会生成一个对应的通过SHA1计算出的“commit id”,也可以通过此来更改仓库的当前版本。
8、查看“未来”的“commit id”:
git reflog
注:昨天你GIT仓库回退到了某个版本,但今天打开电脑你重新考虑后还是应该换回昨天回退之前的版本。这个时候,通过“git log”命令已经无法得到该版本的“commit id”了,因为该版本的提交位于你回退的版本之后,你无法通过历史记录查询到该版本的id。这是reflog能够帮你解决。
9、用版本库中的版本替换工作区中的版本:
git checkout -- 文件名
注:该命令使用可以分为两种情况:
一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一此commmit或add时的状态。
10、撤销暂存区的修改内容(既撤销掉通过“git add”提交过的内容):
git reset HEAD 文件名
注:由此可以发现,“git reset”不仅可以回退版本,还可以撤销暂存区的改动。
11、删除文件:
git rm 文件名
12、添加远程仓库:
git remote add 远程仓库链接
13、推送改动到远程仓库:
git push origin master
14、从远程仓库获取改动内容
git pull origin master
注:
第一次提交时,可以使用git push -u origin master。之所以这样做是因为:
我们使用git push命令,实际上是把本地版本库中的master分支的内容提交到远程库。
加上“-u”参数,则代表不但会把本地master的最新内容推送到远程库新的master分支,还会将两个分支联系起来。
14、克隆远程仓库的内容到本地仓库:
git clone 远程库链接
模拟场景运用
了解了这么多GIT的常用命令之后,我们来模拟一些场景来联系一下真实的运用。使用GIT的最通常都的目的都是:多个人协同完成一项工作内容!
那么假设我们现在有如下情况:你和小明约好一起写一篇文章,你负责文章的上半部分,小明负责文章的下半部分。
于是,首先你和小明一起在github上创建了一个共同的远程仓库。假设,远程仓库的地址为:git@github.com:meAndxiaoming/article.git.
现在,远程库建立好了,你和小明都得到了远程仓库的地址,负责文章上半部分编写的你决定率先开始工作:
1、首先你会做好的你git配置,向git表明自己的身份,打开git命令行工具,输入:
- git config --global user.name "me"
- git config --global user.email "me@me.com"
2、完成git的初始你在自己的电脑上建立了一个文件夹“MyArticleRepertory”,用于存放文章。
3、此时建立的文件夹“MyArticleRepertory”只是一个在你的电脑上用于存放文档的目录,它还和git没有产生联系。为此,我们决定先在该目录下建立我们自己的本地GIT仓库,于是继续输入命令:
- git init
- git addMyArticle.txt
- git commit -m "第一次编写工作存档"
- git reset --hard HEAD^
- git checkout --MyArticle.txt
- git reset HEADMyArticle.txt (首先,将暂存区的改动撤销)
- git checkout -- MyArticle.txt(接着,将版本库里的内容覆盖掉我们工作区的内容,既撤销我们这次在工作区做的最新改动)
- git reset --hard HEAD^(当你执行完了这么多操作,实际也就是完成了一次版本提交了,所以想要撤销改动,实际就是做版本回退的工作了)
- git rm 牢骚.txt.
- git commit -m "发牢骚是我不对"
8、在你情绪最低落的时候,你爆发了,我尼玛不干了,随后你删除了MyArticle.txt。当你冷静下来,工作还是要继续,但是用于保存文章的MyArticle.txt已经被你删掉了。别怕,这是使用版本库的好处就体现了,你可以找回它,还记得checkout命令吗?
- git checkout --MyArticle.txt
- git add MyArticle.txt
- git commit -m “上半部分成功完成,小明快接着写下半部分吧!”
- git remote add origin git@github.com:meAndxiaoming/article.git (首先,你当然需要将远程库添加你的本地库来)
- git push -u origin master (将我们本地仓库的master分支与远程库的master分支绑定,并将本地分支上的内容全部推送到远程分支上。此时,我们的文章,实际就已经存放到远程仓库了)。
- git log
11、终于有一天,小明通过“git log”命令查看到了一次提交,并且发现注释为“上半部分成功完成,小明快接着写下半部分吧!”。小明很开心,马上着手将存放到远程库的上半部分克隆到本地仓库:
- git clone git@github.com:meAndxiaoming/article.git
12、随后小明完成了下半部分的编写工作,将文章提交到了远程库,至此,你们的协同工作也就完成了。而假设你们的文章发表后,反响不错。于是你们决定写第二部。这个时候,你们中间如果有人想要从远程库获取最新改动,由于此时你们在自己电脑上已经有相关联的本地库了,就不必再使用克隆,只需要将远程库的最新改动“拉”下来就行了:
- git pull origin master