Git 基本操作总结
总结一下 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_rsa
和 id_rsa.pub
文件,来判断是否已经创建了 SSH 配置。如果您之前没有配置过 SSH,那么可能连这个文件夹都不存在。
新建 SSH
如果没有,那就需要新建。命令如下:
$ ssh-keygen -t rsa -C "your-email@emial.com"
输入完这条命令之后,我们连着敲三个回车,不管它显示的什么,一直敲回车。直到下面出现一个图形。
之后就可以到 ~/.ssh
文件夹下查看是否多出了 id_rsa
和 id_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 结合一起使用。
那么我建议的流程是:
- 现在远端建立空项目
- 将远端项目克隆到本地
- 在克隆的文件夹下创建项目进行开发
有的人习惯本地有项目之后,再和远端项目进行关联。这里不介绍该种方法。
如果你本地已经有代码:
- 没有集成 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
的内容,是一个描述性内容,用来描述我们这次提交的对文件做了哪些修改的。
- 注意:
- 可以使用
git add .
将所有文件一并add
,适合对多个文件进行修改的情况。一般直接用这个就可以。 - 在提交时,
-m
可以先输入一个左单引号,敲回车后可以输入多行注释信息。然后再输入右单引号,完成注释信息的输入。 - 这个
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和本地中该文件夹及其下文件 |
- 注意
- 在
git rm
之前,如果我们想撤销,可以放弃工作区修改,git checkout -- file
。 - 在
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 <目标分支名>
- 注意:
- 假如我们要将A分支,合并到 master 分支,那么我们必须先切换到master分支,然后再执行把A分支合并到 master 分支的操作。
- 介绍一个
git
指令git ls-files
,该指令可以查看当前git
仓库下的文件。如果想验证新建文件是否合并成功,可以使用该指令。
删除分支
删除分支的命令如下所示。注意,这条命令可不是类似 branch rm 了。
$ git branch -d <分支名>
分支管理小结
关于分支管理的一般过程,我做了一个 GIF,如下图所示:
如图GIF演示了从创建分支到合并分支的过程,其中每一个圆饼代表着一次 commit
。