知识总结-Git基础知识全面总结

Git知识总结

SVN是集中式版本控制工具:

  • 单点故障的时候数据全没
  • 历史记录存在集中服务器

Git是分布式版本控制工具

  • 可以避免单点故障
  • 每个单机都有历史记录
  • 每个单机都可以做版本控制
Talk is cheap, show me the code.    ----Linus

个人开发:

为了对功能更好的控制,方便自己多次修改,有利于思路的改变

团队协作:

多人开发过程中容易引起同一文件的内容冲突,需要一个版本管理。

具备功能

  • 协同修改
    • 多人并行修改服务器的同一个文件
  • 数据备份
    • 不仅保存目录和文件的当前状态,还能够保存每一个提交过得历史状态
  • 版本管理
    • 在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约空间,提高运行效率
    • SVN采用的是增量式管理的方式,Git采用了文件系统快照的方式
  • 权限控制
    • 对团队中参与开发的人员进行权限控制
    • 对团队外开发者贡献代码进行审核–Git独有此功能
  • 历史记录
    • 查看修改人、修改时间、修改内容、日志信息
    • 将本地文件恢复到某一个历史状态
  • 分支管理
    • 允许开发团队在工作中多条生产线同时推进任务,进一步提高效率

版本控制

根据工程设计领域使用版本控制管理蓝图,实现代码开发领域版本管理。

Git优势

  • 大部分操作在本地完成,不需要联网
  • 完整性保证,对数据进行hash操作保证完整性
  • 尽可能添加数据而不是删除或修改数据
  • 分支操作非常流畅
  • 与Linux命令全面兼容

基础概念

本地库:历史版本
暂存区:临时存储
工作区:写代码

Git和代码托管中心

托管中心:维护远程库文件
Github
码云
Gitlab

本地库和远程库

一个本地库通过推送(push)到远程库,另外一个本地库通过clone到自己的本地库,加入到团队中,就可以实现push操作。本地库可以通过拉取(pull)操作从远程库拉取文件到本地库。

另外的团队可以通过fork将其他人远程库fork到自己的远程库,然后在自己的本地库clone下来,完成开发后,再push到远程库,在远程库通过提交PR(pull request)操作请求合并megre操作到开发团队的远程库,需要审核。

Git基础文件命令操作

  • 本地库初始化
    • git init
    • .git目录中存放的是本地库中相关的子目录和文件,不要删除,也不要乱修改。
  • 设置签名
    • 形式:
      • 用户名:txp
      • email地址:aa@aa.com
    • 用于区分不同开发人员的身份
    • 这里设置的签名和远程库的账号密码没有任何关系
    • 命令:
      • 项目级别/仓库级别:仅在当前本地库生效
        • git config user.name txp_pro
        • git config user.email aa_pro@aa.com
      • 系统用户级别:登录当前操作系统的用户范围
        • git config --global user.name txp_glb
        • git config --global user.email aa_glb@aa.com
      • 上面的设置保存在~/.gitconfig文件中
      • 优先级:
        • 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别
        • 如果只有系统用户级别的签名,就以系统用户级别为准
        • 二者都没有,不允许
  • 状态查看
    • git status
    • 查看文件提交状态
  • 添加文件到暂存区
    • git add <file>...追踪文件,将工作区的“新建/修改”添加到暂存区
    • 移除暂存区
      • git rm --cached <file>...
  • 将文件提交到本地库
    • git commit -m "commit message" <file>
    • git commit -a 直接追踪并提交到本地库
  • 撤回已经提交暂存区的修改文件
    • git restore --staged <file>... to unstage 撤销已经修改的文件到暂存区
  • 版本的前进与后退
    • 历史记录
      • 显示提交日志
      • git log 显示全部日志
      • git log --pretty=oneline 显示完整hash值的每一行日志
      • git log --oneline hash值缩短显示每一行日志,只显示当前到以后的日志
      • git reflog 移动到当前版本需要的步数
    • 在及历史记录上前进或后退
      • HEAD指针
      • 基于索引值操作
        • 根据git reflog查看文件索引值
        • git reset --hard a83a04e 退回到某一个索引值的文件记录
      • 基于^符号
        • 只可以往后退
        • git reset --hard HEAD^ 一个^异或符号退一步,多个退多步
      • 使用~符号
        • 只可以往后退
        • git reset --hard HEAD~n 表示后退n步
    • reset 三个命令对比
      • –soft
        • 仅仅在本地库移动HEAD指针
      • –mixed
        • 在本地库移动HEAD指针
        • 重置暂存区
      • –hard
        • 在本地库移动HEAD指针
        • 重置暂存区
        • 重置工作区
  • 删除文件再找回
    • 添加到本地库
      • 这个文件已经提交到本地库
      • git只增加版本不删除版本
      • 通过版本回退找到文件
      • 工作区已经不存在但是本地库已经存在
    • 添加到暂存区
      • 使用git reset --hard命令
    • 删除前文件存在时的状态提交到了本地库
      • 操作已经提交到本地库:指针位置指向历史记录
      • 操作尚未提交到本地库:指针位置使用HEAD
  • 比较文件
    • git diff <file> 和暂存区比较
    • git diff HEAD <file> 和历史版本比较
    • git diff 比较工作区所有文件

