Git

  • 什么是Git
    • 分布式版本控制系统
  • 版本库
    • 什么是版本库
    • Git的安装与配置
    • 仓库管理命令
      • 初始化命令
      • 添加文件至暂存区
      • 提交文件至本地仓库
      • 跳过使用暂存区域
      • 查看文件状态
      • 查看文件在当前工作区与本地仓库的异同
      • 查看历史版本
      • 取消暂存的文件
      • 回退到指定的版本
      • 移除文件
      • 查看提交历史
      • 撤销工作区的修改
  • 远程仓库
    • 添加远程库
    • 关联远程库
      • 推送本地库内容
    • 删除远程库
    • 克隆远程库
    • 分支管理
      • 创建分支
      • 查看分支列表
      • 合并分支
      • 删除分支
      • 删除远程分支
      • 切换分支
      • 解决冲突
      • 分支合并图
  • 相关概念
    • 开源许可协议
    • 开源项目托管平台
    • 远程仓库的两种访问方式
      • SSH Key
    • 工作区与暂存区
  • 常见错误

文章并不完全是按照强逻辑联系在一起排版的,各位根据所需按目录进行跳转。
撒花撒花,学了那么久,终于搞完啦
学计算机专业,尤其是搞软件开发的,真的建议先学Git,了解GitHub的使用,不然你真的会错过太多学习优秀项目时间,就像我一样,悔恨不已。


什么是Git

Git是目前世界上最先进的分布式版本控制系统。

Git是用C语言开发的。

分布式版本控制系统

特点:

  1. 基于服务器、客户端的运行模式
  2. 服务器保存文件的所有更新版本
  3. 客户端是服务器的完整备份,并不只是保留文件的最新版本

优点:

  1. 联网运行,支持多人协作开发
  2. 客户端断网后支持离线本地提交版本更新
  3. 服务器故障或损坏后,可使用任何一个客户端的备份进行恢复

版本库

什么是版本库

版本库,又名仓库,repository。可以简单理解为一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时候都可以追踪历史,或者在将来某个时刻可以“还原”。

Git的安装与配置

安装根据提示一直下一步即可。

配置用户信息,用于记录操作修改的人员信息:

git config —global user.name "您的昵称"

git config —global user.email "您的邮箱"

仓库管理命令

初始化命令

通过git init将目录文件变成可以管理的仓库。

添加文件至暂存区

通过git add 将文件添加到版本库,也就是开始跟踪该文件的修改。

作用:

  1. 可以用它开始跟踪新文件
  2. 把已跟踪的、且已修改的文件放到暂存区
  3. 把有冲突的文件标记为已解决状态

其他:

向暂存区一次性添加多个文件git add . 一次性将所有的新增和修改过的文件加入暂存区

提交文件至本地仓库

通过git commit 将文件提交到版本库,一定要带上-m添加备注信息。

跳过使用暂存区域

git commit -a -m "描述信息" 直接将工作区的文件提交到Git仓库

查看文件状态

通过git status 查看当前仓库中文件状态。

以精简的方式显示文件状态:git status -s 或者 git status -- short

??表示未跟踪状态,untracked

A表示新添加到暂存区状态

M表示修改过的、没有放入暂存区的文件状态

M表示已修改且已放入暂存区的文件状态

查看文件在当前工作区与本地仓库的异同

通过git diff 查看前后文件的区别,即改动内容。

查看历史版本

通过git log 查看仓库内文件的历史版本,加上–pretty=oneline 用一行展示。

取消暂存的文件

git reset HEAD 要移除的文件名称

回退到指定的版本

通过git reset --hard commit_id 回退到版本号所处的仓库状态。

commit_id:

  1. 版本号,可以用HEAD表示当前版本,上一个版本就是HEAD,上上个版本就是HEAD^,往上100个版本可以表示成HEAD~100
  2. 也可以是十六进制表示的数字编号

移除文件

  1. 从Git仓库和工作区中同时移除对应的文件git rm -f index.js
  2. 只从Git仓库中移除指定的文件,但保留工作区中对应的文件git rm --cached index.css

查看提交历史

通过git reflog 查看历史提交的版本备注内容。

关于git log 和git reflog的区别是:前者是历史提交的详细信息,包括版本号、作者信息、日期、提交时的备注内容,后者是直接查看版本备注信息。

撤销工作区的修改

git restore to discard changes in working directory

git checkoutto discard changes in working directory

上述两条命令都是撤销工作区的修改。git checkout其实就是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以一键还原。

远程仓库

Gitee和GitHub都是可以提供Git仓库托管服务的。注册相关账号,你就拥有了远程仓库。

