git 使用

一、Git 简介


是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
官网:https://git-scm.com/

  • Git 是一个版本控制软件
  • GitHub 与 GitLab 都是用于管理版本的服务的软件
  • GitHub 提供免费的服务(代码需公开)以及付费的服务(代码为私有)
  • GitLab 用于在企业内部管理 Git 版本库,功能上类似于 GitHub

Git 优点:

  • 本地建立完整版本库
  • 本地版本控制,近乎所有的操作都在本地执行
  • 多主机异地协同工作
  • 重新提交说明
  • 所有的操作都可以撤回(可以后悔)
  • 更好的提交列表,多数操作仅添加数据
  • 直接记录快照,而非差异比较
  • 更完善的分支系统,时刻保持数据的完整性
  • 速度快

Git 的分布式管理模式

Git 的分布式管理模式

Git 文件的三种状态:

  • 已修改(modified):在工作目录修改 Git 文件
  • 暂存(staged):对已修改的文件执行 Git 暂存操作,将文件存入暂存区
  • 已提交(committed):将已暂存的文件执行 Git 提交操作,将文件存入本机版本库

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、忽略指定文件/目录

  1. # 忽略指定文件
  2. HelloWrold.class
  3. # 忽略指定文件夹
  4. bin/
  5. bin/gen/

2、通配符忽略规则

  1. # 忽略.class的所有文件
  2. *.class
  3. # 忽略名称中末尾为ignore的文件夹
  4. *ignore/
  5. # 忽略名称中间包含ignore的文件夹
  6. *ignore*/

四、Git 分支常用命令


列出所有的branch

  1. git branch

显示当前分支最新一次提交的信息

  1. git branch -v

命令行创建分支

  1. git checkout -b dev

git checkout 命令加上 -b 参数表示创建并切换,相当于以下两条命令:

  1. git branch dev
  2. git checkout dev

删除本地 dev 分支(git 不允许删除当前使用分支)

  1. git branch -d dev #分支所有文件已经进行合并
  2. git branch -D dev #强制删除这个分支

删除远程分支

  1. git push origin --delete dev

合并分支

  1. git merge dev #将 dev 分支合并到当前分支

图形化提交日志

  1. git log --graph

所有操作日志

  1. git reflog

版本回退

  1. git reset --hard^ #回退到上一个版本
  2. git reset --hard^^ #回退到上两个版本

回退到指定 ID 的版本

  1. git reset --hard 想要回退的commitId

创建一个轻量级标签

  1. git tag v1.0

创建一个带有注释的标签

  1. git tag -a v2.0 -m '2.0 released'

查看版本库中的所有标签

  1. git tag

查看上一次修改记录(谁修改了我的文件)

  1. git blame --help

五、远程仓储 GitHub/GitLab

连接到远程仓库

  1. git remote add origin 项目地址

拉取远程项目

  1. git pull origin master 领取远程项目的 master 分支

上传项目到远程

  1. git push -u origin master 提交到远程的 master 节点上

使用 git 命令上传项目到 gitlab 总结:

  1. 右击项目项目所在目录,点击Git Bash Here
  2. git init 初始化仓库
  3. git remote add origin 项目地址 此处就是你clone下的地址,如果你的gitgitlab上的密钥建议使用ssh链接
  4. git add . 注意add和.之间有空格,代码提交当前目录下的所有文件
  5. git commit -m “添加注释,表达这次提交有什么意义”
  6. git push -u origin master 提交到远程的master节点上

注意:这是首次提交,到了之后的提交需要在提交代码时,先拉取远程master节点的代码(git pull origin master),如果拉取代码时有冲突先解决冲突,之后才可以提交代码。

远程仓储信息

  1. git remote show #所有相关列的远程仓库
  2. git remote show orign #查看 orign 仓库的相关信息

查看所有分支(本地分支和远程分支)

  1. git branch -a
  2. git branch -av

获取远程仓库项目(克隆)

  1. git clone **.git(远程仓储地址)

将本地项目关联到远程分支(远程存在 branch_name 分支)

  1. git branch --set-upstream-to branch_name

将本地项目关联到远程分支(远程不存在 branch_name 分支,创建远程分支并关联)

  1. git add .
  2. git commit -m "更新分支"
  3. 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操作

解决方案二

使用强制命令

  1. git pull origin master --allow-unrelated-historie

后面加上--allow-unrelated-histories ,把两段不相干的分支进行强行合;这里可能会进入一个编辑页面,只需要先 ESC,然后敲:q! 即可

后面再 push 就可以了

  1. git push -u origin master