Git

Git,这个世界上目前最先进的分布式版本控制系统(没有之一)。

它的出现,可以让你结束手动管理多个“版本”的史前时代,进入到版本控制的 20 世纪。


[ Git 工作流 ] Git 和其他版本控制系统,如 SVN 的一个不同之处就是有暂存区的概念。

  • 工作区( Workspace),是电脑中实际的目录。
  • 暂存区( Index ),类似于缓存区域,临时保存你的改动。
  • 仓库区( Repository ),分为本地仓库和远程仓库。

[ Git 常用命令 ]  通常提交代码分为几步:

  1. git add:从工作区提交到暂存区
  2. git commit:从暂存区提交到本地仓库
  3. git pushgit svn dcommit:从本地仓库提交到远程仓库。                 < Gitlab >

一般来说,记住以下命令,便可进行日常工作了:



安装 Git

可以直接从 Git 官网上下载安装程序?!,进行安装。安装完成后:

// Mac 系统在命令行中输入 git --version 可以测试是否安装成功
// windows 系统上进入项目根目录,点击右键,安装成功的话,可以看到“Git Bash”

[ 配置 - 自报家门 ] 安装完成后,还需要最后一步设置,在命令行中输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

创建版本库(本地仓库)

什么是版本库呢?版本库,又名仓库(repository),可以简单理解成一个目录。这个目录里的所有文件都可以被 Git 管理起来,每个文件的修改、删除,Git 都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻进行“还原”。

第一步:在合适的地方,创建一个空目录(即,项目根目录)

cd Webpiece
pwd  // 显示当前路径,/Users/admin/webpiece
mkdir proj   // 在 Webpiece 文件夹下创建 proj 项目目录
cd proj
pwd   // /Users/admin/webpiece/proj

第二步:初始化一个 Git 仓库 ( 生成 .git 隐藏目录 )

$ git init

然后,就可以写代码了 ...


第三步:文件备份                            // 把文件存储到版本库,需要 2 步:

  • 把文件添加到仓库(可批量添加)
$ git add readme.txt             // git add <file>
  // 执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。
  // 可以批量添加
$ git add ./    // 除了多次 add 之外,可以使用该命令把当前目录中的所有文件添加到仓库
  • 把文件提交到仓库
$ git commit -m "write a readme file"    // git commit -m <message>

// 解析:-m 后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
   [master (root-commit) eaadf4e] wrote a readme file
    1 file changed, 2 insertions(+)
    create mode 100644 readme.txt

Then,一次次的进行编写代码的工作,一次次的备份 ... 以下命令对于了解当前状态有所帮助:

git status   // 该命令可以让我们时刻掌握仓库当前的状态

git diff   // 查看difference,显示的格式正是Unix通用的diff格式

版本回退

[ 查看提交日志 ] 下面一大串类似1094adb...的是commit id(版本号),和 SVN 不一样,Git 的版本号不是 1,2,3… 递增的数字,而是一个 SHA1 计算出来的一个十六进制数字(分布式版本控制,防止冲突)。

git log  // 该命令可以显示从最近到最远的提交日志

// 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline 参数
   $ git log --pretty=oneline
   1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
   e475afc93c209a690c39c13a46716e8fa000c366 add distributed
   eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file

[ 返回操作 ] 每提交一个新版本,实际上 Git 就会把它们自动串成一条时间线。

// 返回上一个版本
   $ git reset --hard HEAD^       // 查看实际内容,已经被还原了
     // 上一个版本 HEAD^  上上一个版本 HEAD^^   上100个版本 HEAD-100

// 返回某一个版本
   $ git reset --hard e475afc93c20         // 复制版本号的一部分即可

现在,回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?


[ 历史操作 ] 找不到新版本的commit id怎么办?在 Git 中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的 commit id。

Git 提供了一个命令git reflog用来记录你的每一次命令:

$ git reflog
   e475afc HEAD@{1}: reset: moving to HEAD^
   1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
   e475afc HEAD@{3}: commit: add distributed
   eaadf4e HEAD@{4}: commit (initial): wrote a readme file