文章目录

  • 一、简介
  • 二、工作模式
    • 1 集中式(CVS、SVN)
    • 2 分布式Git
  • 三、Git
    • 1 工作模式
    • 2 git工作流程
    • 3 工作区和版本库
    • 4 注意事项
    • 5 基本操作
      • 5.1 创建本地版本库
      • 5.2 初始化本地版本库
      • 5.3 .git目录的作用
      • 5.4 创建用户
      • 5.5 其他操作
    • 6 git分支
    • 7 常见警告
    • 8 免密登录
    • 9 远程库使用
    • 10 标签

一、简介

二、工作模式

1 集中式(CVS、SVN)

  • 为了让不同系统上的开发者能够协同工作。有一个单一的集中管理的服务器,保存所有的修订版本。而协同工作的人们都得通过客户端连接到这台服务器,获取最新的文件或者提交更新;

存在的问题

  • 服务器出现问题,客户机无法更新到最新版本;
  • 需要网络环境,单机无法实现版本控制;
  • 客户机无法直接进行联系;

2 分布式Git

  • 每台客户机都有独立的版本控制功能, 多台客户机相连即可文件共享版本管理

优点

  • 无需网络环境也可进行版本控制,在网络下可实现协同工作

三、Git

1 工作模式

  • 集中式工作模式:便于客户机协同工作,设置一个中央版本库服务器,让索引客户机都从该主机更新版本,提交最新版本;
  • 开源社区工作模式:对于不同的客户机对中央版本库具有不同的操作权限,有利于维护开源软件的安全性;

2 git工作流程

  • 初始化:初始化一个本地版本库,每个版本库仅需要执行一次即可;
  • 克隆:将中央版本库内容克隆到本地版本库,每个客户机仅需要执行一次
  • 添加:添加指定文件到版本控制管理(只是添加到暂存区);
  • 提交:将修改操作操作到本地版本库(将暂存区的内容提交到本地版本库);
  • 推送:将本地版本库中的修改内容推送到中央版本库,客户机需要在一阶段性工作完成之后或在某些时间点将修改过的内容备份到中央版本库,方便他人更新;
  • 拉取:将中央版本库中变化的内容拉取本地版本库,客户机需要不时的更新才可获取最新内容;

3 工作区和版本库

git存在工作区版本库,版本库有暂存区分支区

工作区:存放用户可编辑的文件本身;
暂存区:存放文件的快照;
分支区:可包含很多分支,每个分支记录当前工作区中文件的状态快照;

4 注意事项

  • 版本控制只能控制文本文件,对二进制文件无法控制;
  • 编码建议使用UTF-8

5 基本操作

5.1 创建本地版本库

  • 一个本地版本库对应一个项目,即一个目录,里面所有文件都被git管理;

5.2 初始化本地版本库

  • 进入本地版本库目录;
  • git init

5.3 .git目录的作用

  • 包含当前版本库正常工作需要的所有内容:暂存区文件版本记录文件配置文件等;

5.4 创建用户

  • 每台客户机对版本库的所有提交操作都需要注明操作者的身份,所有需要创建用户:用户名和email;

三种不同创建方式,产生三种不同作用域的用户,信息会写到三个不同配置文件中

  • 系统用户:当前主机系统所有用户均可使用的git用户;
  • 全局用户:当前主机系统的当前登录用户可以使用git用户;
  • 本地库用户:只能对当前的本地版本库进行提交的git用户;
  • 在多种用户下,会默认以小范围用户操作git;

系统用户

  • 可在任意目录下运行创建命令;
  • git config --system user.name "xxx"
  • git config --system user.email "xxx.com"
  • 查看git config --system --list

全局用户

  • 该命令可在任意目录下运行;
  • git config --global user.name "xxx"
  • git config --global user.email "xxx.com"

本地库用户

  • 只能在当前本地库目录下运行;
  • git config user.name "xxx"
  • git config user.email "xxx.com"