本地仓库与远程仓库之间的传输是通过SSH加密的,配置步骤如下:

  1. 创建SSH Key。在C:\Users\Administrator目录下,看是否已有.ssh目录,该目录下是否有id_rsaid_rsa.pub这两个文件。如果有可直接跳过,没有就在Git Bash中执行如下命令创建SSH Key:ssh-keygen -t rsa -C "youremail@example.com"

  2. 登录远程仓库的账号,找到设置下的SSH字样,在Key文本框中粘贴id_rsa.pub文件中的内容

  3. 添加完成

添加远程库

找到Create a new repository的页面,点击创建仓库按钮新建一个名为learngit的仓库。

关联远程库

git remote add origin git@github.com:ahcici/learngit.git

.com 后面的ahcici替换成你自己的账户名,远程库的名字是origin,也可以更改为其他的。

推送本地库内容

git push -u origin main

加上-u 会把本地的分支和远程的分支关联起来,只在第一次推送的时候使用

可以简化以后的pull/push命令

之后的推送命令就可以是git push origin main

这个origin后的分支名,看你自己有没有改动过,以路径后面提示的内容为准。

origin是远程仓库的别名。

删除远程库

并不是真正意义上的删除远程库,只是取消本地仓库与远程仓库的连接。

通过git remote -v查看远程库信息。

通过git remote rm origin<远程仓库名称>解除本地与远程仓库的绑定关系。

克隆远程库

假若我不小心将我本地的learngit目录删除了,由于我已经推送过远程库,那么我可以从远程库复制一份到本地,也被称之为克隆。

首先,得先清楚要克隆的仓库地址,其也就是咱们之前关联的仓库地址是一样的,就是这样的格式: git@github.com:ahcici/learngit.git

按图操作,最后使用git clone git@github.com:ahcici/learngit.git<你第四步复制的地址>命令克隆到本地。

分支管理

创建分支

git checkout -b dev(分支名) 加上-b参数表示创建并切换相当于git branch dev【创建分支】+git checkout dev【切换分支】

查看分支列表

git branch 查看当前分支列表 分支名字前的*好表示当前所处的分支

查看远程仓库中的分支列表git remote show origin

合并分支

git merge dev(分支名) 合并指定分支到当前分支

合并分支时,使用--no-ff参数表示禁用fast forward使用普通合并。

删除分支

git checkout -d dev(分支名) 删除指定分支

删除远程分支

git push 远程仓库名称 --delete 远程分支名称

切换分支

git switch -c dev创建并切换到新的dev分支

解决冲突

在两个不同的分支中,对同一个文件进行了不同的修改, 即git无法执行“快速合并”,只能试图将各自的修改合并起来,所以会存在冲突,需要手动进行修改再添加并提交。

分支合并图

git log --graph 可以查看分支合并图。

git log --graph --pretty=oneline —abbrev-commit 一行展示合并图和提交信息简写。

相关概念

开源许可协议

BSD

Apache License 2.0

GPL: 具有传染性的一种开源协议,不允许修改后和衍生的代码作为闭源的商业软件发布和销售

具有GPL的最著名的软件项目是:Linux

LGPL

MIT: 是目前限制最少的协议,唯一的条件:在修改后的代码或者发行包中,必须包含原作者的许可信息

使用MIT的软件项目有jquery、Node.js

开源项目托管平台

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

GitHub

Gitlab

Gitee

远程仓库的两种访问方式

  1. HTTPS:零配置;但是每次访问仓库时,需要重复输入GitHub的账号和密码才能访问成功
  2. SSH:需要进行额外配置;但是配置成功后,每次访问仓库时,不需重复输入github的账号和密码

在实际开发中,推荐使用SSH的方式访问远程仓库。

SSH Key

作用:实现本地仓库和github之间的免登录的加密数据传输。

工作区与暂存区

工作区是咱们所操作的文件目录,除了工作区外,还有一个暂存区,也就是git add 以后文件被存储的位置,而git commit 以后文件就被提交到了master主分支上。

通俗来讲,就好比在餐厅吃饭,我们几个人先点了单,但是途中我们会希望换掉某道菜或再加上几道菜,等到最后已经吃饱喝足,就得付款了,那么实际付的金额就是最后修改后所有菜单内容的价值。当然或许这个例子不太恰当,但在这里足够说明工作区、暂存区和最后的分支上的内容是有差的。

需要注意的是Git跟踪并管理的是修改,而非文件。

master主分支:用来保存和记录整个项目已完成的功能代码

功能分支:专门用来开发新的功能的分支

常见错误

Q:fatal: not a git repository (or any of the parent directories): .git

A:当前目录文件夹不是Git仓库,即没有.git 进行管理,操作无效

