前言

Git这个东西我曾经有学过,但学的内容太多了,有点懵,不太理解,磕磕碰碰的,走了不少弯路。不过最近我在B站上发现了一个讲的很好的教程:《表严肃讲Git》。因此,我决定用文字的方式分享给大家。

安装软件是我们的必备技能,所以在这里我就不写这个了。若真的不会安装的,网上有很多教程,自己去看。

Git下载好后,有两个命令是必须输的:

git config --global user.name "yourname"
git config --global user.email "email@example.com"

注:本笔记(教程)是根据对视频的理解然后自己书写的,讲师举的例子非常形象,因此我把一些例子和原话照搬了。

1.创建项目

  • 什么是仓库?

    Git中有一个概念,叫:仓库。仓库、仓库,其实就相当于“项目”

    仓库就是储存你代码的地方。既然要储存代码,那肯定要有个目录了。但不仅仅就是创建一个目录,我们要把它变成一个 Git仓库

    这里,我们要使用一个命令,叫:git init。我们cd到某一个目录里,输入git init命令;那么,这个目录就被 初始化 了。初始化后,你可能会发现里面没有什么变化, 还是原来的一样,只是一个空的目录。其实里面有一个隐藏的目录,叫:.git。它是Git自己使用的目录,一般最好不要去碰它,除非你想跑路。

    除了你在目录里使用git init创建仓库,还可直接输入git init 目录名创建仓库。

2.基本用法

  • 看看状态

    假设我们我们创建了一个叫test的仓库,里面是没有什么东西的。那么,如果我想知道它的状态,这时就可以输入git status来查看它的状态。输入后的结果是这样的:

    On branch master
    
    No commits yet
    
    nothing to commit (create/copy files and use "git add" to track)

    这上面说,现在还没有一个是提交的。这里面有一个词:commit,意思是提交,是个历史节点。你可以把它看做是后悔药。

  • 写点东西

    仓库里肯定要有内容啊!那么,我们放点东西。往里面新建一个test.txt文件,这时候输入git status,显示出来的是这样:

    On branch master
    
    No commits yet
    
    Untracked files:
    (use "git add <file>..." to include in what will be committed)
    test.txt nothing added to commit but untracked files present (use "git add" to track)

    “Untracked files”意思是 “未跟踪的文件” ,说明里面有了新的文件或者文件被修改,但没有提交,或者说没有造后悔药。这个文件没了就可能找不到了。那怎么办?这时候,我们输入git add .,意思是将所有文件添加到暂存区,这个“点”就是指所有文件。那么什么是暂存区呢?我们先别管它。然后我们在看下状态,这时它显示:

    On branch master
    
    No commits yet
    
    Changes to be committed:
    (use "git rm --cached <file>..." to unstage)
    new file: test.txt

    到这一步还没完。然后,我们再输入git commit -m "初始化",显示出来是这样的:

    [master (root-commit) d2a41f2] 初始化
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 test.txt

    那么这颗后悔药就造好了。这里可能就有人要问了,-m "初始化"是什么呢?其实,它是给这颗后悔药弄个说明的,这个“初始化”就是说明的内容。然后,我们看看仓库的状态,它显示:

    On branch master
    nothing to commit, working tree clean

    这上面说你的所有更改已经保存了,没有什么不保存的了!OK,万事大吉了,那你就不可能再丢失什么文件了。

    假设你更改了或者新建了什么文件,那么你就输入git add .,然后再输入git commit -m "一个说明",这就造出了一颗后悔药。如果你想知道到底造了什么后悔药,那么就可以输入git log,这时它显示:

    commit d2a41f299e425e50f164d7db72c8a6a59783bbea (HEAD -> master)
    Author: yourname <email@example.com>
    Date: Sat Feb 22 21:05:30 2020 +0800 初始化

    这上面那个“初始化”你可以理解为这颗后悔药的名字,其实就是我们给它的说明。那“commit”后面那一串长的东西是什么呢?,你可以理解为这颗后悔药的身份证号。

  • 吃后悔药

    这里,我们重复上面的操作,造两颗后悔药,然后我们用git log看一下有哪些后悔药,它显示:

    commit 7a732beb1cf694add6a1c837b4d340c9b347a489 (HEAD -> master)
    Author: Pygriaaf <pygriaaf@163.com>
    Date: Sat Feb 22 21:59:04 2020 +0800 第二次修改 commit 9526058a3b103a481f3424101ca1b2a4b6e0bd2f
    Author: Pygriaaf <pygriaaf@163.com>
    Date: Sat Feb 22 21:57:12 2020 +0800 第一次修改 commit d2a41f299e425e50f164d7db72c8a6a59783bbea
    Author: Pygriaaf <pygriaaf@163.com>
    Date: Sat Feb 22 21:05:30 2020 +0800 初始化

    如果要看修改了什么,我们可以用git log -p,在这里就不详细讲述了。

    假设我们发现第二次修改的内容很差劲,想退回,怎么办?我们就可以输入git checkout xxx,这个命令意思是切换到任意历史节点,“xxx”就是指的是任意历史节点。

    在这里的“xxx”我们就输入后悔药的身份证号,输入后会显示一些内容,我们不管它,然后打开文件,就会发现文件的内容退回了,那么这颗后悔药就吃成功了。

