Git(GitHub) Version Control System -- A Noob's Perspective

简单了解Git(GitHub)版本控制系统

  • Git和GitHub是干什么的
  • Git的基本操作
  • 作业✖版本控制

 

Git和GitHub是干什么的

首先,Git和GitHub不完全是一个东西。在我没用过Git之前,总是能听到“大佬”们在讨论GitHub云云,但从来没搞清楚过这些东西究竟是什么。

那我们先来看看官方定义:

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

//Git是一个免费的、开源的分布式版本控制系统,旨在快速高效地处理从小型到非常大的项目。

GitHub is a code hosting platform for version control and collaboration. It lets you and others work together on projects from anywhere.

//GitHub是一个用于版本控制和协作的代码托管平台。它可以让你和其他人在任何地方一起工作。

说人话,Git是辅助你在本地写代码的版本控制工具,GitHub是辅助一群人联网写代码的版本控制工具。打个不是很恰当的比方,就像魔兽争霸与网络对战平台,本地硬盘与百度网盘,Porn与PornHub一样。

版本控制系统是什么东西?

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

就好比改论文,很多人为了保存记录,会把正在修改的论文多另存为几个副本:初稿,初稿(1),终稿,终稿-副本,终稿-副本(1),终稿-副本(2),终稿-副本(3),终稿-副本(3)(1)······

过了一周,你想找回被修改的内容,但是已经记不清删除前保存在哪个文件里了,只好一个一个文件去找,真麻烦;看着一堆乱七八糟的文件,想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删,真郁闷。

引入版本控制系统后,你每一次修改的详细内容/修改时间/作者等信息都会被记录下来,不需要另存为各种副本,就可方便地恢复某个历史版本;如果有共同作者的参与,版本控制系统还允许你们在各自的家中并行工作,一起对这个项目进行编辑。

 

Git的基本操作

通过 git --help 命令可以查看Git命令用法及常用的Git命令列表:

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone             Clone a repository into a new directory
   init              Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add               Add file contents to the index
   mv                Move or rename a file, a directory, or a symlink
   restore           Restore working tree files
   rm                Remove files from the working tree and from the index
   sparse-checkout   Initialize and modify the sparse-checkout

examine the history and state (see also: git help revisions)
   bisect            Use binary search to find the commit that introduced a bug
   diff              Show changes between commits, commit and working tree, etc
   grep              Print lines matching a pattern
   log               Show commit logs
   show              Show various types of objects
   status            Show the working tree status

grow, mark and tweak your common history
   branch            List, create, or delete branches
   commit            Record changes to the repository
   merge             Join two or more development histories together
   rebase            Reapply commits on top of another base tip
   reset             Reset current HEAD to the specified state
   switch            Switch branches
   tag               Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch             Download objects and refs from another repository
   pull              Fetch from and integrate with another repository or a local branc
   push              Update remote refs along with associated objects

下面使用实例来演示Git/GitHub的基本操作

 

作业✖Git/GitHub版本控制

1. 新建本地仓库

创建ai_hw文件夹并进入,使用 git init 命令创建仓库:

此时,ai_hw这个文件夹便成为了仓库,我们可以看到文件夹中多出了一个用于管理仓库的.git的隐藏文件夹:

 

2. 写作业

2.1 我们先写一份名为"README.md"的文件,此时使用 git status 可以看到,文件当前处于"untracked"的状态:

 

2.2 使用 git add README.md 将文件添加到暂存区:

 

2.3 使用 git commit -m "add README.md" 将暂存区的文件提交至仓库,并添加提交信息"add README.md",此时README.md文件的修改信息就被保存到git系统中:

 

2.4 这时我使用上述add和commit命令对我的作业(README.md)做了多次修改并提交,如果想要返回到某个特定的版本,我可以使用 git log 查看我的提交信息:

 

假设要回到最开始的版本,我可以使用 git reset --hard HEAD^^^ 这里"^"符号的数量代表往前回退几个版本,或者 git reset --hard 507454c 或 git reset --hard 507454cbb320cc0de8fae01b8e403c181b2f09cf (图上每个commit后面跟的那一串数,commit-id是提交时根据提交信息计算的哈希值,用于唯一代表一次提交)

 

回到最初的状态并不代表之前的修改信息都被删除了,使用 git reflog 可以看到当前 HEAD 之后的提交记录,并再次使用 git reset --hard 命令”回到未来“:

 

 2.5 借助上述的各种命令,我的作业写完了。但是我并不想将我作业中的word文档(docx文件)上传,我们可以创建".gitignore"文件写入规则,不再跟踪仓库内的所有docx文件:

将这些内容提交,我的作业也大功告成了。

 

3 提交远程仓库

3.1 打开GitHub,点击右上角的+号创建仓库,输入以下三条命令将本地仓库push到远程仓库:

 

 打开仓库地址,可以看到作业内容已经成功上传:

 

3 多人协作

3.1 这个时候,小明同学说我的README写的太简单了,打算给我加点内容,于是他首先使用 git clone 命令将我的仓库下载到本地:

 

并创造了一个分支newbranch专门负责修改README文件,可以看到,当前工作区已经切换到newbranch:

 

小明在完成修改后,决定将做的改动push到远程仓库:

 

我们可以从log记录中看到,小明同学创造了newbranch分支,对README.md做了改动,又将分支并回主分支main:

 

3.2 帮我修改完README后,小明家里突然来了亲戚,然而小明的电脑没有关,熊孩子可高兴了,虽然没有文件受到影响,但是在log里弄出来了好多没有意义的commit:

如何消除这些没有用的commit呢?这里小明使用了 git rebase -i c8a972d (熊孩子修改前的commit-id),于是弹出了下面的页面:

 

小明将熊孩子的提交信息删除,输入 git rebase --continue 保存修改,再查看log,一切归与平静~

 

参考文献:

孟宁老师:五⼤场景玩转 Git,只要这一篇就够了!

posted @ 2020-10-20 22:58  HarryPotterIsDead!  阅读(114)  评论(0编辑  收藏  举报