Git的基本使用方法(0基础小白也能看懂)详细教程(含视频讲解)

2023-05-16

git指令介绍,下面有详解指令可以先跳过直接看下面的详解

$ mkdir learngit     //创建一个learngit文件夹

$ cd learngit         //进入learngit文件夹

$ pwd                   //用于显示当前目录

$ git init                //把这个目录变成Git可以管理的仓库

$ git add               //可反复多次使用,添加多个文件。如: $ git add readme.txt

$ git commit -m <message>    //-m后面输入的是本次提交的说明。如:  $ git commit -m "add 3 files"

$ git status            //当前git工作区的状态,可以知道你有文件被修改过

$ git diff                 //如果git status告诉你有文件被修改过,用git diff可以查看修改内容。如:  $ git diff readme.txt 

$ git log           //显示从最近到最远的提交日志

$ git log --pretty=oneline        //如果嫌git log命令输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数

$ git reset --hard HEAD^      //回退到上一个版本

$ git reset --hard HEAD^^    //回退到上上一个版本就是HEAD^^

$ git reset --hard HEAD~100    //回退到往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

$ git reset --hard 1094a        //只要上面的命令行窗口还没有被关掉,到那个append GPL的commit id是1094adb就可以指定回到之前的某个版本版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

$ git reflog         //用来记录你的每一次命令,可以获取commit id,用来恢复回退或恢复新版本

下面为详细内容介绍

1.创建版本库

创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

pwd命令用于显示当前目录。在我的Mac上,这个仓库位于/Users/michael/learngit。
如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文

第二步,通过git init命令把这个目录变成Git可以管理的仓库:

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。

视频 http://liaoxuefeng.gitee.io/git-resources/1-git-init.mp4

2.添加文件到Git仓库,分两步

一定要放到learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。

第一步,用命令git add告诉Git,把文件添加到仓库:

$ git add readme.txt

使用命令git add <file>,注意,可反复多次使用,添加多个文件;   如: $ git add readme.txt

执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。

第二步,用命令git commit告诉Git,把文件提交到仓库:
使用命令git commit -m <message>,完成。 如:  $ git commit -m "add 3 files."

$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。

视频 http://liaoxuefeng.gitee.io/git-resources/2-git-add-commit.mp4

3.时光机穿梭

我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件

现在,运行git status命令看看结果:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

虽然Git告诉我们readme.txt被修改了,但如果能看看具体修改了什么内容,自然是很好的。比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的readme.txt,所以,需要用git diff这个命令看看:

$ git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.

git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个distributed单词。

知道了对readme.txt作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步,第一步是git add

$ git add readme.txt

git status告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了:

$ git commit -m "add distributed"
[master e475afc] add distributed
 1 file changed, 1 insertion(+), 1 deletion(-)

提交后,我们再用git status命令看看仓库的当前状态:

$ git status
On branch master
nothing to commit, working tree clean

视频 http://liaoxuefeng.gitee.io/git-resources/3-git-status.mp4

Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的。

4.版本回退

在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:06:15 2018 +0800

    append GPL

commit e475afc93c209a690c39c13a46716e8fa000c366
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:03:36 2018 +0800

    add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 20:59:18 2018 +0800

    wrote a readme file

git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file

如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file

需要友情提示的是,你看到的一大串类似1094adb...的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

每提交一个新版本,实际上Git就会把它们自动串成一条时间线。如果使用可视化工具查看Git历史,就可以更清楚地看到提交历史的时间线:

现在我们启动时光穿梭机,准备把readme.txt回退到上一个版本,也就是add distributed的那个版本,怎么做呢?

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

现在,我们要把当前版本append GPL回退到上一个版本add distributed,就可以使用git reset命令:

$ git reset --hard HEAD^
HEAD is now at e475afc add distributed

--hard参数有啥意义?这个后面再讲,现在你先放心使用。

看看readme.txt的内容是不是版本add distributed

$ cat readme.txt
Git is a distributed version control system.
Git is free software.

果然被还原了。

还可以继续回退到上一个版本wrote a readme file,不过且慢,然我们用git log再看看现在版本库的状态:

$ git log
commit e475afc93c209a690c39c13a46716e8fa000c366 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 21:03:36 2018 +0800

    add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Fri May 18 20:59:18 2018 +0800

    wrote a readme file

最新的那个版本append GPL已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?

办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPLcommit id1094adb...,于是就可以指定回到未来的某个版本:

