git 使用
一、Git 简介
是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
官网:https://git-scm.com/
- Git 是一个版本控制软件
- GitHub 与 GitLab 都是用于管理版本的服务的软件
- GitHub 提供免费的服务(代码需公开)以及付费的服务(代码为私有)
- GitLab 用于在企业内部管理 Git 版本库,功能上类似于 GitHub
Git 优点:
- 本地建立完整版本库
- 本地版本控制,近乎所有的操作都在本地执行
- 多主机异地协同工作
- 重新提交说明
- 所有的操作都可以撤回(可以后悔)
- 更好的提交列表,多数操作仅添加数据
- 直接记录快照,而非差异比较
- 更完善的分支系统,时刻保持数据的完整性
- 速度快
Git 的分布式管理模式
Git 文件的三种状态:
- 已修改(modified):在工作目录修改 Git 文件
- 暂存(staged):对已修改的文件执行 Git 暂存操作,将文件存入暂存区
- 已提交(committed):将已暂存的文件执行 Git 提交操作,将文件存入本机版本库
注:以上三种状态的所有操作都是在个人电脑上完成
二、Git 常用命令
1、获取版本库
- git init :当前目录初始换一个空的 git 仓库,自动创建默认的主分支 master
- git clone
2、版本管理
- git add :添加到本地暂存区域
- git commit :将暂存区所有已修改的文件提交到本地版本控制库(注意填写提交信息)
- git rm :git rm -rf xx 表示删除 xx 目录及其子目录下的所有文件,危险慎用
注:Git 的提交 ID(commit id)是一个摘要值,这个摘要值实际上是要给shal计算出来的
3、查看信息
- git help
- git log : 查看 git 历史版本
- git diff: 文件的差异
- git status :查看 git 的文件的状态
- ls -al :查看当前目录所有文件
4、远程协作
- git pull
- git push
三、Git 配置忽略文件 .gitignore
1、忽略指定文件/目录
# 忽略指定文件
HelloWrold.class
# 忽略指定文件夹
bin/
bin/gen/
2、通配符忽略规则
# 忽略.class的所有文件
*.class
# 忽略名称中末尾为ignore的文件夹
*ignore/
# 忽略名称中间包含ignore的文件夹
*ignore*/
四、Git 分支常用命令
列出所有的branch
git branch
显示当前分支最新一次提交的信息
git branch -v
命令行创建分支
git checkout -b dev
git checkout
命令加上 -b
参数表示创建并切换,相当于以下两条命令:
git branch dev
git checkout dev
删除本地 dev 分支(git 不允许删除当前使用分支)
git branch -d dev #分支所有文件已经进行合并
git branch -D dev #强制删除这个分支
删除远程分支
git push origin --delete dev
合并分支
git merge dev #将 dev 分支合并到当前分支
图形化提交日志
git log --graph
所有操作日志
git reflog
版本回退
git reset --hard^ #回退到上一个版本
git reset --hard^^ #回退到上两个版本
回退到指定 ID 的版本
git reset --hard 想要回退的commitId
创建一个轻量级标签
git tag v1.0
创建一个带有注释的标签
git tag -a v2.0 -m '2.0 released'
查看版本库中的所有标签
git tag
查看上一次修改记录(谁修改了我的文件)
git blame --help
五、远程仓储 GitHub/GitLab
连接到远程仓库
git remote add origin 项目地址
拉取远程项目
git pull origin master 领取远程项目的 master 分支
上传项目到远程
git push -u origin master 提交到远程的 master 节点上
使用 git 命令上传项目到 gitlab 总结:
右击项目项目所在目录,点击Git Bash Here
git init 初始化仓库
git remote add origin 项目地址 此处就是你clone下的地址,如果你的git有gitlab上的密钥建议使用ssh链接
git add . 注意add和.之间有空格,代码提交当前目录下的所有文件
git commit -m “添加注释,表达这次提交有什么意义”
git push -u origin master 提交到远程的master节点上
注意:这是首次提交,到了之后的提交需要在提交代码时,先拉取远程master节点的代码(git pull origin master),如果拉取代码时有冲突先解决冲突,之后才可以提交代码。
远程仓储信息
git remote show #所有相关列的远程仓库
git remote show orign #查看 orign 仓库的相关信息
查看所有分支(本地分支和远程分支)
git branch -a
git branch -av
获取远程仓库项目(克隆)
git clone **.git(远程仓储地址)
将本地项目关联到远程分支(远程存在 branch_name 分支)
git branch --set-upstream-to branch_name
将本地项目关联到远程分支(远程不存在 branch_name 分支,创建远程分支并关联)
git add .
git commit -m "更新分支"
git push --set-upstream origin branch_name
六、 Git 分支开发模型
- develop 分支(开发分支)
- test 分支(供测试与产品等人员使用的一个分支)
- master 分支(生产发布分支)
- bugfix(hotfix) 分支(生产系统中出现的紧急bug,用于紧急修复)
七、 Git 常见问题
问题1:fatal: refusing to merge unrelated histories 错误
错误原因:
因为两个根本不相干的 git 库, 一个是本地库, 一个是远端库, 然后本地要去推送到远端, 远端觉得这个本地库跟自己不相干, 所以告知无法合并
解决方案一:
git clone
远程仓库到本地,将需要推送的内容放到该仓库下 , 然后提交上去 , 这样算是一次update操作
解决方案二
使用强制命令
git pull origin master --allow-unrelated-historie
后面加上--allow-unrelated-histories
,把两段不相干的分支进行强行合;这里可能会进入一个编辑页面,只需要先 ESC
,然后敲:q!
即可
后面再 push
就可以了
git push -u origin master