专栏首页小浩算法教妹子用 git(一)

教妹子用 git(一)

最近和一个研一妹纸合作弄自己的网站,然后发现妹纸不太懂 git。于是就写下这篇文章。看看能不能言简意赅的教会一个新手如何使用 git。

os:本文所有命令,没有查任何资料,纯粹本人大脑记忆。换句话说,下面所有的命令,都是必须掌握(记忆)的。

01

PART

啥是 git

简单理解为 git 是用来在多人间管理内容的,因为代码也属于内容,自然也可以使用 git 管理。

git,是个软件,所以自然可以安装。官方的安装地址为:

https://git-scm.com/download/win

安装之后,就可以用了。上面介绍里说了,git 是用来管理内容的。所以咱们就可以去到我们要管理的内容目录下,执行 git init,意味着对该文件夹开始进行 git 管理。

但是,如果一个目录下,你既有想纳入 git 管理的内容,又有不想纳入 git 管理的内容,那该咋办?此时 git add 出现了,其实说白了就是想对哪些文件纳入 git 管理,就用 git add 添加。没添加的,自然就不被管理。

比如我创建出来两个文件:

眼尖的妹纸自然可以发现这里我执行了一个 git status,这玩意干嘛的?其实就是看看哪些文件再被管理。

这句话的意思就是说此时这两个文件刚创建,还没有被纳入管理中。然后我为了省事,我直接告诉妹子,你直接 git add -A 就行,换句话说,我们把这两个文件都纳入到管理中。此时如果再执行 git status,可以看到两个文件变绿色了。

也就是说,这两个新加的文件都被管理起来了。

总结一下:

  • git init,对要管理的文件夹开始管理。
  • git add [参数],对文件夹下的内容开始执行管理。
  • git add -A, 对文件夹下的全部内容执行 git 管理。
  • git status,看看要管理的文件夹下的文件都是个什么鬼。

02

PART

版本控制

妹纸很兴奋的告诉我,上面的很简单,已经学会 git 了。我说不,咱们才刚刚开始!

上面我们说了,可以通过 git add 来把要管理的文件纳入到 git 管理中。但是这仅仅只是纳入,并没有真实的管理起来。

那啥是真实的管理呢?版本控制。比如你写个文件,今天写第一版,明天写第二版,后天发现第二版写的有点问题想回到第一版。

我们通过 git commit,对已经纳入 git 管理的文件,进行版本控制。回到我们上面的那个图:

此时 1.txt 和 2.txt 已经被纳入到 git 管理中。我们通过 git commit 来进行提交。

当我们 commit 后,再自行 git status,会发现此时已经没有那个绿色的东东了。也就是说,此时刚才的两个文件,已经拥有了一个版本。

但其实,这个版本并不是跟着文件走的,而是跟着 commit 记录走的。所以,如果是工作中使用。我们尽可能的把一次相关的内容维护成一次commit记录。

然后,其实我们刚才说的通过 git add 纳入到 git 内容管理的过程,专业点叫做将内容放入暂存区;而通过 git commit 提交的过程,专业点是说把暂存区的内容放入到仓库区

自然,开发 git 的人员不是傻子。所以不管是将文件纳入到 git 管理,又或者是将已经管理的文件开始进行版本控制。我们都可以选择所有,亦或是选择多个。

总结一下:

  • git commit,提交暂存区到仓库区。说人话:再已经纳入 git 管理的内容中选择要对其进行版本控制的内容。每一次commit,意味着一次版本。
  • 因为每一次 commit 记录,都需要有一个版本说明。所以我们常使用:git commit -m "版本说明"。不用,会报错。
  • git log,查看历史 git 版本。

03

PART

第二堂课

搞错了怎么办?

搞错了,就回滚。因为回滚,本身并不是什么大不了的事情。

上面我们说了,每次 commit 都是一次版本。自然,每次 commit 记录,都会有一个版本号。比如上面那个图:

所以我们可以指定版本号回滚:

git reset --hard 版本号

