总结一下 Mac 下 Git 的一些基本操作。

本文其实是把之前给大一学生讲 Git 时备课的稿子拿过来,整理修改,二次加工后的产物。
文章风格偏向于“备忘录”,而不是“教程”。部分地方说的不够清晰还请读者见谅。
至于Git的初学者可以拉到文章最下面,到廖雪峰大神的blog去学习。

概览

首先放一个后文涉及到的命令的总结,方便快速查找。

指令 作用
ssh-keygen -t rsa -C "your-email@emial.com" 新建 SSH
ssh -T git@<git url> 检查本地和远端的 SSH 连通性
git add xx.txt 添加某一文件到缓存区
git add . 添加所有文件到缓存区
git commit -m"注释信息" 提交修改到工作区
git status 查看Git仓库状态
git diff 查看文件与之前有何不同
git reset --hard HEAD^ 返回到上一个版本
git reset --hard HEAD~10 向前回滚10个版本
git reset --hard commit ID值 回滚到某个具体的版本
git log --pretty=oneline 输出commit日志,包含作者,日期,提交说明,提交ID
git reflog 输出所有的操作信息。方便我们在清屏退出终端后查询commit ID值
git checkout -- file 撤销工作区修改(add之前)
git reset HEAD file 撤销暂存区修改(commit之前)
rm file 删除本地文件
git rm file 删除git仓库中的文件
git branch 查看分支列表,绿色为当前分支
git branch 分支名 创建分支
git checkout 分支名 切换分支
git checkout -b 分支名 切换分支,若不存在则创建它
git log --graph --pretty=oneline --abbrev-commit 输出带分支信息的log列表
git merge 目标分支名 合并分支
git branch -d 分支名 删除分支

SSH

首先是 SSH,建议通过 SSH 而不是 https 克隆项目,有一些公司甚至可能会设置只允许通过 SSH 进行克隆。

检查本地是否存在配置

SSH 本地目录为 ~/.ssh,可以在 Finder 或终端中进到该文件夹,查看是否存在 id_rsaid_rsa.pub 文件,来判断是否已经创建了 SSH 配置。如果您之前没有配置过 SSH,那么可能连这个文件夹都不存在。

新建 SSH

如果没有,那就需要新建。命令如下:

$ ssh-keygen -t rsa -C "your-email@emial.com"

输入完这条命令之后,我们连着敲三个回车,不管它显示的什么,一直敲回车。直到下面出现一个图形。

之后就可以到 ~/.ssh 文件夹下查看是否多出了 id_rsaid_rsa.pub 文件。

添加到远端 Git 平台

之后我们可以通过 cat 命令,或者直接打开 id_rsa.pub 文件,将其中的内容复制到 Git 平台的 SSH 配置中即可。

检查连通性

添加完成后,我们可以执行下面的命令检查本地和远端 Git 的 SSH 连通性。

$ ssh -T git@<git url>

敲回车后,如果你是第一次连接,会询问你yes or no,输入yes,然后输入 Git 的密码。如果一切都没问题,会返回欢迎信息。

Git 配置

配置好 SSH 之后,就可以回过头来配置 Git。

Mac 平台在安装了 Xcode 后自带 Git 服务。此时我们可以直接在终端输入下列命令进行 Git 配置:

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

新建 Git 项目与远端克隆

一般很少有只在本地使用 Git 进行版本管理的场景,基本都会和远端 Git 结合一起使用。

那么我建议的流程是:

  1. 现在远端建立空项目
  2. 将远端项目克隆到本地
  3. 在克隆的文件夹下创建项目进行开发

有的人习惯本地有项目之后,再和远端项目进行关联。这里不介绍该种方法。

如果你本地已经有代码:

  • 没有集成 Git 的情况下,在远端空项目克隆到本地后,直接将本地已有的代码移动到该空项目中即可。
  • 如果已经集成了 Git,则可以修改项目文件夹下的 .git/config 文件,将文件中的 remote 里的 url 项改为远端 url 即可。该操作也适用于更换项目的远端地址

