简单介绍git必须知道的几个基础命令

适用人群

新手开发人员,大学生

写在前面

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

我记得自己在不知道git这个工具前,为了保存自己的代码(害怕做一些改变后代码不能正常运行),往往会在重写某个功能前先把原来的代码复制一份做备份,避免代码丢失。这样做的一个结果是,我的每个项目目录下都会有好几个子目录,存放着最近的1,2,3…10次改变,为了记录每次改变,还要在每个版本的README里写上改动了那些内容,避免自己忘记。

后来知道了git,相知恨晚,感慨自己原来的做法是多么地原始。。。

阻碍使用git的几个可能

首先应该肯定git工具的实用性。只要是写代码,无论走到哪个城市进到哪家公司,git都将是必备技能。但是我们可能会因为下面的几个原因,而迟迟没有使用git,如果遇到这几种情况,建议尽量克服或避免:

  1. 习惯使用windows的图形界面,不知道有命令行这种东西,或者不知道git还能通过命令行使用。(建议了解一下Linux系统,至少了解一下git的命令行工具)
  2. 潜意识里觉得敲命令行会是一件麻烦的事情。(如果只是使用git,只需记住几个常用的命令即可)
  3. 之前从没有使用过git,不知道从何开始。(从下载安装git这个工具开始,从百度搜索git开始,从这里开始吧)

几个常用的git命令

假设我们已经安装了git工具,运行git version能够有正常的输出(比如git version 2.14.3)。

下面我们看一下几个常用的git命令,掌握这几个命令,就可以使用git进行开发了。

git init

这是初始化git的命令。运行这个命令,会在运行命令的当前目录中创建一个.git/目录,git相关的配置、版本碎片都会在这个目录中保存。

# 随便切换到一个空目录
cd /an/empty/path

# 创建一个README.md文件,并写点内容
echo "# smile" >> README.md

# 现在可以运行git init初始化git了
git init

git status

这个是查看git当前状态的命令,大体会列出:当前在哪个分支,有哪些文件改变了,添加了哪些文件,删除了那些文件,等等。

git status
# 运行上面的命令大体会输出下面的内容
On branch master
Your branch is up-to-date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	README.md

git add

这个是添加命令。我们可以从git status的输出看到git add的命令,如果运行git add README.md,就会把当前文件夹中的README.md这个文件添加到暂存区了,也就是说这个时候我们的文件已经有一个副本在.git/文件夹的某个地方了,虽然这个副本还没有被永久保存。

# 把README.md添加到暂存区
git add README.md

# 更多时候会用.来代替README.md, 这个.带指当前目录下的所有改变
# 即当我们有1.md, 2.md, 3.md 时,不能一个个add,太麻烦,只需
# 运行一下下面的命令,就都保存了
git add .

# 只add是不够的,如果我们这个时候把README.md删除了,接着又运行
# 了一遍 git add, 那么我们删除文件的这个动作也会被写入暂存区,
# REAME.md这个文件在暂存区就不存在了。。。
# 比如:(如果不知道自己做了啥,下面的命令就不要运行了)
# rm README.md
# git add . 

git commit

如果我们把README.md永久保存成一个版本,这样再删除README.md的情况下,我们依然可以从这个版本里恢复README.md。git commit命令做的就是把暂存区中的文件保存成一个版本。

# 把暂存区的README.md添加到一个版本记录
# 这样暂存区中的README.md就永久地保存到.git/目录了
# 即时我们删除了README.md并且`git add .`,也不会
# 丢失这个文件了。
git commit -m "my first commit"

git log

我们可以提交很多的版本,比如每次修改一下README.md,就按照git add .git commit -m “xth commit”,我们怎么知道提交了多少次呢?

# 查看有多少次提交了
git log

# 运行上面的命令会有下面类似的输出
# 标明了什么时间(Wed Aug 1 23:43:51 2018 +0800)
# 由谁(Jingwei <zhjw43@163.com>)提交的,提交的注释
# 是“first commit”,就是 git commit 是 -m 后面跟着
# 的内容
commit 17471fb52e6c65e60bb0397f7d2fab18675b625b (HEAD -> master, origin/master)
Author: Jingwei <zhjw43@163.com>
Date:   Wed Aug 1 23:43:51 2018 +0800

    first commit

git clone

git的仓库是可以共享的,比如我就把相关的内容共享到了GitHub - chalvern/smile: 博客中介绍基础概念会用到的仓库github上的这个仓库里。读者可以把这个仓库下载下来查看。

# 运行下面的命令会在当前目录创建一个smile目录
# 并把github仓库中的所有内容下载到smile目录
git clone https://github.com/chalvern/smile.git

git checkout

我这个仓库以后会放很多版本,到时候如果你来查看默认的分支(master分支),有可能和我当前写这个博客的时候已经变化了很大了。为了避免这种情况,我创建了一个分支git-foundation,这样你只需checkout这个分支,就能看到现在写博客的我所看到的一模一样的内容了。

# 检出git-foundation分支
git checkout git-foundation

# 此时能看到smile这个目录只有一个README.md文件

TODO

如果大家看到这里,自己已经可以用git进行自己代码的管理了。但是在一个多人合作开发的团队里,只掌握上面的内容还不够的。但是受到时间因素影响,本博文不再赘述,不过可以给大家一些线索,进行进一步的探索:

  1. 如何把代码推(push)到远端与别人共享?(提示:github的使用)
  2. 如果创建新的分支?(提示:git checkout -b xxx)
  3. 如何查看有哪些分支?(提示:git branch 及 git branch -a)
  4. 如何知道git有哪些子命令? (强烈推荐直接运行 git 试试,会有一大坨提示)
  5. 其他。

小结

本文简单介绍了git的几个命令,如果只是简单开发,了解上面的命令已经够写helloworld了。如果要求不高的项目,甚至可以进行开发了。不过如果想更好地使用git,只了解上面的这些内容还远远不够的,读者可以根据TODO小节的提示,自行阅读参考部分的内容(一点点看,不要贪多,否则很可能失去兴趣。。。)

也可以百度搜索上面讲到的每个命令,查看每个命令对应的更多的细节。

参考