写在前面

很高兴在我的 Chat 分享里与你认识,前段时间,在平台上推出过几篇文章分享,在此期间收到不少读者的回复与好评,在这里再次感谢大家的支持。

为什么会写这篇文章?

随着秋招进行中,诸多大学生以及转行做 IT 的技术者开始应聘工作,然而当他们面试被问到 Git 时,却对其一无所知。那么 IT 工作者团队开发是怎样的呢?目前的软件开发项目通常是由一个研发小组(团队)共同分析、设计、编码、维护以及测试的。Git 则是一款分布式源代码管理工具,目前国内企业几乎都已经完成了从 SVN 到 Git 的转换。

本场 Chat 主要围绕以下内容展开讲解:

enter image description here

聊聊学习 Git 那些事

现在回想起来,其实我接触 Git 的时候是在我大一的时候,我的表哥带我入门的。当时因为需要做一个项目,所以他教我如何使用 Git 将写好的代码推送到 GitHub 上,然后再从远程仓库拉到本地。起初因为没有接触过 Git,觉得这玩意很难学,又是一大堆命令需要记忆,在他教我的时候内心是抵触的,当时觉得为什么不把写好的代码发送给我呢?你是否也有过这样的疑问呢?

学习 Git 的时候,因为没有和他认真学,在他教过我一遍之后还是一脸懵逼,写命令的时候也是不时地回头查看。因为不懂得 Git 版本控制的原理,总是将代码推送不到远程服务器,同时还出现一大堆错误,只好不停地去询问他原因。

enter image description here

这是我当时学习 Git 版本控制的小经历,现在你可以想想你的情况。

  • 你是否和我当初一样,大学才开始接触 Git?

  • 是否还未听过 Git OR GitHub?

  • 是否还未拥有自己的 GitHub 账号?

  • 是否还不懂 Git 工作原理?

  • 是否看完 Git 网络教程还是不会将代码推送到 GitHub?

如果你还是这种情况,没关系,因为这不是你一个人的问题。我相信通过本次 Chat,你一定可以懂得 Git 工作原理,也会拥有自己的 GitHub 账号,并且能将自己写好的代码推送到远程仓库,通过 GitHub 托管,再也不用担心重装系统导致代码丢失的问题。(这是建立在你动手的前提之下,当然本次 Chat 我会尽力讲的通俗易懂)

在使用 Git 之前,我们先需要学习一些 Git 知识铺垫,以备我们后面更好的学习 Git 版本控制。

Git 知识铺垫

  • 程序员为什么要使用 Git 版本控制?

  • 常见的版本控制?

  • Git 是什么?

  • Git 工作原理

  • Git 安装

程序员为什么要使用 Git 版本控制?