5.5 其他操作

查看状态git status

添加文件到暂存区

  • 添加指定文件:git add file
  • 添加多个文件:git add file1 file2...;【可使用通配符】

提交:从暂存区永久写入本地仓库:git commit -m "msg"

忽略文件:只需要在工作区创建一个.gitignore,将要忽略的文件名写入,并将.gitignore提交到本地版本库即可;

查看区别

  • 比较工作区与暂存区:git diff file
  • 比较暂存区与本地版本库:git diff --cached file

翻页与退出git log信息太多;

  • 回车:下一行;
  • 空格:下一页;
  • q:退出git log;

查看历史版本信息:id是通过IP、版本库、提交者、提交时间计算的值、作者信息、时间、空行、提交的信息

  • 查看历史版本:git log
  • 查看简单的日志:git log --pretty=online
  • 简介id方式显示:git log --pretty=online -abbrev-commit
  • 只能查看历史版本到当前HEAD的信息;

查看可引用历史版本:避免版本回退出现问题;

  • 能查看所有历史版本信息:git reflog

HEAD指针:git会默认创建主分支,而HEAD指向当前刚刚提交的版本时间节点;

  • ^:表示当前版本的前一个版本,以数量计算;HEAD^
  • ~num:表示当前版本之前的第几个版本;

撤销修改

  • 工作区修改,未添加到暂存区:git checkout -- file
  • 修改已添加到暂存区,为提交到本地版本库:git reset HEAD file
  • 提交到了本地版本库,无法撤销,但可回退版本:git reset
    • git reset --soft HEAD^:回退到当前版本的前一个版本,但仅修改分支中的HEAD指针的位置,不会改变工作区与暂存区中的文件的版本,状态变为未提交的状态;
    • git reset --mixed id:回退到指定版本,修改了分支中HEAD指针的位置并将暂存区中数据也回退到指定版本,但工作区不变;
    • git reset --hard id:回退到指定版本,修改分支中HEAD指针的位置并回退了工作区、暂存区、本地库;

删除文件:需要明确文件的状态;

  • 若为被管理:可直接删除;
  • 仅删除暂存区中指定文件:git rm --cached
  • 完全删除:git rm,三个区都删除;

查看暂存区列表git ls-files

查看本地库文件列表git ls-files --with-tree=HEAD;即主分支上当前HEAD指针所指向的时间点的文件列表,HEAD^即上一版本;

恢复被删除文件

  • git reset HEAD 文件名恢复在暂存区中的文件;

6 git分支

  • git主干:上每一个节点就是一个版本,即一次commit提交,且可以有多个指针(分支);
  • git分支:一个指针的移动轨迹即为一个分支,分支可任意切换,切换后均可进行各自的提交;;
  • HEAD:当前分支当前最新版本,分支的切换即修改HEAD指针;


分支合并

  • 将dev分支的工作合并到主分支上;即将master指针指向dev指针指向的节点,再将HEAD指针指向master指针指向的节点即可,即修改两个指针的指向;

合并后的删除

  • 合并后dev分支的文件版本低于master分支上该文件的版本,合并后的dev即无用,故一般将其删除;

创建并切换分支git checkout -b 分支名称

  • 创建分支:git branch 分支名
  • 切换分支:git checkout 分支名

查看系统的分支git branch

删除分支git branch -d 分支名,需要切换到其他分支才能删除;

合并分支git merge 分支名

  • 若将B合并到A,需要将当前分支切换到A上,在合并git merge B

分支合并冲突

  • git:当不同分支对同一个文件进修改后进行合并就会产生冲突;
  • svn:只有不同分支修改的是同一文件同一行同一列才会冲突;
  • 当失败是,会给出失败的状态,可通过查看文件查看冲突内容分割线(====),合并的内容(<<<<<<<<< >>>>>>>>);
  • 手动修改内容,在提交即可;
  • 【注意】:master中为合并后的版本,而dev为合并前的版本,一般会将其删除;