Q:fatal: pathspec 'readme.txt' did not match any files

A:匹配不到readme.txt文件,即文件不存在或文件名字有误导致找不到

一篇学会Git版本管理相关推荐

  1. 猿创征文|一篇学会Git的使用

    目录 Git的版本控制 常见的版本控制工具 版本控制分类 1.本地版本控制 2.集中版本控制 svn 3.分布式控制 git Git和SVN的主要区别 Git的历史 Git环境配置 软件下载 启动gi ...

  2. Git——版本管理工具(一)

    Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git  -- The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背 ...

  3. 微信小程序云开发新手教程——关于多人云开发和git版本管理

    多人团队开发微信小程序项目时,如何更好的进行团队协作是一个关键问题.接下来的这篇文章里,主要以项目的管理者和项目参与者两种身份,介绍了云开发初始环境的配置的具体方法,以及通过git进行团队的版本管理. ...

  4. 深入浅出Git教程+一个小时学会Git(转载)(堪称完美)

    转载自: https://www.cnblogs.com/best/p/7474442.html#!comments 目录 一个小时学会Git 一.版本控制概要 工作区 暂存区 本地仓库 远程仓库 1 ...

  5. Git 版本管理工具(一)

    Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git  -- The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背 ...

  6. 微信小程序——Git版本管理

    一篇文章带你学会微信小程序中的Git版本管理 场景复现 微信开发者工具中的Git 连接远程仓库 配置网络和认证 提交工作区更改 查看历史 查看文件修改历史 切换分支 创建分支 拉取.推送与抓取 微信官 ...

  7. 一篇学会HttpServletRequest

    前言 JavaWeb系列教程 JavaWeb-Servlet 模拟Servlet本质 使用IDEA开发Servlet程序 Servlet对象的生命周期 适配器(GenericServlet)改造Ser ...

  8. git学习——四git版本管理

    一.git版本管理的优势 都说git比svn强大,强大在哪呢? 首先,从部署上说:svn.cvs都是集中式的,一台服务器上部署服务,所有客户端编写的代码都要提交到该服务器上.git是分布式的,所有人都 ...

  9. g4e基础篇#3 Git安装与配置

    现在你已经对Git有了最基本的了解,现在让我们开始动手开始安装和配置Git环境. Git工具包括Git命令行工具,图形化工具和服务器环境:在我们这个教程中,我们会使用以下软件配置我们的环境: • Wi ...

最新文章

  1. Ubuntu14.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)
  2. 采用傅立叶变换空间载波法从强度分布得到相位分布,即从空间上呈正弦分布的光强信息,恢复出波面的相位信息
  3. ACE - Reactor模式源码剖析及具体实现(大量源码慎入)
  4. Linux 卷管理详解[ pv vg lv] —— 之三
  5. 下滑加载更多js_专治:卫生间免砸砖,房顶漏水,JS堵漏王水不漏,厂家三包产品,免费成熟配方(点开看更多)...
  6. Java面试题:IO流的标准处理异常的代码
  7. haproxy心跳检测_haproxy 非常完整的配置
  8. Android笔记(四十七) Android中的数据存储——XML(三)SAX解析
  9. Android开发之PullToRefresh的Click点击事件的监听实现长按删除Item
  10. 引力波应该称为空间波
  11. Java算法常见面试题及答案
  12. Qt使用资源管理器打开指定本地文件夹
  13. 1.3寸IIC OLED SH1106和Arduino库的适配性鸡肋问题
  14. H5互动游戏平台推荐:盘点那些超火的多人小游戏互动对战平台
  15. Android:简单实现美女扒衣服小游戏
  16. 原生js实现QQ邮箱邮件拖拽删除功能
  17. 智能投顾Betterment优于传统88%的收益率背后掩盖着什么真相?
  18. 零基础无实物一步一步学PLCS7-1200仿真 背景知识二 电气控制基本电路
  19. 摄像头采用国标GB28181协议信令调试(SPVMN 视频监控联网调测软件)
  20. 【2021最新版】Spring Cloud面试题总结(35道题含答案解析)

热门文章

  1. 搭建DJI 无人机Onboard SDK ROS开发环境及测试
  2. 人工智能AI常用的库有哪些?
  3. 临近大学毕业的一些感悟和想法
  4. 【教师证学习笔记005】中学生发展心理
  5. 开发常用命令(Mac版本)
  6. JVM 虚拟机详解内部原理(小白必看!)
  7. Oracle数据库出现-12514错误
  8. png图片的结构和crc校验
  9. HTML表格里分割线是否显示的问题
  10. bat、头条、爱奇艺iOS面试题总结