git基础

发布于 2021-07-27  58 次阅读


说明

git的教程用很多,文末也有两个可供学习参考的链接。本文也并不算是什么教程,而是基于自身现有知识的理解,所有会显得比较啰嗦。

是什么

首先要知道git是什么?为什么被创造处理?

是什么?

git是一个分布式的版本控制系统,诞生于2005年,由 Linux 之父 Linus Torvalds 所开发,用来管理 Linux 内核一样的超大规模项目(具体的产生原因大家可以自行 Google ,简单来说,用别人的东西,不如用自己的,而且还别人强,O(∩_∩)O哈哈~)。

  • 如何理解版本控制?
    这其实是为解决了一个常见的问题,就是在修改一个文件时,怎么保护好已经改好了的那一部分,以便在放弃修改的时候能回到它改动之前的样子。其实这个功能在日常的一些编辑软件中都很常见,那就是编辑历史,比如在文本编辑器中的 Ctrl + z 可以回退到上一步来。那这样的一个功能就能算在是一个简单的版本控制系统,你可以通过 Ctrl + z 或者 Ctrl + y 来回到你曾经编辑过的内容上。又或者,通过的拷贝来实现版本控制,如果你使用过 ps 一类的制图软件,那 图层 这个一概念也能称得上是一种版本控制,将一整幅画分为多个图层来制图,这样就不会污染到已经制作好的画面上了,能方便的涂改或删除。或者,是日常中将整个文件或文件夹复制一份出来,做留档记录这种行为也算是版本控制。
    其实日常中软件自带的简单版本控制已经能满足大部分的需求了,但是这些方式或途径都比较简陋或者操作起来不过方便,而且在协作方面就更加困难了,所以版本控制系统从 本地-集中式-分布式 一步步变的越来越完善,越来越完善了。
  • 怎么用好版本控制系统
    版本控制系统其核心自然就是版本一词,如果你在使用版本控制系统时,能够自信的回退到任何一个历史版本时,那你对版本控制的运用就算是小成了,否则它可能就只能算是一个上传下载的工具了。

一个版本控制系统应该提供那些功能?

假设你现在在选购版本控制系统,你可能会有那些需求?

  • 001 只需要若干个文件夹或文件做版本控制管理
  • 002 能选择什么时候添加一个新版本并且需要写一些说明还记录这个版本包含了什么内容
  • 003 能退回到已经记录了的版本上

带着这些需求,来寻找git中是否有相似的功能

  • 001 git仓库初始化
    git init

    进入需要进行版本控制的目录中执行该命令,可以将该目录初始化为一个git仓库。当前目录下会生成一个.git的目录,这里面将包含当前版本库的版本信息。所以如果删除该文件夹,将会丢失版本信息。而.git所在的目录也就是git版本控制系统的工作目录,它只能管理此目录及此目录的子目录中的文件。

  • 002 在记录版本之前,肯定是需要告知提交的版本中包含那些文件
    git add <fileName> 或者 .号通配

    git add 命令将指定的文件添加到git仓库中,这个命令类似 Ctrl + s 的作用。那这些被add过的文件会放在一个叫暂存区的地方,每add一次,就会将当前文件的所处状态记录在暂存区中,并会覆盖掉上一次add时的记录。

    git commit
    git commit -m "提交message"
    git commit -a -m "提交message"

    git commit 命令相当时把在暂存区里的内容打包起来,并在这个包裹上写上提交message的内容,然后将这个包裹放入版本库中。-a 参数会自动将工作区的文件全部add一次,但不会对从没被add过的文件执行该命令。

  • 003 版本回退,在多个阶段都有对象回退操作
    git commit --amend

    该命令会把暂存区文件commit,并会弹出一个提交信息的编辑框,其中已存在的信息是最后一个提交的提交信息,保存退出之后,这个commit记录最替代最后一个提交历史。此命令其实还是一个commit操作,因为它会生成一hash值,并且能在git reflog中看到提交记录。它的作用就是让提交历史更加清晰一点,能在不改变提交历史的前提下将忘记添加的文件追加到最后一次提交中。

    git checkout <fileName>

    对暂存区中的文件执行此命令,会将该文件重置到最后一次add的状态,简单来说就是就是取消掉了modified部分。这等同是覆盖操作,很难再找回modified的内容了。

常用命令

git add、commit、reset、revert、branch、checkout、merge、rebase
git pull、push、fetch

【参考】
【1】Learn Git Branching
【2】Pro Git,第二版,简体中文