一、版本控制

1. 版本控制

用于管理多人协同开发项目的技术。

2. 版本控制软件/系统

用来记录文件变化,便于查询特定版本修订情况的系统。

3. 版本控制分类

  • 本地版本控制:使用软件记录文件不同版本。

    【优点】提高工作效率,降低手工管理的出错率。
    【缺点】单机运行,不支持多人协作开发;若版本数据库故障所有历史更新记录丢失。
  • 集中版本控制(例如SVN):基于【客户端-服务器】的运行模式,服务器保存文件所有更新记录,客户端只保留最新的文件版本

    【优点】联网运行,支持多人协作开发。
    【缺点】不支持离线提交版本更新;中心服务器崩溃所有人无法正常工作;若版本数据库故障所有历史更新记录丢失。
  • 分布式版本控制(例如Git):基于【客户端-服务器】的运行模式,服务器保存文件所有更新记录,客户端是服务器的完整备份

    【优点】联网运行,支持多人协作开发;断网后支持离线本地提交版本更新;若服务器故障,可使用任何一个客户端的备份进行恢复。
    【缺点】以空间换时间,占用磁盘空间大。

二、Git基本组成

1. Git特性

  • 直接记录快照,而非差异比较。版本切换快,占用磁盘空间大。
  • 近乎所有操作都是本地执行。联网后将本地修改记录同步到云端服务器。

2. Git四个区域

  • 工作区(Workspace):存放项目代码的区域。
  • 暂存区(Stage):暂时存放已修改的文件的区域,保存即将提交的文件列表信息。
  • 本地仓库(History/Repository):存放提交的所有版本的数据。其中HEAD指向最新版本。
  • 远程仓库(Remote):托管代码的服务器,理解为一台远程数据交换的电脑。

3. Git三种状态

  • 已修改(modified)
  • 已暂存(staged)
  • 已提交(committed)

4. Git工作流程

1)在工作区中添加、修改文件;
2)将需要进行版本管理的文件放入暂存区
3)将暂存区的文件提交到Git仓库

三、Git基本命令

1. 配置用户信息

Git需要记录谁对项目进行了操作。配置信息被写入全局配置文件.gitconfig中,配置一次即可永久生效。

# 设置用户名
git config --global user.name "Your-username"
# 设置邮箱地址
git config --global user.email "Your-email"
# 查看所有全局配置
git config --list --global
# 查看指定配置项
git config user.name
git config user.email

2. 查看帮助信息

# 打开指定命令config的帮助手册
git help config
# 获取指定命令config的快速参考
git config -h

3. 建立Git仓库

  • 将未进行版本控制的本地目录转换为Git仓库
    在指定位置执行,即可在此目录位置创建一个.git隐藏目录,.git隐藏目录即当前项目的Gi t仓库,里面包含了初始的Git仓库必要组成部分。
git init
  • 从远程服务器克隆一个已存在的Git仓库
git clone url

4. 查看工作区文件状态

# 查看工作区文件状态
git status
# 以精简方式查看工作区文件状态
git status -s
git status --short
# 精简方式下的符号含义
?? untracked
M  modified
A  added
D  deleted
R  renamed
C  copied
U  updated but unmerged

其中,符号红色表示未暂存;绿色表示已暂存。

5. 文件操作

  • 跟踪文件/暂存文件
# 跟踪/暂存文件index.html
git add index.html
# 跟踪/暂存所有文件
git add .
  • 提交文件【当工作区文件提交后,文件处于unmodified状态】
# 提交暂存区文件index.html
git commit -m "新建了index.html"
# 跳过暂存区,将工作区文件直接提交到Git仓库
git commit -a -m "新建了index.html"
  • 撤销对文件的修改,用Git仓库中保存的文件覆盖当前工作区指定文件【不常用】
git checkout -- index.html
  • 取消暂存的文件【不常用】
git reset HEAD
  • 移除文件
# 从工作区和Git仓库同时移除index.html
git rm -f index.html
# 只从Git仓库移除index.html
git rm --cashed index.html
  • 忽略文件【不希望出现在未跟踪文件列表的文件,通过创建.gitignore配置文件设置】