Git分支管理

以功能开发为分支管理
master
feature_blue
feature_game
hot_fix

分支好处:

  • 同时并行推进功能开发,提高开发效率
  • 各个分支在开发的过程中,如果某一个分支开发失败,不会对其他的分支有任何影响,失败的分支删除重新即可。

分支操作

创建分支

git branch <branch name>

查看分支

git branch -v
git branch -a

切换分支

git checkout <branch name>

合并分支
  • 切换到接收修改的分支上(被合并分支,增加新内容)git checkout <branch name>
  • 执行git merge <new branch name>
解决冲突
  • 修改同一个文件同一个位置,就会引起冲突,需要手动解决冲突。
  • 冲突解决
    • 编辑文件,删除特殊符号
    • 修改文件到满意程度
    • git add <file name>
    • git commit -m "message" 不能加文件名

Git原理

采用hash
校验hash值,对比文件是否修改
git底层采用SHA-1

Git保存版本的机制

  • 集中式版本控制工具的文件管理机制
  • Git的文件管理机制
    • Git把数据看做是小型文件系统的一组快照。

Git与远程仓库操作

  • git remote add <origin name default origin> <URL.git> 添加远程仓库
  • git remote -v 查看远程仓库地址
  • git push origin master推送到远程仓库
  • git clone <URL.git>
    • 克隆远程仓库项目
    • 不需要手动初始化本地仓库
    • 创建origin远程地址别名
  • 团队协作
    • 邀请队员加入团队,并同意加入团队
    • clone项目
    • pull = fetch + merge
    • git fetch origin/master拉取(抓取)远程的master分支数据
    • git merge origin/master合并远程的master分支数据
    • 冲突解决
      • 对同文件操作每次推送先拉取,更新本地为远程最新版本
        • 执行git pull origin/master
      • 解决冲突,提交commit,push到远程
      • 要点
        • 如果不是基于GitHub远程库的最新版所做的修改,不能推送,必须先进行拉取
        • 拉取下来后如果进入冲突状态,则按照”分支冲突解决“操作解决即可
      • 类比
        • 债权人:老王
        • 债务人:小刘
        • 老王说:10天后归还。小刘接受,双方达成一致。
        • 老王媳妇说:5天以后归还。小刘不接受。老王媳妇需要和老王达成一致确认后再执行。
    • fork操作
      • 通过GitHub上fork操作
      • 在本地clone
      • 修改项目提交commit
      • push项目到自己的GitHub
      • 发起PR(Pull Request),提交PR
      • 可以通过PR请求中讨论对话
      • 通过Merge Pull Request合并代码,通过PR请求
      • 团队成员将修改后的远程库拉取到本地完成流程
  • SSH连接
    • 见其他博客

Git工作流

  • 集中式
    工作中不分支,用的少。
  • GitFlow
    功能开发、发布准备和维护都建立相应的分支
  • ForKing
    虚拟团队用的多。

GitFlow

GitFlow工作流图
避免在master分支修改

GitLab

查看官网教程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值