我几乎每天都使用 Git,但仍然无法记住很多命令。
通常,只需要记住下图中的 6 个命令就足以供日常使用。但是,为了确保使用地很顺滑,其实你应该记住 60 到 100 个命令。
Git 相关术语
Git 中不可避免会遇到下面几个术语,不搞清楚它们,后面只会更懵逼。
- 工作区(Working Directory)
- 暂存区(Stage/Index)
- 本地历史仓库(Repository)
- 远程仓库(Remote)
对照下图,下面一一进行介绍。
工作区
我们写代码的地方就是工作区,就是在电脑里能看到的目录,我们当前的工作空间。
暂存区
暂存区(stage)就是每次 git add 时,文件的修改存放的地方。
git commit 时就是一次性把暂存区所有修改提交到分支。
本地仓库
我们可以把暂存区的内容提交到我们的本地仓库,又名版本库(respository),可将其理解成一个目录,该目录下的所有文件都会被 git 管理起来,每个文件的修改、删除、git 都能跟踪,以便随时追踪历史,和还原。
.git
隐藏目录就是 git 的版本库,里面存了很多东西,最重要的就是 stage(index) 暂存区,还有第一个分支 master,以及指向 master 的 HEAD 指针。
远程仓库
远程仓库其实就是找一台电脑充当服务器的角色,每天 24 小时开机,其他每个人都从这个远程仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。
比如,GitHub、Gitlab 等都属于远程仓库。
下面,举一个形象化的例子来帮助大家理解上面几个概念:
比如我们在逛着某宝:
1、看到了心仪的物品,我们可以把商品添加到购物车(暂存区),我们可能会频繁的添加商品(add)或者移除商品(checkout),在这个过程中我们可以随便嗨,反正还没给钱;
2、接着我们挑的七七八八了,接着我们就要提交我们的订单了,点击提交订单(commit),接着会生成一个商品的订单列表(快照),我们还可以在提交的时候添加点备注信息,比如要什么颜色(commit -m “颜色”),好的,此时订单提交了,但是我们还没支付(Push),我们可以在自己的账户未支付订单列表(本地仓库)中找到我们的这个订单订单(快照),也可以看到自己以前的一些订单记录;
3、再接着我们选择这个还没付款的订单,进行支付(Push),付款完成后,商家(远程仓库)就会收到这个订单,然后发货…
其他一些重要概念
HEAD
HEAD 就是当前活跃分支的游标,你现在在哪儿,HEAD 就指向哪儿。
HEAD 是一个指针,总是指向当前分支。仓库版本的回退和追踪都是通过操作 HEAD 指针来完成。
不过 HEAD 并非只能指向分支的最顶端(时间节点距今最近的那个),实际上它可以指向任何一个节点,它就是 Git 内部用来追踪当前位置的东东。
标签
有了 commit id 为什么还要tag?因为 commit id 不好找,tag 是有意义的名字,它与 commit 绑在一起。
其他要点
1、每一次 git commit,都会生成一个 commit id 记录该次提交,Git 都会将它们串成一条时间线,这条时间线就是一个分支。
2、因为创建、合并、删除分支都很快,所以 git 鼓励你使用分支完成某个任务,合并后再删除分支。过程比直接在 master 分支工作更安全,且效果一样。
3、分支策略:master 分支应该是非常稳定的,仅用来发布新版本,平时不能在上面干活,干活都在 dev 分支,dev 是不稳定的,到 1.0 发布时,再将 dev 合并到 master 上,由 master 发布新版本。
Git 常用命令
1. 创建一个新的仓库
1 | 在当前目录新建一个 Git 仓库 |
2. 配置
Git 的配置文件是 .gitconfig
,可以放在用户的主目录(全局配置)下或项目目录下(项目配置)。
1 | # 显示当前的 Git 配置 |
3. 添加/删除文件
1 | 将指定文件添加到暂存区中 |
4. 代码提交相关
1 | 将暂存区中的文件提交到代码仓库 |
5. 分支相关
1 | 列出本地分支 |
6. 标签操作
1 | 列出所有标签 |
7.查看信息
1 | 显示有变动的文件 |
8. 远程同步
1 | 从远程分支下载所有变动 |
9. 撤销操作
1 | 将暂存区中的指定文件还原到工作区,保留文件变动 |
10. 其他
1 | 生成用于发布的存档 |
参考:
1、https://juejin.im/post/5adb1720f265da0b80704fb8
2、https://www.cnblogs.com/tsingke/p/7350490.html
3、https://www.tutorialdocs.com/article/git-basic-command-list.html