现在的软件项目通常是由一个研发小组共同分析、设计、编码、维护以及测试的。在公司 99% 的都是团队合作开发项目,如果是团队开发项目,那么就会遇到以下问题:

  • 难以恢复至以前正确版本(版本 1.0~2.0

  • 容易引发 bug

  • 代码责任问题(跑路

  • 代码管理问题

  • 代码冲突问题(写同样的代码

  • 无法进行权限控制

  • 项目版本发布困难

  • ......

针对以上诸多问题,源代码管理工具(版本控制工具)应用而生。

使用版本控制工具:

  • 不会对现有工作造成任何损害

  • 不会增加工作量

  • 代码管理更方便

  • 代码得以追随

  • 添加新的功能拓展时,会变得更加容易

  • ......

常见的版本控制

  • CVS 版本控制

  • SVN 版本控制

  • Git 版本控制

  • CVS:CVS 是一个 C/S 系统,是一个常用的代码版本控制软件,1990 年诞生,10 多年前主流源代码管理工具。

  • SVN:SVN 又称 subversion,是一款集中式源代码管理工具。由于之前 CVS 编码的问题,大多数软件开发公司都使用 SVN 替代了CVS,前几年在国内软件企业使用最为普遍。

  • Git:一款分布式源代码管理工具,目前国内企业基本都使用 Git。

CVS 和 SVN 是一个集中式的版本控制器,他们需要一台专门的版本控制服务器。而 Git 是分布式的,他不要一台专门的服务器来运行这个版本控制。每个开发人员的电脑组成的网络就可以运行 Git,特别适合源代码的发布和交流,因此大部分开源项目都用 Git。目前国内企业几乎都已经完成了从 SVN 到 Git 的转换。

enter image description here

Git 是什么?

Git:一款分布式源代码管理工具,是 Linux 之父李纳斯的第二个伟大作品。

SVN:集中式管理

  • 在集中式下,开发者只能将代码提交到服务器;

  • 在集中式下,只有远程服务器上有代码数据库。

Git:分布式管理

  • 在分布式下,开发者可以本地提交,也可以提交到远程服务器;

  • 在分布式下,每个开发者机器上都有一个代码仓库。

在世界上所有的分布式版本控制工具中,Git 是最快、最简单、最流行的。

Git 工作原理

学好 Git 的前提是理解 Git 工作原理。

了解 Git 工作原理前,我们需要了解两个重要的知识,即工作区和版本库。

  • 工作区:仓库文件夹里面,除了 .git 目录以外的内容(详见下图)

  • 版本库:Git 目录,用于存储记录版本信息(详见下图)

  • 版本库中的暂缓区(stage)

  • 版本库中的分支(master):Git 自动创建的第一个分支

  • 版本库中的 HEAD 指针:用于指向当前分支

enter image description here

如下图所示:

在工作区中有文件 a.txt、b.html,经过执行 git add . 命令之后会将工作区的文件添加到暂缓区中,再经过执行 git commit -m "说明文字" 命令之后,会将暂缓区的文件添加到版本库的分支当中去。

enter image description here

Git 安装

首先进入 Git 下载地址:选择对应操作系统的版本,如下图

enter image description here

选择对应 Git 版本(32 位 or 64 位)适用于 Windows 安装程序的 Git,如下图

enter image description here

下载完成之后,安装即可(安装过程中点击下一步 Next 即可)。

验证 Git 是否安装成功(验证方法如下图)

enter image description here

具体安装过程这里不做截图:小白请见 Git 安装百度经验

Git 命令个人开发

在学习 Git 命令个人开发之前,我们需要了解一些常用的 Git 命令。

git help:Git 指令帮助手册

打开 git bash 终端,输入 git help 指令会出现如下图所示的Git命令详细解释,每个命令代表的意思(不懂英文也没关系,复制到翻译内就 ok)如 git init 代表初始化一个仓库。

enter image description here

git init:(个人仓库)仓库初始化

首先我们在桌面新建一个 project 空文件夹之后,鼠标右键以 git bash here 打开 Git 终端,输入 git init 命令之后,观察 project 文件夹之后多了一个隐藏文件夹 Git 目录。这时我们就创建好了一个受 Git 管理的仓库,这个仓库就在本地。

enter image description here

隐藏的 .git 目录分别代表什么意思详见下图:

enter image description here

在使用 Git 之前,我们需要配置用户基本信息,即配置用户名和邮箱。(防止跑路)

当前项目下配置用户名与邮箱命令如下:

  • 配置用户名:git config user.name "用户名"(跟踪 who 修改记录)

  • 配置邮箱:git config user.email "邮箱"(多人开发间的沟通)

enter image description here

git config -l:查看配置信息命令

enter image description here

配置全局用户名与邮箱命令如下(适用于所有项目):

  • 配置全局用户名:git config --global user.name "用户名"(跟踪 who 修改记录)

  • 配置全局邮箱:git config --global user.email "邮箱"(多人开发间的沟通)

git status :查看文件的状态

  • 查看某个文件的状态:git status 文件名

  • 查看当前路径所有文件的状态:git status

git add:将工作区的文件保存到暂缓区

  • 保存某个文件到暂缓区:git add 文件名

  • 保存当前路径的所有文件到暂缓区:git add .(注意,最后是一个点 . )

git commit:将暂缓区的文件提交到当前分支

  • 提交某个文件到分支:git commit -m "注释" 文件名

  • 保存当前路径的所有文件到分支:git commit -m "注释"

首先我们在工作区中,添加两个新的文件:readme.txt、index.html。如下图所示:

enter image description here

然后我们进入 Git 终端,输入 git status 命令查看文件状态如下图所示:

enter image description here

然后我们输入 git add . 命令 将工作区的文件保存到暂缓区,并输入git status 命令再次查看文件状态如下图所示:

enter image description here

我们再次输入git commit -m""命令"添加了新文件" 将暂缓区的文件提交到当前分支,如下图所示:

enter image description here

上述 Git 命令执行分析:

enter image description here

git log:查看文件的修改日志

在工作区再新增 git.txt 文件,并将该文件添加到主分支(执行上述命令),然后输入 git log 命令,如下图所示,我们可以清楚的看到什么时候谁(who)干了什么事。

enter image description here

git reflog :查看分支引用记录(能够查看所有的版本号)

输入 git reflog 命令,我们可以清楚的看到版本号下对应做了什么事(以简短的方式查看日志)。

enter image description here

git diff:查看文件最新改动的地方

我们为工作区中的文件 index.html 添加了一段代码如下所示,然后因为工作区文件 index.html 被修改,所以我们再次将修改后的文件提交到主分支中。

enter image description here

然后我们再次修改代码,如下图所示:

enter image description here

然后我们输入 git diff 命令,如下图所示,绿色的代码被最近一次被修改的代码,还未受到 Git 版本控制。

enter image description here

git reset:版本回退(建议加上––hard 参数,Git 支持无限次后悔)

  • 回退到上一个版本:git reset ––hard HEAD^

  • 回退到上上一个版本:git reset ––hard HEAD^^

  • 回退到上 N 个版本:git reset ––hard HEAD~N(N 是一个整数)

  • 回退到任意一个版本:git reset ––hard 版本号

注意:Git 命令团队开发与个人开发命令基本相同,这里不做详细介绍。

GitHub 简单使用

Git 命令补充:

git clone:下载远程仓库到本地

  • 下载远程仓库到当前路径:git clone 仓库的URL

  • 下载远程仓库到特定路径:git clone 仓库的URL 存放仓库的路径

git pull:下载远程仓库的最新信息到本地仓库

git push:将本地的仓库信息推送到远程仓库

  • 提交时如果远程仓库有其它人提交的最新代码,必须先 pull,再提交

GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。

使用 GitHub 之前,我们需要去 GitHub 官网注册一个属于自己的账号,然后登录你的 GitHub 账号。选择你的仓库:

enter image description here

点击右侧 New 新建一个仓库,并给改仓库起一个名字,可以描述该仓库是什么项目,如下图所示:

enter image description here

enter image description here

然后我们在桌面创建一个 chatdemo 文件夹,以 git bash 终端打开,输入 git clone 仓库的URL 下载远程仓库到本地,即 git clone https://github.com/xxxcode/git.git

enter image description here

然后我们进入 chatdemo 下的工作区,新建 readme.txt 与 index.html 文件:

enter image description here

使用 Git 命令将工作区的文件提交到暂缓区,并再次提交到主分支:

enter image description here

git push:将本地的仓库信息推送到远程仓库:

enter image description here

git push 提交之后,远程仓库新增了 2 个文件,如下图所示:

enter image description here

Chat 结语

通过本次 Chat 我们学习了 Git 的工作原理,以及 Git 版本控制管理代码的好处,同时也学习了 Git 的常用命令,最后我们通过 Git 版本控制的命令将本地的代码提交到 GitHub 远程仓库中。本次学习主要是通过学习 Git 工作原理,通过 Git 命令将代码提交到远程仓库中。我相信大家理解了 Git 工作原理之后,学习 Git 中的其它命令也会很容易,这里就不逐一的对 Git 各个命令做详细讲解。

点击「原文链接」看更多精彩

????????

1小时搞懂 Git 版本控制相关推荐

  1. 20分钟教你搞懂Git!

    Git 是最流行的版本管理工具,也是程序员必备的技能之一.本文就来教你 20 分钟搞懂 Git! 以下为译文: 尽管每天你都会用到Git,但也有可能搞不懂它的工作原理.为什么Git可以管理版本?基本命 ...

  2. 20 分钟教你搞懂 Git!

    Git 是最流行的版本管理工具,也是程序员必备的技能之一.本文就来教你 20 分钟搞懂 Git! 以下为译文: 尽管每天你都会用到Git,但也有可能搞不懂它的工作原理.为什么Git可以管理版本?基本命 ...

  3. 一天彻底搞懂 Git 《Git 原理详解及实用指南》

    我是扔物线,Android 开发者,开源贡献者,在 GitHub 上有 4.9k followers 和 7.8k stars ,个人的 Android 开源库 MaterialEditText 被全 ...

  4. 好文推荐,15 分钟教你搞懂 Git!

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 译者丨Alex https://www.tutorialdocs.com/article/how- ...

  5. 这一次彻底搞懂 Git Rebase

    使用 Git 已经好几年了,却始终只是熟悉一些常用的操作.对于 Git Rebase 却很少用到,直到这一次,不得不用. 一.起因 上线构建的过程中扫了一眼代码变更,突然发现, commit 提交竟然 ...

  6. 1小时搞懂设计模式之原型模式

    1 什么是原型模式 原型模式根据一个对象在重新创建一个对象 并保证这2个对象内容是一致的.java中的克隆技术就是原型模式的实现. 2 原型模式的特点 有一个可以被拷贝的原型对象 保证被拷贝的对象和原 ...

  7. 1小时搞懂设计模式之单例模式

    什么是单例模式 世界上没有两片完全相同的树叶,每一个物体都是唯一的.所谓单例就是唯一份,在java中来说就是 实例化只是执行一次,也可以理解为对象只new一次. 单例模式的代码实现 接下来就是我们的单 ...

  8. 1小时搞懂设计模式之委派模式

    1 什么是委派模式 委派模式 我们可以理解成上级分配任务到具体的员工,比如说您是一个大老板 手下有上千个员工,平常端茶递水的活肯定不是自己干.一般口渴了 就会跟下面经理说:小张啊 我口渴了给我倒点茶! ...

  9. 1小时搞懂设计模式之策略模式

    1 什么是策略模式 简单一句话理解就是通过不同的方式来完成一件事.我们拿生活举例:年终将至又到了涨工资的时候了,领导会根据你今年工作表现来将员工分为三种: 工作不积极的坏员工 对于坏员工执行不涨薪策略 ...

  10. 1小时搞懂设计模式之工厂模式(方法工厂)

    1 简单工厂缺点 以及方法工厂实现逻辑 通过我的上一篇博客 工厂模式之简单工厂 我们了解了什么是简单工厂.我们可以通过创建钢工厂类对象来获取不同类型的钢对象.但是如果我们每次新增加一种类型的钢,我们需 ...

最新文章

  1. Redis+Nginx+设计模式+Spring全家桶+Dubbo阿里P8技术精选文档
  2. xm console无法联接guest问题的解决
  3. Google Maps Android API V2使用及问题解决
  4. linux之cut命令详解
  5. Internet Explorer 8 Beta 2十大看点
  6. web自动化测试常见面试题
  7. .NET Core 以及与 .NET Framework的关系
  8. 依赖注入通俗解释_我如何向团队解释依赖注入
  9. Shell—grep、sed、awk
  10. php教程mvc,php.MVC教程
  11. oracle10gr2安装教程,Solaris10安装Oracle10gR2时的注意事项
  12. Java连接数据库实现增删改;查。
  13. 使用 Neuron 接入 Modbus TCP 及 Modbus RTU 协议设备
  14. 软件文档的作用和分类
  15. JMeter工具:场景设计,场景设置,场景运行,性能参数配置,测试监控
  16. 完美解决pytorch多线程问题:Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing
  17. 论文阅读笔记《Self-Supervised Hypergraph Convolutional Networks for Session-based Recommendation》
  18. 计算机教育学专业考研科目,计算机考研科目和专业
  19. 也谈中韩签订自由贸易协定
  20. windows 10 ltsc企业版实现C盘系统还原功能

热门文章

  1. Css选择器权重排序详解+权重计算
  2. 2015年度精品 最新力作32位和64位xp,win7,win8,win10系统下载(电脑城专用版)
  3. 图像列表控制(CImageList)
  4. 关于动作捕捉动画一些记录
  5. PLC控制系统设计的基本内容
  6. 宏基ACER E1-471G拆机心得及注意事项
  7. OpenWrt开发必备软件模块——网络管理(CWMP、SSH、QoS、SMTP、NTP、uHTTPd)
  8. 数字相控阵雷达的优势(Benefits of Digital Phased Array Radars)1
  9. 路由交换技术-实验4:VLAN创建、划分、修剪及Trunk链路
  10. ImageMagick图片转PDF