但是这种我一般不常用。因为,我很讨厌去翻历史记录找版本号。大多数时候,我们都是要回滚到上一次版本。所以下面这个命令,更适合我:

git reset --hard "HEAD^"

这个^,就是上一次的意思。为了直观,我来模拟几次回滚:

我分别用两次commit,创建了 3.txt 和 4.txt。

然后看下版本记录:

现在我们回滚到上一个版本:

可以看到添加 4.txt 文件消失了:

总结一下:

  • git reset --hard "版本号",回退到指定版本。(后面的版本号并不需要双引号框起来),比如 git reset --hard 0f73fd71b54a0c84dea52dcafa64e599a8961c84
  • git reset --hard "HEAD^",回退到上一个版本。(这里要注意的是,这行命令在使用时,要记得后面的双引号,否则会报错)

04

PART

远程相关

上面的所有东东,都是一个人玩的。但是,你可以发现,add,commit,reset 等命令已经可以完美的来控制内容的版本了,这也是为什么说 git 是去中心化 CMS 的原因。其实不管是 github,还是 gitlab,这些地方只是为了找一个便于大家一起来进行版本控制的地儿。本身而言,它们并没有任何特殊。

我们要和远程协作,那我们自然得知道这个远程的地儿在哪。所以我们要把远程仓库先添加进来。我们一般使用 git remote add [名称] [地址] 来添加。我常用的两个名称是:origin 和 upstream,但其实,这名称你想叫做啥都可以。

git remote add [shortname] [url]

当我们添加了一个远程仓库之后,我们可以通过命令查看已经添加的远程仓库地址:

git remote -v

那我们如何和添加的远程仓库地址进行交互呢?这些内容我打算放在下一节和大家说!(本来想一篇文章就把 git 的东东讲完,但是发现还是不够的。所以我打算准备四篇内容。第一篇内容主要讲解 git 命令的基本使用,第二篇内容讲解 git 远程相关的使用,第三篇讲解 git 冲突的解决和常见的开发模式,包括 stash/merge,第四篇会讲解一些高端局,Git Plumbing。为大家分析一下 git 中的一些高级知识,比如底层数据结构

本文分享自微信公众号 - 小浩算法(xuesuanfa),作者:程序员小浩

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 万字长文!滑动窗口看这篇就够了!

    滑动窗口协议(Sliding Window Protocol),属于TCP协议的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止...

    程序员小浩
  • 万字长文!剑指offer全题解思路汇总

    面试题1:赋值运算符重载:该题主要考察 拷贝构造,构造析构,重载操作符。在面试者使用 c++ 等语言时进行考察。

    程序员小浩
  • 漫画:贼简单的题目,但百分之99%的人都不会

    今天是小浩算法“365刷题计划”第53天。为大家分享一道本应很简单的题目,但是却因增加了特殊条件,而大幅增加了难度。话不多说,直接看题。

    程序员小浩
  • Git常用命令清单-Java架构师能力提升必备

    · fetch 远程分支到本地某分支:git fetch origin <orginname>:<localname>

    动力节点Java学院
  • 10分钟带你入门git到github

    开局先来一个故事吧,故事看完如果不想看枯燥无味的指令,或者说你已经熟练掌握git的使用了,可以直接跳到总结部分(一个好玩的游戏)去检验下你掌握的熟练程度。

    java金融
  • Git 实用命令小抄

    如果你觉得 git 很迷惑人,那么这份小抄正是为你准备的!请注意我有意跳过了 git commit、git pull/push 之类的基本命令,这份小抄的主题是...

    KEN DO EVERTHING
  • Git使用总结

    Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

    轩辕小子
  • Github删除某个文件的所有提交记录

    Cannot rewrite branches: You have unstaged changes.

    Java那些事儿
  • 硬核!IDEA 中使用 Git 完整入门教程!

    建议: 这个是选择行结束符, windows与linux行结束符不一致; 建议选择第一个, 这样git会自动转换;

    江南一点雨
  • GIT本地已有文件夹和远程仓库对应

    Javanx

扫码关注云+社区

领取腾讯云代金券