1、概述
- Git概述:Git是分布式版本控制系统,分为两种类型的仓库:本地仓库和远程仓库。
- 版本库:例如:.git文件夹就是版本库;版本库中存储了很多配置信息、日志信息和文件版本信息等。
- 工作目录(工作区):包含.git文件夹的目录就是工作目录;主要用于存放开发的代码。
- 暂存区:.git文件夹中有很多文件,其中有一个index文件就是暂存区,也叫stage;暂存区是一个临时保存修改文件的地方。
2、Git的工作流程
- 从远程仓库中克隆代码到本地仓库
- 从本地仓库中checkout代码,然后对代码修改
- 在提交前先将代码提交到暂存区
- 提交到本地仓库,本地仓库中保存修改的各个历史版本
- 修改完成后,需要和团队成员共享代码时,将代码push到远程仓库
- 只需克隆一次,下次需要代码时,从远程仓库pull到工作区即可
3、Git常用命令
3.1 环境配置
- 设置用户信息
git config --global user.name "刘xx"
设置用户名)git config --global user.email "hello@itcast.cn"
(设置邮箱) - 查看配置信息
git config --list
(查看所有配置信息)git config user.name
(查看用户名)
3.2 获取Git仓库
- 在本地初始化一个Git仓库
git init
(路径为新建文件夹下) - 从远程仓库克隆到本地
git clone https://xxxxxxxxxxxx
(码云上所指定的仓库的https地址)
3.3 Git工作目录下文件的两种状态
- untracked 未跟踪(未被Git纳入版本控制)
- tracked 已跟踪 (被Git纳入版本控制) Unmodified(未修改状态) Modified(已修改状态) Staged (已暂存状态)
3.4 本地仓库操作
- 查看文件状态(不显示未修改状态的文件;M表示已修改)
git status
(需在所在文件夹路径下)
或git status -s
(使输出信息更简洁) - 将未跟踪的文件加入暂存区
git add 文件名
(加入后的状态如图) - 将新创建的文件改为未跟踪状态(即取消暂存)
git reset 文件名
(状态如图) - 将暂存区的文件修改提交到本地仓库
git commit 文件名 -m "hhhh"
(hhh为日志信息,可随意编写;+号表示已提交) - 无需加入暂存区,直接提交
git commit -a -m "日志信息"
(将全部未跟踪的文件加入到暂存区) - 删除文件(例中的文件是已提交到本地仓库)
1)git rm 文件名
(此时只是删除了工作区的文件) - 2)
git commit 66.txt(文件名) -m "日志信息"
(此时是提交到本地仓库后彻底删除;-号表示已删除) - 将文件添加至忽略列表
当希望有些文件(例如自动生成的文件:日志文件等)无需纳入Git的管理,也不希望它们出现在未跟踪文件列表中时,可以在工作目录中创建一个名为.gitignore的文件(文件名称固定),再编辑列出要忽略的文件。
!lib.a(需将lib.a文件纳入Git管理)
.a(无需将所有以.a后缀的文件纳入Git管理)
/TODO(无需将TODO文件夹纳入Git管理)
build/(无需将build目录下的所有文件纳入Git管理)
doc/.txt(无需将doc目录下的所有以.txt后缀的文件纳入Git管理)
doc/**/*.pdf(无需将doc目录下及其子文件下的所有以.pdf后缀的文件纳入Git管理)
1) touch .gitignore
(创建.gitignore文件)
2) *.class
(进入.gitignore后编辑)
忽略后的效果:
- 查看日志记录
git log
3.5 远程仓库操作
- 查看远程仓库
git remote
(如果是克隆了远程仓库的,回车后会显示origin,origin表示默认服务器名;否则,表示没有与远程仓库关联)
或git remote -v
(则能够查看到远程仓库的地址) - 或
git remote show origin
(显示更详细信息) - 添加远程仓库(例中的repo1为在电脑手动建的本地仓库)
先在码云上新建一个与工作目录下的新建本地仓库名一致的仓库名,然后再切换到此新建本地仓库路径下。
可以将本地仓库添加到多个不同的远程仓库中,或一个远程仓库地址下可以有多个不同的本地仓库git remote add origin https://xxxxxxx
(把本地仓库添加到远程仓库;即与远程仓库关联) - 移除远程仓库(即解除与远程仓库的关联)
git remote rm origin(服务器名)
- 从远程仓库中抓取
1)git fetch --all
2)git reset --hard origin/master
(表示是origin地址下的master分支)
删除后(拉取前):
拉取后:
- 推送到远程仓库
1)git commit -a -m "日志信息"
(添加并提交所有未跟踪的文件到暂存区)
或git add 文件名
git commit 文件名 -m "日志信息"
2)git push origin master
- 3.6 Git分支
使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。 - 查看分支
git branch
(列出所有本地分支)git branch -r
(列出所有远程分支)git branch -a
(列出所有本地分支与远程分支) - 创建分支
git branch b1
(创建了名称为b1的分支) - 切换分支
git checkout b1
(切换到b1分支下;*号代表在此分支下) - 把本地分支推送至远程仓库分支
git push origin b1
(把本地的分支b1推送到远程仓库分支) - 分支合并
git merge b1
(需在master分支(其他分支)的路径下执行,表示将b1分支下的文件复制到master分支中)
例: - 注意:
但两个分支中,同一个文件的同一个部分的内容出现不一致时,Git就没法自动合并分支,同时会提示文件冲突,此时需要我们打开冲突文件并修复冲突内容,执行git add 文件名
命令,最后执行git commit
提交。 - 将本地分支文件推送到远程分支中
git push origin b1
(将本地仓库的b1分支里面的所有文件推送到远程仓库的b1分支里) - 删除本地分支
git branch -d b1
(删除本地分支b1,注意需要切换在别的分支下再执行)
注意:当要删除的分支中进行了一些开发动作,此时执行上面的删除命令并不会删除分支;如果坚持要删除此分支,可以将-d
改为-D
执行。 - 删除远程仓库下的分支
git push origin -d b1
(将远程仓库下的b1分支删除) - 3.7 Git标签
标签指的是某个分支某个特定时间点的状态,通过标签,可以很方便的切换到标记时的状态。比较有代表性的是人们会使用这个功能来标记发布结点(如版本号V1.0,V1.2等) - 列出已有的标签
git tag
- 新建标签
git tag v1.0
(创建了一个名为v1.0的标签) - 查看标签信息
git show v1.0
(查看标签名为v1.0的标签信息) - 将标签推送至远程仓库
git push origin v1.1
(将名为v1.1标签推送至远程仓库) - 检出标签
1)git checkout -b b2 v1.1
(新建b2分支,并将此前的v1.1标签传到b2分支中)
2)git tag v2.0
(将此前的v1.1标签下的文件内容修改后保存在v2.0标签中)
2)git push origin v2.0
(将新保存的v2.0标签内容上传至远程仓库) - 删除本地标签
git tag -d v1.1
(将本地的v1.1的标签删除) - 删除远程标签
git push origin :refs/tags/v1.1
(删除远程标签v1.1)