克隆项目

克隆的命令非常简单,而且非常顾名思义。在某一目录下执行下面的指令,就可以将远程仓库里的内容全部克隆到本地该文件夹下。

$ git clone <ssh链接>

推送文件

可以使用下面的代码将本地项目 push 推送到远程仓库。

$ git push origin master

该命令实际上是把当前分支 master 推送到远程。

Git 常用操作

添加,提交文件

添加、提交文件的步骤为:

$ git add xx.txt 
$ git commit -m "注释信息"

add,添加的意思,把xx.txt添加到git仓库。
commit,提交的意思。后面的-m的内容,是一个描述性内容,用来描述我们这次提交的对文件做了哪些修改的。

  • 注意:
    1. 可以使用 git add . 将所有文件一并 add,适合对多个文件进行修改的情况。一般直接用这个就可以。
    2. 在提交时,-m 可以先输入一个左单引号,敲回车后可以输入多行注释信息。然后再输入右单引号,完成注释信息的输入。
    3. 这个 add 命令实际上是可以一口气添加多个文件,然后一口气 commit

修改文件

指令 作用
git status 查看Git仓库状态
git diff 查看文件与之前有何不同

版本回退

下面的表格是版本回退的具体指令。

指令 作用
git reset --hard HEAD^ 返回到上一个版本
git reset --hard HEAD~10 向前回滚10个版本
git reset --hard commit ID值 回滚到某个具体的版本

下面的表格可以为我们提供我们所需要的commit ID值

指令 作用
git log --pretty=oneline 输出 commit 日志,包含作者,日期,提交说明,提交ID
git reflog 输出所有的操作信息。方便我们在清屏退出终端后查询commit ID值

撤销修改

在我们 push 到远程仓库之前,我们可以用下表的指令来撤销我们对仓库内文件做出的修改。恢复到上次提交的状态。

指令 作用
git checkout -- file 撤销工作区修改(add之前)
git reset HEAD file 撤销暂存区修改(commit之前)
git reset --hard HEAD^ 回滚到上一版本(push之前)

删除文件/文件夹

指令 作用
rm file 删除本地文件
git rm file 删除git仓库中的文件
git rm 文件夹名 -r -f 删除git和本地中该文件夹及其下文件
  • 注意
    1. git rm 之前,如果我们想撤销,可以放弃工作区修改,git checkout -- file
    2. git rm 之后,如果我们想撤销,直接 git reset --hard HEAD^ 回滚到上一个版本就可以了

在这里多说一句,如果想要删除Git仓库,我们用代码 rm -rf .git 删除**.git文件夹**就可以了。

创建并切换分支

创建分支与切换分支相关的命令如下表所示:

指令 作用
git branch 查看分支列表,绿色为当前分支
git branch 分支名 创建分支
git checkout 分支名 切换分支
git checkout -b 分支名 切换分支,若不存在则创建它
git log --graph --pretty=oneline --abbrev-commit 输出带分支信息的log列表

合并分支

在我们切换回master分支后,执行下面的命令,就可以用快速合并的模式将目标分支合并到master分支上。

$ git merge <目标分支名>
  • 注意:
    1. 假如我们要将A分支,合并到 master 分支,那么我们必须先切换到master分支,然后再执行把A分支合并到 master 分支的操作。
    2. 介绍一个 git 指令 git ls-files,该指令可以查看当前 git 仓库下的文件。如果想验证新建文件是否合并成功,可以使用该指令。

删除分支

删除分支的命令如下所示。注意,这条命令可不是类似 branch rm 了。

$ git branch -d <分支名>

分支管理小结

关于分支管理的一般过程,我做了一个 GIF,如下图所示:

如图GIF演示了从创建分支到合并分支的过程,其中每一个圆饼代表着一次 commit


参考

  1. 廖雪峰大神的blog