GIT
GIT简介
什么是git: git是一个开源到分布式版本控制系统, 用于高效的管理各种大小项目和文件
代码管理工具的用途
- 防止代码丢失, 做备份
- 项目的版本管理和控制, 可以通过设置节点进行跳转
- 建立各自的开发环境分支, 互不影响, 方便合并
- 在多终端开发时, 方便代码的相互传输
- git的特点
- git是开源的, 多在linux下使用, 可以管理各种文件
- git是分布式的项目管理工具(svn是集中式的)
- git的数据管理更多样化, 分享速度快, 数据安全
- git拥有更好的分支支持, 方便多人协调
GIT使用
基本概念
- 工作区: 项目所在操作目录, 实际操作项目的区域
- 暂存区: 用于记录工作区的工作内容
- 仓库区: 用于备份工作区的的内容
- 远程仓库: 远程主机上的git仓库
注意: 在本地仓库中, git总是希望工作区的内容和仓库区保持一致, 而且只有仓库区的内容才能和其他远程仓库交互
初始设置
配置命令: git config
配置所有用户: git config --system [选项]
- 配置文件位置: /etc/gitconfig
配置当前用户: git config --global [选项]
- 配置文件位置: ~/.gitconfig
配置当前项目: git config [选项]
- 配置文件位置: project/.git/config
# 配置用户名
sudo git config --system user.name xxxx
# 配置用户邮箱
git config --global user.email xxxx@xxxx.com
基本命令
- 初始化仓库
git init
意义: 将某个项目目录变为git操作目录, 生成git本地仓库, 该项目可以使用git管理
- 查看仓库本地状态
git status
说明: 初始化仓库后默认工作在master分支, 当工作区与仓库区不一致的时候会有提示
- 将工作区记录到暂存区
git add [files]
说明: 将修改过的文件(与仓库区不同)进行记录, 放入暂存区
- 撤销暂存记录
git rm --cached [files]
说明: 将暂存区的文件删除以取消暂存
扩展延申
在git项目中可以通过项目的某个文件夹下定义.gitignore文件的方式, 规定相应的忽略规则, 用来管理当前文件夹下的文件的git提交行为, .gitignore文件是可以提交到共有仓库中, 这就为该项目下的所有开发者都共享一套定义好的忽略规则, 在.gitignore中, 遵循响应的法则, 在每一行指定一个忽略规则
.gitignore忽略规则
- file: 表示需要忽略的文件
- *.a: 表示所有以.a结尾的文件
- !lib.a: 表示但lib.a除外
- build/: 表示忽略build/目录下的所有文件, 过滤整个文件夹
- 将文件同步到本地仓库
git commit [file] -m [message]
说明: message表示添加一些同步信息, 表达同步内容
- 查看commit日志记录
git log
git log --pretty=oneline
- 比较工作区文件和仓库文件差异
git diff [file]
- 将暂存区文件或者某个commit节点文件恢复到工作区
git checkout [commit] --[file]
说明: 为了防止误操作, checkout还有切换分支的作用
- 移动或删除文件
git mv [file] [path]
git rm [files]
注意: 这两个操作会修改工作区内容, 同时将操作记录提交到暂存区
版本控制
- 退回上一个commit节点
git reset --hard HEAD^
说明: 一个^表示退回一个版本, 以此类推, 当版本回退之后工作区会自动和当前commit保持一致
- 退回到指定的commit节点
git reset --hard [commit_id]
- 查看所有操作记录
git reflog
注意: 最上面的为最新记录, 可以利用commit_id去往任何操作位置
- 创建标签
标签: 在项目中的重要commit位置添加快照, 保存当时的工作状态, 一般用于版本的迭代
git tag [tag_name] [commit_id] -m [message]
说明: commit_id可以不写则默认标签表示最新的commit_id位置, message也可以不写, 但是最好添加
- 查看标签
git tag 查看标签列表
git show [tag_name] 查看标签详细信息
- 去往某个标签节点
git reset --hard [tag_name]
- 删除标签
git tag -d [tag_name]
保存工作区
- 保存工作区内容
git stash save [message]
说明: 将工作区未提交的的修改封存, 让工作区回到修改前的状态
- 查看工作区列表
git stash list
说明: 最新保存的工作区在最上面
- 应用某个工作区
git stash apply [stash@{n}]
说明: 应用某个暂存方案, 最新保存的工作区在最上面
- 删除工作区
git stash drop [stash@{n}] 删除某一个工作区
git stash clear 删除所有保存的工作区
分支管理
定义: 分支即每个人在原有代码(分支)的基础上建立自己的工作环境, 单独开发, 互不干扰, 完成工作开发后在进行统一分支合并
- 查看分支情况
git branch
说明: 前面带*的分支表示当前的工作分支
- 创建分支
git branch [branch_name]
说明: 创建新分支
- 合并分支
git merge [branch_name]
将其他分支的内容合并到当前分支, 冲突问题是合并分支过程中最为棘手的问题当分支合并时, 原分支和发生了变化的分支就会产生冲突, 当合并分支时添加新的模块, 这种冲突可以自动解决, 只需自己决定commit操作即可
当分支合并时两个分支修改了同一个文件, 则需要手动解决冲突
- 删除分支
git branch -d [branch] 删除分支
git branch -D [branch] 删除没有被合并的分支
远程仓库
远程仓库上的git仓库, 实际上git是分布式结构, 每台主机的git仓库结构类似, 只是把别人主机上的git仓库称为远程仓库
GitHub简介
github是一个开源的项目社区网站, 拥有全球最多的开源项目, 开发者可以注册网站在github上建立自己的仓库
获取项目
- 在本地使用git clone方法获取远程仓库
git clone https://github.com/xxxx
注意: 获取到本地的项目会自动和github远程仓库建立连接, 且获取的项目本身也是git项目
创建删除git仓库
远程仓库操作命令
- 连接远程仓库
git remote add origin https://github.com/xxxx
说明: 连接远程仓库, 并命名为origin
- 删除远程仓库
git remote rm origin
说明: 删除名为origin的远程仓库
- 向远程仓库推送
git push -u origin master
说明: 将本地master分支推送至远程origin仓库, -u表示第一次使用origin和本地建立连接
- 上传标签
git push origin [tag] 推送本地标签到远程
git push origin --tag 推送本地所有标签到远程
- 推送旧的版本
git push --force origin 用于本地版本比远程版本旧时强行推送本地版本
- 删除远程分支和标签
git branch -a 查看所有分支
git push origin [:branch] 删除远程分支
git push origin --delete tag [tag_name] 删除远程仓库标签
- 获取远程代码
git pull 获取远程分支代码
git fetch origin master:tmp 将远程分支master拉取到本地, 作为tmp分支
区别: pull将远程内容直接拉取至本地, 并和对应分支内容进行合并, fetch将远程分支内容拉取到本地, 但是不会和本地对应分支合并, 自己判断后在使用merge合并