1.Git
1.1简介
Git是由林纳斯·托瓦兹编写的,目前世界上最先进的分布式版本控制系统。
参考网站:
https://www.runoob.com/git/git-tutorial.html
http://gitref.justjavac.com/
1.2安装配置
Windows版的Git,从https://git-scm.com/download/win下载然后按默认选项安装即可。
1.2.2判断是否安装
方式一:安装完成后,右键打开菜单栏找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功
方式二:在cmd中git version 是否出现版本号。
1.2.3配置用户信息
初次下载需要配置自己的用户名与邮箱。
git config --global user.name “Your Name”
git config --global user.email “email@example.com”
git config user.name 查看配置的姓名
git config user.email 查看配置的邮箱
1.3创建本地版本库
1.3.1初始化Git
git init
说明这个文件夹已经被Git管理
1.3.2 Git中的三区
本地Git中分为三区分别是工作区、暂存区、版本区,如图所示:
1.3.3 Git本地常用命令
本地常用命令:
git add XXX.XX提交某个文件
git add *或者git add . 提交工作区的全部文件到暂存区 不包括忽略的文件。
git commit -m’xxxxx’ 提交暂存区的文件到版本区 提交了什么一定要写清楚,不能瞎写。
1.4远程仓库(即代码托管平台)
常见的代码托管平台有:
国内:码云Gitee、码市、CSDN
国外:GitHub、gitlib
码云:
https://gitee.com/
GitHub:
https://github.com/
1.5创建仓库
1.5.1 远程创建,再克隆(推荐此方法)
第一步:
在码云上创建仓库
第二步:
将远程仓库克隆到本地
git clone https://gitee.com/用户个性地址/HelloGitee.git
第三步:
在编辑器中打开仓库,添加忽略文件
创建.gitignore配置文件
该文件说明哪些文件不想要Git管理,就将其添加到.gitignore配置文件中。
第四步:
正常增加编写文件
git add *
git commit -m’’
git push -u origin master (首次)
git push origin master 正常将本地提交推送到远程仓库
1.5.2 本地创建再关联远程仓库
第一步:
在码云上创建仓库
第二步:
在本地初始化Git仓库
git init
初始化的仓库和码云上的仓库名字一致。
第三步:
关联本地和远程仓库
git remote add origin https://gitee.com/用户个性地址/HelloGitee.git
注:不小心关联错了仓库,怎么办?
解决一:暴力解决:删除.git,重新本地仓库管理
解决二:优雅解决:git remote remove origin,在重新关联仓库
git remote -v查看远程库的详细信息
第四步:
git pull origin master
拉取/更新本地仓库,和远程仓库保持一致
第五步:
在编辑器中打开仓库,添加忽略文件
创建.gitignore配置文件
该文件说明哪些文件不想要Git管理,就将其添加到.gitignore配置文件中。
第六步:
正常增加编写文件
git add *
git commit -m’’
git push -u origin master (首次)
git push origin master 正常将本地提交推送到远程仓库
扩展:忽略文件 .gitignore
#表示此为注释,将被Git忽略
.a 表示忽略所有 .a 结尾的文件
!lib.a 表示但lib.a除外
/TODO 表示仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
node_modules
/dist
build/ 表示忽略 build/目录下的所有文件,过滤整个build文件夹;
doc/.txt 表示会忽略doc/notes.txt但不包括 doc/server/arch.txt
bin/: 表示忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin: 表示忽略根目录下的bin文件
/.c: 表示忽略cat.c,不忽略 build/cat.c
debug/.obj: 表示忽略debug/io.obj,不忽略 debug/common/io.obj和tools/debug/io.obj
/foo: 表示忽略/foo,a/foo,a/b/foo等
a//b: 表示忽略a/b, a/x/b,a/x/y/b等
!/bin/run.sh 表示不忽略bin目录下的run.sh文件
*.log: 表示忽略所有 .log 文件
config.php: 表示忽略当前路径的 config.php 文件
/mtk/ 表示过滤整个文件夹
*.zip 表示过滤所有.zip文件
/mtk/do.c 表示过滤某个具体文件
被过滤掉的文件就不会出现在git仓库中(gitlab或github)了,当然本地库中还有,只是push的时候不会上传
需要注意的是,gitignore还可以指定要将哪些文件添加到版本管理中,如下:
!.zip
!/mtk/one.txt
唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。为什么要有两种规则呢?
想象一个场景:假如我们只需要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不需要管理,那么.gitignore规则应写为::
/mtk/
!/mtk/one.txt
假设我们只有过滤规则,而没有添加规则,那么我们就需要把/mtk/目录下除了one.txt以外的所有文件都写出来!
注意上面的/mtk/*不能写为/mtk/,否则父目录被前面的规则排除掉了,one.txt文件虽然加了!过滤规则,也不会生效!
1.6常用Git命令
1.6.1拉取
如果远程有更新, 拉取到本地
git pull origin master
git fetch origin master /fetʃ/ 取来
注:pull和fetch的区别?
git pull origin master
- 将远程仓库的master分支上代码版本复制/合并到本地master分支上
- git fetch origin master:dev
- 新建了一个dev分支,将远程仓库的master分支上代码版本复制到dev分支上
- 就一定不会产生冲突
- git diff master dev对比两分支内容,观察会不会产生冲突
- 如果会,先解决,在合并分支。如果不会,就直接合并分支
注:合并分支时,如果在同一个文件,在同一个地方,都修改了或新增内容会引起版本冲突。
1.6.2差异对比
git diff master dev:对比两分支内容
git diff --cached : 比较版本区与暂存区 /kæʃt/ 储藏
git diff master : 比较版本区与工作区
1.6.3 日志+版本号
git log 显示从最近到最远的所有提交日志 /lɒg/ 记录
git reflog 显示每次提交(commit)的commit id
1.6.4 版本回退+版本穿梭+版本撤销
git reset --hard HEAD^ 版本回退(回退一次提交)
git reset --hard Obfafd 回退到指定Obfafd的commit id版本
git rm --cached x.txt 从暂存区删除文件
git reset 可以将暂存区的内容退回到工作区。
1.6.5删除文件
git rm x.txt 删除文件(前提:文件已被git管理)
git rm -r x 删除文件夹(前提:文件夹不为空,且备git管理才可以)
1.6.6 分支
git branch 查看当前分支
git checkout -b dev 创建dev分支,并切换到dev分支
git checkout master 切换分支
git merge dev 合并指定dev分支到当前分支 /mɜːdʒ/ 合并
git branch -d dev 删除指定分支
git diff branch1 branch2 显示出两个分支之间所有有差异的文件的详细差异
git diff branch1 branch2 --stat 显示出两个分支之间所有有差异的文件列表
git diff branch1 branch2 文件名(带路径) 显示指定文件的详细差异
扩展:
可视化的工具多种多样,但都是基于Git命令的,万变不离其宗。常见的几种工具:Git GUI
、TortoiseGit、GitHub desktop、各种编辑器自带的git工具。