前言
Git是什么
Git是一个代码版本管理工具
什么是代码版本管理工具
做为软件开发工作者,协同工作是必不可少的事情,代码管理工具给我们带来了许多的方便,代码合并、创建分支、日志等等。
同为版本管理工具,Git和SVN的区别是什么
- Svn是集中化的版本控制系统,受限于服务器,比如:提交记录,如果我离线的话,提交记录是看不到的。
- Git分布式版本控制系统,在代码同步的时候所有日志在本地都会有保存,就算没有网络也可以很方便查看到各种记录。
为什么我们要使用Git
相对Svn而言,Git拥有非常灵活轻巧的分支功能,Svn的分支需要完全拷贝一份项目代码,而Git的所有分支都在同一个文件夹内,根据版本号进行回滚或返回操作。我们甚至可以为每一个任务建立一个分支,新特性就在新特性分支上,Bug修改就在Bug修改的分支上开发完成后合并到主分支就好。下面我们就开始吧!
一、Git的安装
- Windows系统 Git官方下载地址
- Linux系统(主要以centOS、ubuntu为例)
// centOS
yum install git-core
// ubuntu
apt-get install git
- MacOS(其实现在MacOS自带Git,安装就不多做介绍了)
二、创建版本库
- 新建一个目录。这里我们创建一个learngit目录。
- 通过命令把这个目录变成Git可管理的仓库
git init
Initialized empty Git repository in /Desktop/learngit/.git/
- 命令输入后Git会自动帮我们生成第一个主分支master,在未做分支操作时,我们所有的代码都将提交到这个主分支上。
三、代码提交
- 首先针对新创建文件。必须要先使用add告诉仓库,这是新创建的,否则提交代码时仓库会检查不到仓库内有该文件的缓存。忽略这个文件的变更提交。
// 新增单个文件可以使用
git add xxx.js
// 当你这次创建了多个文件想一并添加到仓库缓存区时可以使用
git add .
// 当你是使用windows提交代码的时候.也许会出现这个错误提示。
warning: LF will be replaced by CRLF in index.html.
The file will have its original line endings in your working directory.
// 主要是因为windows中的换行符为 CRLF, 而在linux下的换行符为LF,
// 导致的错误,在当前目录下输入以下命令可以解决这个问题
git config core.autocrlf false
- 仓库状态查看,这个命令可以查看当前仓库下有哪些文件发生了变动。
git status
- 下面就可以开始提交代码了。
git commit -m "first commit" // 引号内为备注信息,方便以后查看日志
// 如果你是第一次提交代码Git会提示
*** Please tell me who you are.
// 代码提交时Git为你的每一个提交都记录你的名字与电子邮箱地址,
// 所以第一步需要配置用户名和邮箱地址。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
// 设置完成后,就可以进行代码提交了
四、版本回退
当我们提交完代码后再次进行开发调整,最后发现并没有当初调整前的理想,又没办法撤回到最初调整时的样子,这时候我们就可以利用版本回退这个功能让你的代码回退到你某次代码提交时的状态。
- 首先我们需要查看提交日志
git log
commit 04fcb4ecb384463b17efffae036b73afa5c8969c (HEAD -> master)
Author: xxxx <xxxx@xxxx.com>
Date: Sat Dec 9 16:07:37 2017 +0800
first conmit
// 可以查看到以往的提交记录列表以及对应提交的hash值
git reset --hard HEAD^
// HEAD代表当前版本,^代表往前回退1个版本 ^^代表2个 更多也可以使用~
五、撤消修改与删除文件
- 撤消修改
git checkout -- xxxx.xxxx
// 这个命令直接可以让文件回到commit时的状态。
// 切记 -- 是必须的。如果没有 -- 这个命令将是另外一个功能
- 删除文件
git rm xxx.xxx
// 当你本地文件删除后,其实在仓库里依然还保存着。执行这个命令把仓库里的也删掉
六、分支
分支是Git的核心,在实际开发中,也许这一版的任务刚提测,下一版的开发任务就来了。这时候,我们可以创建一个新的分支进行下一版任务的开发,这一版测试提bug的时候我们就可以把分支切换回去改bug,不会影响下一版本的代码。
- 查看分支
git branch
* master
// 当前我们就只有一个分支
- 创建分支
git branch dev
git branch
dev
* master
// 创建一个分支,但是指针依然指向原来的分支
git checkout dev
Switched to branch 'dev'
// 需要切换到新分支上
git branch
* dev
master
// 当然也可以一步到位
git checkout -b dev
// 这样可以直接创建并切换到dev分支上
- 合并分支
当我们在发现之前版本的bug需要解决的时候,通常会新建一个临时的分支来解决bug,以免直接在原有代码上直接修改不好恢复代码,在解决完bug之后再跟原有分支进行合并。
// 先切换回原分支后就可以进行合并分支了
git merge dev
// 分支合并完成后就可以把临时分支删除了
git branch -d dev
// 这样就只剩下master分支了
- 代码冲突
在多人协作开发时,经常出现冲突的就是在多个人同时对一个公共组件进行了修改,在提交代码后Git会自动检测同个文件是否在同个区域进行了不同的操作。这时候Git就无法进行快速合并,需要手动的解决冲突后才可以进行合并操作。
七、远程仓库
常见的国外开源仓库github、国内的码云、码市、但是一般公司都会有自己内部的gitlab服务器,让大家的代码进行统一的管理
- 代码克隆,一般新进公司,公司都会为你建立好帐号密码,登陆到指定的地方去拉取正在进行开发的项目代码文件,每个项目都会有他的一个git地址。
git clong 项目地址
// 这样我们就可以把一个远程仓库上的代码复制到我们本地
- 代码拉取&&代码推送,代码推送会把你的本地提交的代码推送到远程仓库内。但是必须要注意的是因为项目一般都是多人协同开发的,请在提交代码前先往远程仓库拉取一下,因为多人开发的同事如果进行了代码推送你,你没有进行拉取再推送,因为你本地的代码不是最新的有可能导致别人新推送的代码被你的老代码覆盖了。
git pull // 拉取
git push // 推送
- 同步本地远程分支,一般项目领导建立分支后会告诉你们切换到新分支上进行开发,但是如果你不进行远程分支同步的话,你在是看不到新建立的分支的。
git fetch
// 执行完这个命令后再查询所有分支就可以见到新的分支了
git branch -a