【知识体系 - Git系列】- Git

174 阅读4分钟

Git

Git概述

分布式版本控制

  • Git是一个免费的、开源的 分布式版本控制系统everything is local
【集中式版本控制】
 控制工具:CVS,SVN,VSS
 操作流程:
    1. 存在一个单一的集中管理的服务器,保存所有文件的修改版本。
    2. 开发者通过客户端连接这台服务器,进行文件的拉取/提交
 【好处】
    每个人都可以在一定程度上看到项目中的其他人正在做什么,因为所有人的代码必须提交到这台中央服务器上。
 【坏处】
    1. 必须联网才能工作。网速慢提交文件也会很慢。断网了就不能进行工作协同了。
    2. 本地没有版本库的修改记录
    
【分布式版本控制】
 控制工具:Git
 操作流程:
    1. 没有中央服务器,每个人的电脑都是一个完整的版本库。
    2. A修改了文件aB也修改了文件a。只需要A/B把各自的修改推送给对方即可。
 【一个情况】
    假如昨天A修改了文件a,今天A的电脑宕机了,B需要修改文件a。那么两者就不能进行代码推送了。或者两台电脑不在一个局域网,互相访问不了。那么就需要一台电脑来充当“中央服务器”的角色。
 【工作中】
    在多人协同工作的情况下,需要指定一台电脑作为总的版本库。开发者都从这台电脑拉取/提交代码。这台电脑就充当集中式中的服务器版本库的角色。

Git工作机制

工作区[写代码]  
    -> (git add) -> 暂存区[临时存储] 
        -> (git commit) -> 本地库[历史版本]
​
【另外】
本地库 -> (git push) -> 远程库

Git和代码托管中心

  • 代码托管中心是基于网络服务的远程代码仓库,简称【远程库】

    • 局域网:GitLab
    • 互联网:GitHub(外网)/ Gitee码云(国内网站)

Git安装

Git常用命令

#设置用户签名
git config --global user.name 用户名
git config --global user.email 邮箱

【说明】

  • 安装成功后设置一次即可,不设置无法提交代码
  • 签名的作用:区分不同操作者的身份。这个身份在每一个版本的提交信息中可以看到,以此来确认本次提交的作者
    • 注意:这里设置的用户签名和将来登录GitHub(或其他代码托管中心)的账号没有任何关系
  • 设置成功,即可在 C:\Users\ChunQiuDOVE/.gitconfig 文件中看到
#【初始化本地库】
git init # 文件目录下产生一个`.git`文件 - `git`目录


#【查看本地库状态】
git status


#【添加至暂存区】
git add 文件名 / git add . # 不加文件名,则添加所有为追踪的文件
#【从暂存区中移除】
git reset 文件名 / git reset .


#【提交本地库】
git commit -m "日志信息" 文件名 #不加文件名,则提交所有


#【查看日志信息】
git log # 查看所有提交过的版本,不包括被删除的commit记录和reset的操作
git reflog # 查看所有操作记录,包括commit和reset
# 应用场景 - https://blog.csdn.net/chenpuzhen/article/details/92084229


#【版本回退】
git reset --hard 版本号 # 底层是移动HEAD指针

Git分支操作

#【查看分支】
# 1. 查看本地分支
git branch
# 2. 查看所有分支列表,包括远程/本地
git branch -a


#【创建分支】
git branch <分支名称>


#【删除分支】
# 1. -d: 当前删除的分支有未merge的提交,会删除失败
git branch -d <已存在的分支名称>
# 2. -D: 强制删除分支
git branch -D <已存在的分支名称>


#【切换分支】
git checkout <本地已存在的分支名称>
git checkout -b <分支名称> # 若分支存在,则切换;不存在,则创建分支并切换。【基于本地创建分支】

git checkout -b <线下分支名称> origin/<线上分支名称> #【基于远程分支创建本地分支】
例如:git checkout -b dev origin/dev # 切换/创建到dev分支,接着跟远程的origin地址上的dev分支关联起来


#【合并指定分支到当前分支】
git merge <待合并的分支名称>


#【分支重命名】
git branch -m oldName newName


#【checkout的其他操作】
git checkout 文件名称 # 放弃本地单个文件的修改
git checkout . # 放弃本地当前目录下的修改

Git团队协作机制

  • 团队内协作

团队内协作.jpg

  • 跨团队协作

跨团队协作.jpg