git的使用(入门篇)
1.Git 的安装
Window 下的安装
从 http://git-scm.com/download 上下载window版的客户端,然后一直下一步下一步安装git即可,请注意,如果你不熟悉每个选项的意思,请保持默认的选项
Ubuntu 下安装
在终端下执行 apt-get install git
Centos/Redhat 安装
在终端下执行 yum install git
Fedora23 安装
在终端下执行 dnf install git 或者 yum install git
Fedora22/21 安装
在终端下执行 yum install git
SUSE/OPENSUSE安装
在终端下执行 sudo zypper install git
Mac OS X 安装
在终端下执行brew install git (注:请自行解决环境变量以及Brew工具的问题)
编译安装(注:仅适合非window系统)
从 https://github.com/git/git/releases 上选取一个版本下载,解压缩后进入到 Git 的目录然后依次执行以下代码:
make configure
./configure
make all
sudo make install
注意:如果遇上无法编译的问题,请自行通过搜索引擎来查找 Git 所需的依赖
如果以上一切正常,打开终端(Window下请打开安装git时一并安装的bash) 输入 git --version 应该会显示如下类似的信息
git version 2.5.0
配置自己的用户名和邮箱
在使用git前,我们需要告诉git自己是谁以及自己的邮箱是什么,所以我们需要对git进行一些基本设置。打开终端(Windows打开安装git时安装的git bash)执行如下命令
git config --global user.name "你的名字或昵称"
git config --global user.email "你的邮箱"
这样就配置好了这台电脑的git 如果您没有安装git bash或者使用其他工具,建议您查找该工具的设置教程,本文档建议使用命令行终端操作git,这样遇上的兼容性问题最小。
关于如何配置sshkey问题,请参阅ssh key相关问题
Git 的一些基本名词/概念/常用命令解释以及实例
仓库
在 Git 的概念中,仓库,就是你存在.git
目录的那个文件夹内的所有文件,包括隐藏的文件,Git程序会再当前目录以及上级目录查找是否存在.git
文件,如果存在,则会将.git
目录存在的文件夹开始下的所有文件当成你需要管理的文件,所以,我们如果想将某个文件夹当做一个Git仓库,你可以在那个文件夹下通过终端(Window为Cmd或者PoewrShell或者Bash)来执行
git init
这样,你所期望的那个文件夹就成为了一个Git管理的仓库了
版本
严格来讲,Git并不存在版本的概念,但人们也硬是发展出了这么个玩意,在Git中,计数基础是提交,即我们常说的Commit,我们每做一点更改便可以产生一次提交,当提交累计起来,可以作为产品定型时,就在当前的Commit上打上一个标记,将这个标记我们称之为版本多少多少,那么就算完成了一个版本,标记本身被称之为Tag,请注意,在Git中,版本仅仅只是某一个提交的标签,并没有其他意义,Git本身也仅有打标签的功能,并没有版本功能,版本功能是根据Tag来扩展的,Git本身并没有
分支
这是Git中最重要的也是最常用的概念和功能之一,分支功能解决了正在开发的版本与上线版本稳定性冲突的问题在Git使用过程中,我们的默认分支一般是Master,当然,这是可以修改的,我们在Master完成一次开发,生成了一个稳定版本,那么当我们需要添加新功能或者做修改时,只需要新建一个分支,然后在该分支上开发,完成后合并到主分支即可
提交
提交在Git中同样是非常重要的概念,Git对于版本的管理其实是对于提交的管理,在整个Git仓库中,代码存在的形式并不是一分一分的代码,而是一个一个的提交,Git使用四十个字节长度的16进制字符串来标识每一个提交,这基本保证了每一个提交的标识是唯一的,然后通过组织一个按照时间排序的提交列表,就组成了我们所说的分支,请注意,分支在本质上只是一个索引,所以,我们可以任意回退,修正,即使因为某些原因丢失了,也可以重建另外,关于Git的储存方式:Git是仅仅只储存有修改的部分,并不会储存整个文件,所以,请不要删除文件夹整个文件夹的内容,除非你确定你不再需要他,否则请勿删除
同步
同步,也可以称之为拉取,在Git中是非常频繁的操作,和SVN不同,Git的所有仓库之间是平等的,所以,为了保证代码一致性,尽可能的在每次操作前进行一次同步操作,具体的为在工作目录下执行如下命令:
git pull origin master
其中origin
代表的是你远程的仓库,可以通过命令 git remote -v
查看,master
是分支名,如果你本地是其他分支,请换成其他分支的名字,另,因为远程仓库与你本地仓库可能存在冲突,故当存在冲突时,请参考进阶篇的如何处理冲突
推送
和拉取一样,也是一个非常频繁的操作,当你代码有更新时,你需要更新到远程仓库,这个动作被称之为推送,执行的命令与拉取一样,只是将其中的pull
这个单词改成push
,同样,如果远程仓库存在你本地仓库没有的更新,则在推送前你需要先进行一次同步,如果你确定你不需要远程的更新,则在推送时加上 -f
选项,则可以强制推送,注:在协同开发中,我并不建议这么做,因为这样很可能覆盖别人的代码
推送代码示例:
git push origin master
强制推送代码示例:
git push origin master -f
git push -u origin master -f
冲突
在使用Git开发时,如果只是一个人使用,那么基本不会产生冲突,但是在多人合作开发的情况下,产生冲突是很正常的一件事情,关于如何处理冲突,请参考进阶篇的如何处理代码冲突 这一小节
合并
合并这个命令通常情况下是用于两个分支的合并,一般用于本地分支,远程分支多用Pull命令,该命令的功能是将待合并分支与目标分支合并在一起,注意,这个命令只会合并当前版本之前的差异,两个分支的提交历史会根据提交时间重新组织索引,故只可能会产生一次冲突但是会生成一个提交,如果你不想生成这次提交,加上 --base
参数即可
暂存
这个既是一个概念也是一个命令,其含义就是字面上的,作用就是可以将你当前正在进行的工作暂时存起来,然后在此基础上干别的事情,等你别的事情干完后,再转回来继续,注意,暂存只是针对你最后一次改动而言,即针对当前所在的版本的所有改动都算具体执行命令为:
将当前改动暂存起来:
git stash
恢复最后一次暂存的改动
git stash pop
查看有多少暂存
git stash list
撤销
撤销命令使用是非常频繁的,因为某些原因,我们不再需要我们的改动或者新的改动有点问题,我们需要回退到某个版本,这时就需要用到撤销命令,或者说这个应该翻译成重置更加恰当。具体命令如下:
撤销当前的修改:
git reset --hard
请注意:以上命令会完全重置你的修改,如果你想保留某些文件,请使用checkout +文件路径 命令来逐一撤销修改
如果你想重置到某一版本,可以将 --hard
改为具体的Commit的id如:
git reset 1d7f5d89346
请注意,这时你的修改仍然存在,只是你的最近一次提交的版本号变成了你要重置的版本,如果说你想完全丢弃修改,只需要加上 --hard参数就可以
这里解释的只是一些工作中经常用到的git的基本概念,名词,并不包含Git的所有名词,概念解释,故本文未提到之处请自行使用搜索引擎搜索;另:文档编撰者尽可能的寻找标准的解释,因结果来自于互联网,如果解释有错漏之处,烦请指出并给出正确的解释,谢谢
另,本文仅提到部分常使用的概念以及命令,但Git远远不止这些东西,所以,在本文找不到的内容请自行百度,这里推荐 Git的官方文档(中文和英文均有,由官方以及志愿者维护):http://git-scm.com/book/zh/v2 ,廖雪峰博客:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
如何克隆一个项目
以克隆项目git@git.oschina.net:zxzllyj/sample-project.git
为例(注:本处使用的是ssh地址,因为演示机已经配置好ssh公钥,故可以使用ssh地址,如果您没有配置公钥,请使用https地址)
注:上图的方法虽然将仓库完整的拉取了下来,但是仅仅只会是显示默认分支,如果需要直接到指定的分支,可以在仓库地址后面加上分支名
Git 仓库的一些基本操作
1.修改仓库名
一般来讲,默认情况下,在执行clone或者其他操作时,仓库名都是 origin 如果说我们想给他改改名字,比如我不喜欢origin这个名字,想改为 oschina 那么就要在仓库目录下执行命令:
git remote rename origin oschina
这样 你的远程仓库名字就改成了oschina,同样,以后推送时执行的命令就不再是 git push origin master 而是 git push oschina master 拉取也是一样的
2.添加一个仓库
在不执行克隆操作时,如果想将一个远程仓库添加到本地的仓库中,可以执行
git remote add origin 仓库地址
注意: 1.origin是你的仓库的别名 可以随便改,但请务必不要与已有的仓库别名冲突 2. 仓库地址一般来讲支持 http/https/ssh/git协议,其他协议地址请勿添加
3.查看当前仓库对应的远程仓库地址
git remote -v
这条命令能显示你当前仓库中已经添加了的仓库名和对应的仓库地址,通常来讲,会有两条一模一样的记录,分别是fetch和push,其中fetch是用来从远程同步 push是用来推送到远程