# 举例:
# 忽略所有.a文件
*.a
# 但跟踪所有lib.a
!lib.a
# 忽略任何目录下名为build的文件夹
build/
# 只忽略当前目录下名为TODO的文件
/TODO
# 忽略doc目录及其所有子目录下的.pdf文件
doc/**/*.pdf
  • 查看提交历史
git log
# 【注意】在旧版本中查看
git reflog
# 只展示最近两条
git log -2
# 在一行上展示
git log --pretty=oneline
# 在一行上展示,并按自定义格式输出
# %h简写哈希值; %an作者; %ar多久之前修改; %s提交说明文字
git log --pretty=format:"%h | %an | %ar | %s"
  • 回退到历史指定版本
git reset --hard <CommitID>

四、Git远程仓库操作(以github为例)

1. 开源许可协议

为了限制使用者的使用范围和保护作者的权利,每个开源项目都应该遵守开源许可协议。
5种常见的开源许可协议:

2. 开源项目托管平台

用于免费存放开源项目源代码的网站。

  • Github:全球最牛的开源项目托管平台。
  • Gitlab:对代码私有性支持较好,企业用户较多。
  • Gitee:码云,国产的开源项目托管平台。访问速度快、纯中文界面、使用友好。

3. 提交到远程仓库

  • HTTP:零配置,但每次访问都需要输入用户名和密码。
# 将本地仓库和远程仓库进行关联,并把远程仓库命名为origin
git remote add origin 仓库的http-url
# 将本地仓库中的内容推送到远程仓库
git push -u origin master
  • SSH:需要配置SSH Key,配置一次之后都不需要用户名和密码。【实际开发时常用】

SSH Key:实现本地仓库和Github之间免登录的加密数据传输。由两部分组成:

# 输入以下命令,连敲三次回车,生成id_rsa.pub文件,将文件中的内容配置到Github
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 验证是否配置成功
ssh -T git@github.com
# 将本地仓库和远程仓库进行关联,并把远程仓库命名为origin
git remote add origin 仓库的ssh-url
# 将本地仓库中的内容推送到远程仓库
git push -u origin master

4. 克隆远程仓库

git clone url

五、Git分支

1. Git分支

多人协作开发时,为了防止相互干扰,提高协同开发的体验,每个开发者都基于分支进行项目开发。

2. 分支分类

  • 主分支master:在初始化本地Git仓库时默认创建主分支,用来保存和记录整个项目已完成的功能代码。因此,不允许程序员直接在主分支上修改代码。
  • 功能分支:专门用来开发新功能的分支,临时从主分支分叉出去,开发完成后再合并到主分支上。

3. 分支操作

  • 查看分支【带星号*的表示当前所处分支】
git branch
  • 添加分支
# 添加新分支login并停留在当前分支。【新分支中代码与当前分支完全相同】
git branch login
# 添加新分支login并切换到新分支。
git checkout -b login
  • 切换分支
# 切换到login分支。
git checkout login
  • 合并分支【存在冲突的分支合并需要手动解决冲突后再提交合并】
# 将login分支合并到当前分支
git merge login
  • 删除分支
# 删除login分支
git branch -d login
  • 远程分支相关操作【远程仓库默认叫origin】

1)将本地分支推送到远程仓库

# 首次
# 本地分支login推送到远程仓库,命名为in
git push -u orgin login:in
# 本地分支login推送到远程仓库,命名相同
git push -u orgin login
# 之后
git pull

2)查看远程仓库所有分支

git remote show origin

3)跟踪分支,将远程仓库分支下载到本地仓库

# 远程分支in下载到本地仓库,命名为login
git checkout -b login orgin/in

4)将远程仓库代码更新到本地对应分支

git pull

5)删除远程仓库指定分支

# 删除远程仓库的in分支
git push origin --delete in