3.分支branch

  • 什么是分支?

    那么分支可以理解为,在一本小说里可能同时有不同的故事线,比如主线或者其他的故事线。它们也可能会随时合并。
  • 创建分支

    假设我们要在“第一次修改”处创建分支,可以输入git branch 分支名,这里的分支名就设为“secondbranch”。如果输入后什么也没显示,那说明创建成功了。

    然后我们就可以切换到“secondbranch”,这时我们输入git checkout secondbranch,然后它会显示你成功切换到“secondbranch”分支。

    在这个分支上我们也是可以写一些内容的,做些修改,然后提交一下,这时我们再用git log看一下,它显示:
    commit 7a4896664a5067ad158c1c872c76ecaf441fa42d (HEAD -> secondbranch)
    Author: Pygriaaf <pygriaaf@163.com>
    Date: Sun Feb 23 10:17:06 2020 +0800 第二个分支上的修改 commit 9526058a3b103a481f3424101ca1b2a4b6e0bd2f
    Author: Pygriaaf <pygriaaf@163.com>
    Date: Sat Feb 22 21:57:12 2020 +0800 第一次修改 commit d2a41f299e425e50f164d7db72c8a6a59783bbea
    Author: Pygriaaf <pygriaaf@163.com>
    Date: Sat Feb 22 21:05:30 2020 +0800 初始化

    可以看到,现在所做的修改是在“secondbranch”分支上了

  • 合并分支

    假设我们发现“secondbranch”分支上的内容要比主分支上的好,那么就可以将分支 合并

    首先,我们切换到“master”上,输入git checkout master,然后输入git merge secondbranchmerge 就是合并分支的命令。它显示:
    Auto-merging test.txt
    CONFLICT (content): Merge conflict in test.txt
    Automatic merge failed; fix conflicts and then commit the result.

    这上面说什么?它说自动合并时发生了冲突,这时我们就要手动合并了,我们用编辑器打开文件,它显示:

    第一次修改
    <<<<<<< HEAD
    第二次修改
    =======
    secondbranch中第二次修改
    >>>>>>> secondbranch

    这里<<<>>>之间就是冲突的地方,===是分隔线。我们要保留“secondbranch”分支的内容,那么我们就把不需要的内容去掉就行了,如:

    第一次修改
    secondbranch中第二次修改

    然后我们就用“add”和“commit”提交,最后就合并成功了。

4.其他东西

  • 标签Tag

    标签是什么呢?假如你在写一本小说,写呀写,最后整本书写完了,那么这时候就可以打一个标签,叫第一版。就是在一个重要的的历史节点上,你要做一个标记,那么这个标记就是标签。

    那怎么打标签呢?,这时我们可以用git tag -a 标签名 -m "备注"。在程序开发中,标签名通常是版本号。
  • 三种状态

    这三种状态分别是:modifiedstagedcommitted,意思是:已修改已暂存已提交

    已修改,顾名思义,就是你修改了文件。那么已暂存是什么意思呢?你可以理解为缓冲。即使你不小心add一个错误的文件,这文件也不会在历史当中。如果add的是正确的,那么就可以提交到历史当中,这就是已提交。

后记

文章就写到这里,其实还有别的内容没写,在这里我就不一一列举了。文章是我的理解写出来的,所以可能会有些错误,也许我审阅的时候没有发现。如果你们发现了错误,请在评论区留言,或者联系我邮箱:pygriaaf@163.com。