查看合并记录

  • git log --graph可看出合并冲突;

7 常见警告

LF被CRLF替换警告:LF是Linux下换行符,CRLF是window下换行符;

8 免密登录

简介

  • Git主机的通信采用SSH协议;该协议包含公钥和私钥;
  • 公钥私钥是一对,使用公钥加密,只能使用私钥进行解密;

生成步骤

  • Master生成密钥,保存在本地;
  • 在将Master公钥及用户名密码发生给Slave,并将公钥用户信息保存到本地即可;

验证

  • Master向Slave发生连接请求,包含Master用户信息;
  • Slave从本地文件中查找是否存在连接中包含的用户信息,若不存在,则拒绝,则存在,则访问;
  • Master将加密后的附页字符串使用私钥进行解密;
  • Master将解密后的字符串发生给Slave;
  • Slave将接收到的字符串与本地为加密的字符串进行比较,相同则可访问;

》》》》》》》》免密登录参考连链接《《《《《《《《

9 远程库使用

创建

git remote add origin git@github.com/xxxx   # 为指定一个远程版本库命名一个本地名称(origin)
git push -u origin master                   # 推送master分支
# -u 指定默认的远程库
git push # 将本地版本库中当前分支推送到默认远程库
git push origin  # 将本地版本库中当前分支推送到origin远程版本库
git push origin master  # 将本地版本库中master分支推送到origin远程库

克隆到本地库

  • 创建本地库存储目录:不需要创建项目目录;
  • 复制远程库地址:
  • 运行克隆命令:

pull到本地库

git pull origin master # 将远程库origin的master分支拉取到本地库与本库的master分支合并;
git pull origin master:dev # 将远程库origin的master分支拉取到本地并与本地dev的分支合并;
git pull    # 从默认远程库拉取与本地库当前分支合并;

查看本地的远程库信息
git remote:列举当前本地版本库可操作的远程版本库名称;-v

删除本地的远程库信息
git remove rm 远程库名称

10 标签

标签是与commit id绑定的名称,一旦绑定就不能修改;

定义

  • 轻量标签git tag 标签名 commit-id,若给历史版本指定标签,则要加ID;
  • 附注标签git tag -a 标签名 -m "附注说明" commit-id

查看

  • 查看当前系统下的所有标签git tag
  • 查看指定标签的详情git show 标签名称

修改

  • 若需要修改代码则需要重新创建一个分支,修改后再合并到master分支;在将该分支删除,合并到mster分支后,仍需要删除原标签,在与新的commit-id绑定;
  • 一旦标签定义完成后就不会与删除再绑定了,而是会再定义一个新的标签与新的commit-id绑定;

推送


git push origin 标签名 # 推送单个标签
git push origin-tags # 推送所有为推送的标签到远程库

删除

  • 删除本地标签:git tag -d 标签名
  • 删除远程标签:git push origin :refs/tags/标签名

