1. Git是什么?
git是目前世界上最先进的分布式版本控制系统。
2. Git的特点
- 版本控制:可以解决多人同时开发的代码问题,也可以解决找回历史代码的问题。
- 分布式:Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。首先找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。可以自己搭建这台服务器,也可以使用GitHub网站。
3. Git 的基本使用
git 将代码分成四个区域:
.git隐藏目录 之外的区域:
(1)工作区(worksapce)
.git隐藏目录 内部的的区域:
(2)暂存区 (stage),
(3)本地版本区(repository)
远程区域
(4)远程仓库(remote) (本地代码服务器或者github 网站提供的代码托管服务)
我们的所有操作都是围绕着这四个区域展开的。
3.1 创建版本库
#(1) 创建一个准备存放项目的目录 这个目录就是我们的工作区(workspace)
mkdir git_test
cd git_test
#(2) 创建一个版本库 此时会产生一个.git 隐藏目录,这个就是我们的版本库
git init
3.2 向暂存区添加文件 或添加整个目录
git add 文件名 | 目录名
该命令的作用是将 工作区的代码 移动到暂存区。
3.3 提交一个版本
git commit
该命令的作用是将暂存区的代码移动到 版本区,形成一个本地的版本。因此,当工作区做了修改,应该首先将工作区的修改添加到暂存区,然后使用git commit 进行版本的提交。
使用该命令后会进去到一个界面中,要求你描述该版本的信息。
如果版本改动较小,可以使用选项,进行简短的描述,避免进入该窗口。
git commit -m "描述信息"
3.4 查看版本记录
git log
版本记录单行显示
git log --pretty=oneline
该命令的作用是查看当前版本 之前 的版本日志。
3.5 查看操作记录
git reflog
该命令的作用是查看所有的操作记录。
3.6 退回到原来的版本
git reset --hard 回退的版本
方式一 ^ 方式
git reset --hard HEAD^ # 回退到前一个版本
git reset --hard HEAD^^ # 会退到前2个版本
git reset --hard HEAD^^^ # 回退到前3个版本
方式二 ~ 方式
git reset --hard HEAD~10 # 回退到前10个版本
方式三 版本序号方式
git reflog #查看操作记录,记录中有每一次操作的对应的版本的序号
退回到指定的版本
git git reset --hard 版本序号
3.7 查看分支状态
git status
该命令 可以列举出 工作区发生了改变,但是还没有添加到暂存区的文件,以及添加到了暂存区,但是还没有提交到本地版本的文件。 需要注意,如果新建了一个文件,没有使用git add 命令添加到暂存区,那么git 不会根据该文件的状态 ,因此,每创建一个文件,都应该添加到暂存区,一边Git 跟踪该文件的状态。
如果工作区没有做任何的修改,那么工作区就是干净的。
4. 撤销命令
4.1 修改了工作区的文件,还没有添加到暂存区,撤销工作区的改动
git checkout -- filename
4.2 修改的文件已经提交到了暂存区,从暂存区撤回到工作区
git reset HEAD filename
4.3 修改的文件已经提交到了版本区,从版本区撤回到工作区
版本回退
5. 对比文件的不同
5.1 比较的是工作区和暂存区的差别
git diff
5.2 比较的是暂存区和版本库的差别
git diff --cached
5.3 可以查看工作区和版本库的差别
git diff HEAD
6. 删除文件
6.1 删除工作区中的文件
rm filename
-
删除工作区的文件,要想提交一个版本,首先得删除完工作区以后,然后使用git rm 删除暂存区,然后提交。
-
或者直接使用git rm 删除,这个命令起始可以同时把工作区和暂存区的文件删除了。但是使用rm 的好处是,暂存区还保留一份,可以撤销回工作区。
6.2 删除暂存区中(同时删除工作区)的文件
git rm filename
7. 分支管理
git把我们之前每次提交的版本串成一条时间线,这条时间线就是一个分支。初始化一个git版本库,git默认会为我们创建一个分支,这个分支的名字就是master。
7.1 查看当前在哪个分支工作
git branch
7.2 创建一个分支
git branch dev
选项 -b 创建一个分支,并切换到该分支
git checkout -b dev
7.3 切换到新创建的分支
git checkout dev
7.4 合并分支内容(没有冲突的情况)
将dev 合并到master 分支
git checkout master
git merge dev
合并前:
合并后:
这种情况采用的是fast-forward 模式合并的。
7.5 解决冲突的合并
如果主分支和dev 分支都进行了一次提交,并且改变的是同一个文件的话那么,进行提交的话就会产生冲突。这时需要手动解决冲突,然后进行一次提交。采用git status 可以查看产生冲突的文件。
解决冲突后,再此提交:
7.5 查看分支的合并情况
git log --graph --pretty=oneline
7.6 禁用快速合并
如果没有冲突的版本进行了快速合并,那么可能将会看不到版本的更新的信息,因此,我们可以禁止快速合并 ,这样,合并后,会有一次新的提交。
git merge --no-ff -m " 说明信息" dev
使用快速提交的情况(删除dev 后,dev版本的变动的说明信息将会丢失):
不使用快速提交的情况:
7.7 保存工作现场
假如现在正在dev 分支写代码,写到一半,突然来了一个任务需要修复一个bug ,这时需要保存工作现在,以便bug修复完毕后继续工作。
git stash
然后新创建一个分支bug-001 完成bug 的修复,修复完成后,合并到master 分支中,然后删除bug-001 分支。 然后切换回dev分支继续工作。此时可以使用如下命令回复工作现场:
git stash list #查看保存的工作现场
git stash pop #回复工作现场
8. 使用Github
8.1 申请github账号,并创建一个代码仓库
创建仓库时可以配置.gitignore 选择忽略的文件
8.2 在本地电脑的 主目录下修改 .gitconfig 文件
8.3 在本地电脑生成 ssh 秘钥
ssh-keygen -t rsa -C "邮箱地址" # 邮箱地址为github 账号的邮箱地址
该命令会在 提示目录(.ssh)下生成一个 公钥(id_rsa.pub),一个私钥(id_rsa)。
8.4 将公钥添加到github 账号上
8.5 在本地pc机上从github 上clone 代码
8.5.1 首先在 github账号上 找到 代码地址
8.5.2 在本地pc机上下载代码
git clone 代码地址
如果克隆失败执行
eval "$(ssh-agent -s)"
ssh-add
8.6 上传分支(推送分支)
下载代码后创建一个自己的分支 dev。
git push origin dev
推送分支会使得github 中自动创建一个 dev分支。
8.7 将本地分支跟踪服务器分支
git branch --set-upstream-to=origin/远程分支名称 本地分支名称
8.8 从远程分支上拉取代码
git pull orgin dev
上述命令会将远程dev分支合并到本地所在分支。
9.工作使用git
项目经理:
(1)项目经理搭建项目的框架。
(2)搭建完项目框架之后,项目经理把项目框架代码放到服务器。
普通员工:
(1)在自己的电脑上,生成ssh公钥,然后把公钥给项目经理,项目经理把它添加的服务器上面。
(2)项目经理会给每个组员的项目代码的地址,组员把代码下载到自己的电脑上。
(3)创建本地的分支dev,在dev分支中进行每天的开发。
(4)每一个员工开发完自己的代码之后,都需要将代码发布远程的dev分支上。
Master:用户保存发布的项目代码。V1.0,V2.0
Dev:保存开发过程中的代码。