Git版本控制基本使用知识整理相关推荐

  1. Git版本控制面试知识小结

    今天我们来学习下Git版本控制的知识,Git是目前世界上最先进的分布式版本控制系统(没有之一). 一.git容易混淆的两个概念 工作区: 电脑中所看到的文件目录,project就是一个工作区: git ...

  2. *Java软件开发面试知识整理*

    Java软件开发面试知识整理 围绕以下几点回答问题:是什么.为什么.什么时候用.项目实现.解决什么问题.遇到的困难 谈谈你对Java和C的理解? Java: 面向对象.Unicode:可以跨平台(JV ...

  3. Git 版本控制之 GitFlow

    来源:  http://t.cn/EbZKx96 最近在着手制定开发规范,想要把项目正规高效的跑起来.计划引入 Git 版本控制,Git-Flow 便成为了首选.因为之前并没有过多接触,所以先花些时间 ...

  4. Python介绍与特点(自学python知识整理)

    Python介绍与特点(自学python知识整理) Python 简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计: Python 是一种解释 ...

  5. Tortoise SVN 版本控制常用操作知识

    Tortoise SVN 版本控制常用操作知识 Posted on 2010-11-26 23:07 szh114 阅读(5897) 评论(0) 编辑 收藏 今天老大跑过来问我如何把SVN服务器上的当 ...

  6. git 回滚到某个commit_Git 整理 v1.0 | Git 操作整理进阶篇

    多选参数-小林翻唱,请多多支持,附上网易云链接:https://music.163.com/#/song?id=1441451111 0. 前言 这是程序锅对之前学习和使用 Git 做的一份整理,后头 ...

  7. 2022前端知识整理:十、vue基础

    十.vue基础 2022前端知识整理:第十部分.vue基础,仅包含vue2.0相关知识,建议先完成html5.css3和JavaScript ES6之后再学习.部分图片未上传成功,稍后完善,请见谅. ...

  8. iOS开发面试知识整理 – OC基础 (二)

    iOS | 面试知识整理 – OC基础 (二) 1.C和 OC 如何混编 xcode可以识别一下几种扩展名文件: .m文件,可以编写 OC语言 和 C 语言代码 .cpp: 只能识别C++ 或者C语言 ...

  9. Git版本控制\远程开发\多人协作

    Git版本控制\远程开发\多人协作 前言 你将学到 版本控制 版本控制两大主流类型 专业术语 Git的使用 基本配置 创建自己的仓库:init/clone仓库, 本地代码与云端仓库实现同步 工作区到暂 ...

  10. java中git版本控制,git版本控制管理是什么?git如何实现版本控制?

    大家好,今天要跟大家讲的是关于git版本控制管理的一点小知识,git相信程序员小伙伴们都已经很熟悉了,很多项目开发都需要git,所以,git版本控制管理到底是干嘛的呢?Git又如何实现版本控制呢?下面 ...

最新文章

  1. HTTP与HTTPS区别/HTTPS知识点
  2. insertAdjacentHTML方法详解
  3. sh执行文件 参数传递_sh 脚本执行sql文件传参数
  4. Java算法之旋转数组
  5. 在Word 2007中轻松插入或创建表格
  6. 安装Eclipse ADT插件时遇到的一些问题,错误
  7. 寻找最佳特征维度_寻找5种最佳设计模式书
  8. Java编程之从零开始学Java——初始java
  9. linux dhcpv6有状态配置,Centos 7下IPV6 有状态DHCPV6配置
  10. python机器学习之特征选择(过滤法、嵌入法、包装法案例详解)
  11. 【云大会】之五《第七届云计算大会 Day1感受:喧嚣退潮、人气萎缩》
  12. 以太坊的区块和存储(二):区块体之叔区块
  13. 创建MovieClip类
  14. 前端进行身份证验证(详细)
  15. 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三_zzjlzx-ChinaUnix博客...
  16. 计算机专业征兵,计算机应用工程系征兵宣传大会顺利召开──保家卫国,学子应征...
  17. 实验报告-Excel数据可视化
  18. spring框架之IoC理解
  19. ISP_DPC坏点矫正
  20. 忆夕阳下的光辉,给我的父亲

热门文章

  1. 安装esxi时候的No Network Adapters报错 解决办法
  2. win7 64bit部署SharePoint Server2010
  3. 【机器学习概率统计】18 隐马尔科夫模型:明暗两条线
  4. 基于计算机视觉的葡萄检测分级系统
  5. Java教程,Java学习路线图
  6. 好用的万年历API推荐
  7. 安装Win7或者XP系统用虚拟光驱加载Win7或者XP镜像 iso文件xp win7wim文件
  8. linux系统怎么安装小小输入法,CentOS 7.0下安装小小输入法
  9. 从不同音效材质了解游戏界面音效
  10. 个人学习笔记:路由交换学习思路