$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL

版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

再小心翼翼地看看readme.txt的内容:

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL

然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。

现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:

$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file

视频 http://liaoxuefeng.gitee.io/git-resources/4-git-reset.mp4

终于舒了口气,从输出可知,append GPL的commit id是1094adb,现在,你又可以乘坐时光机回到未来了。

小结:

初始化一个Git仓库,使用git init命令。

添加文件到Git仓库,分两步:

  1. 使用命令git add <file>,注意,可反复多次使用,添加多个文件;
  2. 使用命令git commit -m <message>,完成。
  • 要随时掌握工作区的状态,使用git status命令。

  • 如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

 

基本功能满足日常需要,想了解更加进阶的内容看我博客git里的 进阶内容

下一篇:Git进阶1:工作区暂存区,管理修改,撤销,删除(含视频讲解)

更新中。。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git的基本使用方法(0基础小白也能看懂)详细教程(含视频讲解) 的相关文章

  • Spring Boot 接口统一前缀

    需求 需求如题 xff0c 想给一个 spring boot 项目的所有请求路径添加统一前缀 xff0c 可以通过 context path 来配置 但是在同时存在静态资源和 Controller 接口的项目中 xff0c 如果希望静态资源
  • 一文读懂pid控制器

    文章目录 PID控制器1 控制器1 1 电机速度控制系统1 2 温度或水位控制系统1 3 小小总结 2 PID3 模拟式PID4 数字式PID4 1 位置式PID算法4 1 2 位置式pid算法的缺点 4 2 增量式PID算法4 2 2 增
  • Gazebo创建围墙并生成.world文件

    Gazebo创建围墙并生成 world仿真环境文件 文件说明 world文件是gazebo中搭建的仿真环境保存后的文件格式 xff0c 其中包含了若干个模型文件 world文件如图所示 xff1a 其中相关参数是gazebo基于我们在gaz
  • Ubuntu18.04分区方案

    由于Ubluntu18 04安装和16 04基本一样 xff0c 因此就没什么好说的 xff0c 主要记录一下分区方案 硬盘总容量 xff1a 500G 分区方案 xff1a EFI分区 逻辑分区 xff0c 空间起始位置 xff0c 10
  • Ubuntu18.04搭建AirSim+ROS仿真环境

    AIRSIM在UBuntu 18 04上构建的官网文档 一 安装UE4引擎 AIRSIM是依赖于UE4引擎实现的 因此在安装AIRSIM之前要安装UE4引擎 1 获取UE4的github许可 在Ubuntu上安装UE4引擎需要从源文件进行编
  • OpenCV-Python学习笔记(使用opencv识别物体的位置,找到中心点位)

    使用opencv识别物体的位置 xff0c 找到中心点位 xff1a 步骤 xff1a 先拿到图像 gt 进行高斯滤波 gt 进行灰度处理 gt 进行二值化 gt 进行开运算 gt 轮廓提取 gt 计算中心点位 效果图如下 xff1a 代码
  • ROS下使用realsense-d435i跑通 rgbdslam_v2运行踩坑完成

    准备工作 rbgdslam v2 按照github 实验环境Ubuntu 16 04 ROS kinetic 如果你电脑安装PCL版本是1 7 xff0c 那么请直接跳到错误1 xff0c 如果你也不知道有没有 xff0c 或者版本多少 x
  • ROS学习 catkin CMakeList.txt详细介绍

    ROS中catkin CMakeLists txt的内容 CMakeList txt文件是CMake编译系统编译软件包过程的输入文件 任何CMake兼容包都包含一个或多个CMakeLists txt文件 xff0c 这些文件描述了如何编译代
  • ROS Catkin 教程之 CMakeLists.txt

    1 概览 CMakeLists txt 是用 CMake 构建系统构建 ROS 程序包的输入文件 任何兼容 CMake 的包都包含一个或多个 CMakeLists txt 文件 xff0c 用以描述怎样构建和安装代码 catkin 项目采用
  • ROS在roslaunch时,提示“is neither a launch file in package”或TAB时没有补全

    描述 已经设置了source devel setup bash xff0c 在同一终端用roslaunch可以 xff0c 但我在这个终端起的是roscore xff0c 新终端再用roslaunch就不行了 分析 报错是因为没找到对应的p
  • ros绑定串口

    本文主要介绍ros绑定串口设备的一种方法 1 检查有多少个设备 span class token function ls span dev ttyUSB 2 查看对应串口 查看KERNELS后面的设备的硬件端口号 udevadm info
  • Spring Boot 配置文件配置自动提示 Configuration Processor

    效果 在使用Idea等开发工具时 xff0c 配置文件中输入前缀就有对应的补全提示 xff0c 使开发者可以很方便配置相应属性 xff0c 效果截图如下 xff1a 元数据说明 这些提示来自于 spring 自动配置规范中的源数据文件 sp
  • ubuntu20.4安装python3.8

    ubuntu20 4中安装python3 8 注 ubuntu20 4自带python3 10 软连接python3与pip3指向的为python3 10本文意在安装python3 8 并将软连接python与pip指向python3 8
  • C/C++多线程、线程同步(互斥锁与信号量)

    参考链接2 中写的非常好 xff0c 简单易懂 xff0c 上手快 xff0c 非常好的博文 使用多线程及互斥锁样例 xff1a include lt iostream gt include lt windows h gt using na
  • Python ❀ 初学者学习笔记与知识点梳理

    软件安装与环境部署变量与数据类型列表与元组条件判断语句字典while循环函数类文件与异常 推荐代码练习地址 xff1a https www runoob com python python 100 examples html 点击此处直接跳
  • Shell ❀ Linux系统自动挂载本地yum源并安装rpm依赖包

    文章目录 1 脚本代码详解2 代码执行结果3 脚本参数调整 1 脚本代码详解 span class token comment bin bash span span class token builtin class name echo s
  • Windows ❀ Windows系统下端口连通性常见的验证方法

    文章目录 1 telnet1 1 telnet服务开启方法1 2 端口连通性验证 2 tcping2 1 tcping下载与安装2 2 端口连通性验证 3 netstat ano findstr3 1 findstr使用语法3 2 端口连通
  • Security ❀ 安全设备学习规范(第二版)

    文章目录 安全设备学习规范1 设备部署环境1 1 部署方式1 2 配置IP地址与路由1 3 设备冗余机制1 4 会话同步机制1 5 设备账户管理1 6 设备故障诊断 2 产品授权方式2 1 序列号2 2 Hash值 3 相关设备联动3 1
  • Windows ❀ 解决Google浏览器无法访问网页问题

    文章目录 问题 xff1a Google浏览器无法访问网页解决方法 问题 xff1a Google浏览器无法访问网页 使用Google浏览器打开某个已知安全网页时 xff0c 弹出如下信息 xff0c 错误内容如下 xff1a NET ER
  • Security ❀ CSP Bypass 内容安全策略绕过

    文章目录 内容安全策略绕过 CSP Bypass1 Low Level2 Medium Level3 High Level4 Impossible Level 内容安全策略绕过 CSP Bypass CSP 内容安全策略 xff1a 为了缓