【笔记】Git简明教程的更多相关文章

  1. Git简明教程一、基本概念

    文本是写给新手的Git入门教程.本文的目的是让新手能够快速了解并开始使用Git,因此只会介绍最基本.同时也是最核心的知识.其中包括使用Git的基本步骤和Git中最常用的命令,以及如何使用GitHub托 ...

  2. ZH奶酪:Git简明教程

    这里是原网站:https://try.github.io/levels/1/challenges/1 这篇博文就当是笔记+翻译吧. 几个名词相关 changes:变更 repository:仓库 st ...

  3. Git简明教程二、开始进行版本管理

    上一篇介绍了Git中的一些基本概念.本篇来实际看一看如何通过几个常用命令来快速上手Git,完成版本管理的日常操作(核心操作). 0. 准备工作 安装Git后,请先在你的电脑上新建或选择一个目录作为测试 ...

  4. Git 简明教程

    其他Git资料: Git Community Book 中文版

  5. Git简明教程

    http://www.jianshu.com/p/16ad0722e4cc http://www.jianshu.com/p/f7ec8310ccd2

  6. 学习笔记《简明python教程》

    学习笔记<简明python教程> 体会:言简意赅,很适合新手入门 2018年3月14日21:45:59 1.global 语句 在不使用 global 语句的情况下,不可能为一个定义于函数 ...

  7. Node.js学习笔记(3):NPM简明教程

    Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...

  8. Node.js学习笔记(4):Yarn简明教程

    Node.js学习笔记(4):Yarn简明教程. 引入Yarn NPM是常用的包管理工具,现在我们引入是新一代的包管理工具Yarn.其具有快速.安全.可靠的特点. 安装方式 使用npm工具安装yarn ...

  9. iOS: 学习笔记, Swift与Objective-C混用简明教程(转载)

    Swift与Objective-C混用简明教程 转载自:https://github.com/lifedim/SwiftCasts/tree/master/000_mix_swift_objc 我想很 ...

随机推荐

  1. Apache Hudi使用问题汇总(一)

    1.如何写入Hudi数据集 通常,你会从源获取部分更新/插入,然后对Hudi数据集执行写入操作.如果从其他标准来源(如Kafka或tailf DFS)中提取数据,那么DeltaStreamer将会非常 ...

  2. Python中函数参数 *args 和 **kwargs

    普通参数,即在调用函数时必须按照准确的顺序来进行参数传递. 默认参数,即参数含有默认值,在调用函数时可以进行参数传递,若没有进行参数传递则使用默认值,要注意,默认参数必须在普通参数的右侧(否则解释器无 ...

  3. mysql复习2

    -- 1. 创建和管理表 CREATE TABLE -- 方式一:CREATE TABLE emp1( id INT(10), `name` VARCHAR(20), salary DOUBLE(10 ...

  4. java byte/short/char补充(了解)

    1.在数学运算中会自动提升数据类型为 int 2.在基本赋值中,若右册的常量不超过取值范围,javac 添加 强制转换,否则报错 3.若右册 含有 变量 而不是直接使用常量相加,编译报错 例子 pub ...

  5. 清晰架构(Clean Architecture)的Go微服务: 事物管理

    为了支持业务层中的事务,我试图在Go中查找类似Spring的声明式事务管理,但是没找到,所以我决定自己写一个. 事务很容易在Go中实现,但很难做到正确地实现. 需求: 将业务逻辑与事务代码分开. 在编 ...

  6. SSM前后端分离/不分离对比Demo

    之前某些原因,整理了一个小的Demo,用于演示.个人认为在SSM前后端不分离的基础上在前端处理上比较麻烦一点之后就是注解的使用.总结一些对比,仅是自己掌握的,不够严谨,不足之处请大佬批评指正. 路由控 ...

  7. [CF1037F]Maximum Reduction

    题意 https://codeforces.com/contest/1037/problem/F 思考 摘自一种比较有趣的做法.我们对序列进行分治,每次统计跨过mid的区间的贡献.其正确性是保证的:每 ...

  8. 一个注解搞懂 Sentinel,@SentinelResource 总结

    在前面的博客中,我给大家演示了使用 @SentinelResource 定义资源完成限流的例子, 下面就从源码解析开始,看下SentinelResource是如何实现限流的,以及@SentinelRe ...

  9. 【阿里云IoT+YF3300】12.阿里云IoT Studio入门介绍

    阿里云IoT Studio是针对物联网场景提供的生产力工具,可覆盖各个物联网行业核心应用场景,帮助您高效经济地完成设备.服务及应用开发.物联网开发服务提供了移动可视化开发.Web可视化开发.服务开发与 ...

  10. 使用 web3D 技术的风力发电场展示

    前言    风能是一种开发中的洁净能源,它取之不尽.用之不竭.当然,建风力发电场首先应考虑气象条件和社会自然条件.近年来,我国海上和陆上风电发展迅猛.海水.陆地为我们的风力发电提供了很好地质保障.正是 ...