【git版本控制】| git版本控制操作命令(全)相关推荐

  1. 嵌入式Linux入门4:版本控制git的使用

    本文介绍版本控制git的使用.git的使用,网络上有很多资料,笔者使用git多年,因此本文列出简单操作命令,顺便说一说使用经验. 一.Windows篇 由于嵌入式Linux使用的uboot.kerne ...

  2. git bash here创建项目无法选择m_版本控制Git基础及使用详解

    1.Git简介 1.1.简介 Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git的读音为/gɪt/. Git是一个开源的分布式版本控制系统,用以有效.高速的处理 ...

  3. 项目开发-工具-版本控制Git完整系统化使用说明

    Git使用说明 前言 1. 起步 1.1 关于版本控制 1.2 Git 简史 1.3 Git 是什么? 1.4 命令行 1.5 安装 Git 1.6 初次运行 Git 前的配置 1.7 获取帮助 1. ...

  4. 【尚硅谷Java笔记+踩坑】Git(分布式版本控制工具)

    用于复习快速回顾 目录 1.Git 1.0.提交项目到GitHub简洁版 1.2.版本控制 1.3.版本控制工具 1.4.Git简史 1.5.Git工作机制 1.6.Git和代码托管中心 2.Git安 ...

  5. Mac下从安装Git到使用github进行版本控制(git命令/Xcode管理)

    个人在iOS的开发过程中,经常会用到第三方类库,而这些类库大都是在GitHub上的,不得不说GitHub确实是一个非常酷的网站,实用一点说这里可以学习到很多的东西,也可以和世界各地的开发人员接触,势利 ...

  6. Git和GitHub Git和Goes版本控制

    一.Git常用命令总结 1. git本地仓库创建并初始化 mkdir learngit && cd learngit #创建一个文件夹作为版本库 git init #将该文件初始化为g ...

  7. 版本控制 Git RPM打包

    版本控制 版本库 典型的客户/服务器系统 版本库是版本控制中心的核心 任意数量客户端 客户端通过写数据库分享代码 版本控制系统 集中式版本控制系统 开发者之间共用一个仓库(repository) 所有 ...

  8. 删除隐藏版本信息 版本回退_Git系列之-分布式版本控制Git详解

    课程简介: 课程目标:通过本课程的学习,将全面掌握Git版本管理工具的配置与使用,以适应工作的需要. 适用人群:具有一定开发基础的开发人员. 课程概述:Git (读音为/gɪt/)是一个开源的分布式版 ...

  9. Git本地库版本控制和分支管理

    版本控制 ①git log [parameter] 查看版本记录(使用Hash值指向相关信息,只显示之前的版本) 常用参数: –pretty = oneline (或 --oneline,缩短Hash ...

  10. 实时 Git,在版本控制之前控制源码

    Git 用于源代码版本控制已经是一个很强大的神器了,但是有人在此基础上还开发了一个被认为是"实时 Git"的工具. 这个工具叫 Coactive,它以 Visual Studio ...

最新文章

  1. springmvc常用注解标签详解
  2. 从零开始编译自己的Linux发行版 LFS简介
  3. LOAD DATA INFILE 语法
  4. C#发送电子邮件 (异步) z
  5. 超级连续的图片滚动特效
  6. JAVA后端常用框架SSM,redis,dubbo等
  7. php der格式 证书,php读取der格式证书乱码解决方法_PHP教程
  8. php特殊字体生成,生成艺术字体图片水印代码_PHP教程
  9. 苹果手机上编辑html文件夹,苹果手机可以编辑EXCEL文件吗
  10. 80211协议beacon帧字段解析一
  11. FPGA开发第四弹:触摸按键控制LED灯实验
  12. C语言经典实例003:输出名言
  13. 峰值速率、系统容量、吞吐量、带宽之间的区别
  14. 构建一个代号为1的聊天应用程序4
  15. 图解:什么是图?(以“图”话图)
  16. iOS - 下拉上拉菜单,万能菜单,适用于各种场合
  17. 3d Max安装失败(Microsoft Visual C++ 2010 Redistributable)
  18. 从零开始的单片机学习(四)
  19. 管理学中的纳什均衡理论分享
  20. Link-aggregation端口聚合

热门文章

  1. N沟道增强型MOS管双向低频开关电路
  2. android三星note20.6,三星Galaxy Note 20 Ultra依旧是“安卓机皇”,用过的都说好
  3. GPL协议与MIT开源协议的异同
  4. MyBatis入门回顾
  5. 【Py】基于Python的身份证读卡器二开全记录
  6. OpenHarmony编译系统
  7. 基于NXP_LS1012A 芯片ARM工控主板
  8. GCP---Google cloud Platform
  9. 医学主题词表(Medical Subject Headings, MeSH)
  10. Linux:以K、M、G查看文件大小;