随机推荐

  • Security ❀ JavaScript Attacks 前端攻击

    文章目录 JavaScript Attacks 前端攻击1 Low Level2 Medium Level3 High Level4 Impossible Level JavaScript Attacks 前端攻击 JavaScript是一
  • MiddleWare ❀ Zookeeper基础概述

    文章目录 1 认识Zookeeper1 1 数据类型1 2 监听器1 3 基本功能1 3 1 统一配置管理1 3 2 统一命名服务1 3 3 分布式锁1 3 4 集群状态 2 下载安装包3 安装服务3 1 服务端命令3 2 客户端命令 3
  • Java文件内容变更及内容追加监听方案

    简介 对于文件内容变动的监听处理 xff0c 一般分为两种主要应用场景 1 只关心文件内容是否发生变更 文件的内容发生变动的场景是全量修改模式 xff0c 不是内容追加模式 例如某xml文件内容发生变动 这种情况 xff0c 我们一般只需要
  • MiddleWare ❀ MySQL基础概述

    文章目录 MySQL基础1 SQL语法与分类1 1 DDL 数据定义语言1 1 1 库操作1 1 1 1 查询1 1 1 2 创建1 1 1 3 删除1 1 1 4 使用 1 1 2 表 43 字段操作1 1 2 1 查询1 1 2 2 创
  • Shell ❀ 基础知识概述

    文章目录 一 基本概念1 脚本文件命名方式2 解释器分类3 基本基本组成内容4 脚本编写规范与格式说明5 自动生成脚本的注释与配置信息 一 基本概念 shell又称为命令解释器 xff0c 它能识别用户输入的各种命令 xff0c 并传递给操
  • Shell ❀ 基础变量类别与引用

    文章目录 二 变量与引用1 变量命名2 变量类型3 变量定义4 常用变量4 1 内置通配符4 2 内置变量4 3 自定义变量4 4 环境变量4 5 变量的作用域4 5 1 全局变量4 5 2 局部变量 4 6 位置变量4 5 1 位置变量的
  • Shell ❀ 条件测试语句

    文章目录 三 条件测试1 基本语法2 表达式2 1 条件判断表达式2 2 字符串判断表达式2 3 数字判断表达式2 4 文件判断表达式2 5 表达式中 与 的区别2 5 1 的逻辑判断表达式2 5 2 的逻辑判断表达式 三 条件测试 1 基
  • Shell ❀ 条件判断语句

    文章目录 四 条件判断1 if 单分支格式1 1 语法格式1 2 操作案例 2 if else 双分支格式2 1 语法格式2 2 操作案例 3 if elif else 多分支结构3 1 语法格式3 2 操作案例 4 和 复合指令4 1 相
  • Shell ❀ 循环语句

    文章目录 五 循环语句1 for 循环1 1 带列表的for循环1 2 不带列表的for循环1 3 类C风格的for循环 2 while 循环2 1 循环体读取文件的三种方法2 2 循环类型 3 嵌套循环案例 五 循环语句 1 for 循环
  • Shell ❀ 函数与数组

    文章目录 六 函数与数组1 函数1 1 函数定义1 2 函数的优势1 3 函数语法1 4 函数调用1 5 操作案例1 6 函数库文件1 7 递归函数 2 数组2 1 数组定义2 2 定义股关联数组2 3 数组的赋值2 4 数组操作2 5 数
  • Shell ❀ 正则表达式

    文章目录 七 正则表达式1 普通字符2 非打印字符3 特殊字符4 限定字符5 常用的正则表达式5 1 校验数字的表达式5 2 校验字符的表达式5 3 特殊需求表达式 七 正则表达式 正则表达式 Regular Expression xff1
  • Shell ❀ 三剑客 - Grep + Sed + Awk

    文章目录 八 三剑客 Grep 43 Sed 43 Awk1 Grep 过滤1 1 常用grep参数1 2 使用方法 2 Sed 行匹配2 1 执行原理2 2 常见语法2 3 使用方法2 3 1 地址边界的设定2 3 2 基础编辑命令2 3
  • Shell ❀ 学习笔记与知识点梳理

    基础知识概述基础变量类别与引用条件测试语句条件判断语句循环语句函数与数组正则表达式三剑客 Grep 43 Sed 43 Awk
  • 使用 Schema xsd 文件校验 xml 文件格式

    本文是实例代码工具类 xff1a span class token keyword import span span class token namespace org span class token punctuation span x
  • Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍

    nbsp Linux 查看磁盘分区 文件系统 使用情况的命令和相关工具介绍 提要 Linux 磁盘分区表 文件系统的查看 统计的工具很多 有些工具是多功
  • MiddleWare ❀ Elasticsearch请求详解

    文章目录 Elasticsearch请求详解 Elasticsearch请求详解 span class token comment 创建索引 重复创建报错 span span class token function curl span s
  • 树莓派自带VNC黑屏(灰屏)个人解决办法

    最近购买了树莓派 xff14 xff22 看来许多教程 xff0c 但VNC第一次还正常显示 xff0c 后来就黑屏 xff0c 还有什么现在不能显示桌面什么的 xff0c 下面给大家说下vnc黑屏我的解决办法 xff0c 我发现是vncv
  • Openmv色块追踪

    Openmv 拿到后第一次进行开发 xff08 颜色追踪 xff09 Openmv本身是具有很多的内置函数的 xff0c 基本都是别人给我们写好了 xff0c 需要我们自己去调用 xff0c 并给函数传递参数以实现我们需要的效果 但是很多初
  • XTDrone中roslaunch px4 indoor1.launch

    logging to home luyu ros log f8336262 666f 11ec ad21 4287fcc6d992 roslaunch luyu Lenovo 32405 log Checking log directory
  • Git的基本使用方法(0基础小白也能看懂)详细教程(含视频讲解)

    git指令介绍 xff0c 下面有详解指令可以先跳过直接看下面的详解 mkdir learngit 创建一个learngit文件夹 cd learngit 进入learngit文件夹 pwd 用于显示当前目录 git init 把这个目录变