1. Git
关于 Git 的介绍以及如何运用 Git
什么是 “版本控制” ?对于一个产品来说从雏形到成品是有一个过程的。从 0 到 1.0 在这个过程当中由产品提出需求。工程师在编写代码当中每次完成需求之后进行保存。如果产品临时起意 需求被砍,正好采用版本控制系统,我们只需要回滚到之前的版本就行了嘛,多么便利。
我们知道版本控制是怎么回事了,Git 是分布式版本控制系统
对于分布式来说相对是集中化的版本控制系统。分布式的好处在于当服务器发生故障了,我也不丝毫不慌,我只需要把本地代码仓库完整镜像用来恢复即可。
1.1 Git 有三种状态
- 已提交:已表示数据已经安全地保存在本地数据库中
- 已修改:已表示修改了文件,但还没保存到数据库中
- 已暂存:已表示标记修改文件,包含下次提交快照中
请记住三种状态,这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录
- 工作区:是你修改文件
- 暂存区:是你提交即将下次要提交快照的文件
- Git目录:提交更新,找到暂存区快照,永久存储到Git目录
1.2 开始
命令行模式
Git是有图形界面的,不过本文用的是命令行模式
如果你没有掌握命令行模式,建议先停一下啦。快速去学习一下
安装Git
2.1 Git 基础
通过本章学习 Git 涵盖你在使用使用 Git 完成各种工作时用到的基础命令。学习完后,我可以配置一个初始化仓库(repository)、开始跟踪文件、暂存或提交更改、如何远程仓库推送以及远程仓库拉取
2.1.1 获取仓库
1. 尚未进行版本控制的本地目录转换 Git 仓库
$ git init
2. 从其他服务器克隆一个已存在的 Git 仓库
$ git clone url
2.2 Git 基础 - 记录每次更新到仓库
1. 检查当前文件状态
git status
2. 跟踪新文件
git add README
3. 暂存已修改的文件
修改一个已被跟踪的文件,运行 git status 命令后会看到该文件会出现在changes not staged for commit下面。说明跟踪文件发生了变化,但还没有放到暂存区。要暂存这次更新,需要运行 git add 命令。如果运行git add 之后修改来文件提交commit提交时的版本是git add的版本。不是git add之后修改的版本
4. 忽略文件
有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。创建一个名为.gitignore的文件在该文件里写上文件名即可
5. 提交更新
git commit 务必确认还有什么已修改或新建的文件还没有git add过。否则提交的时候不会纪律这些尚未暂存的变化。所以每次提交前先用 git status 看下。然后再运行提交命令 git commit。提交时,我们需要一个标记。
git commit -m "第一次commit"
2.3 Git 基础 - 查看提交历史
在提交了更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。命令是
git log
2.4 Git 基础 - 撤销操作
在任何一个阶段,你都有可能想要撤销某些操作。
有时,我们提交完来才发现漏掉了几个文件没有添加or提交信息写错来。--amend 选项的提交命令来重新提交
git commit --amend
这个命令会将暂存区中的文件提交。如果上次提交以来你还未做任何修改,那么快照会保持不变。
1. 取消暂存的文件
如何操作暂存区和工作目录已修改的文件。
git reset HEAD file
2. 撤销对文件的修改
如果操作修改的文件回到修改前?
git checkout -- file
请务必记得 git checkout -- 是一个危险的命令。你对那个文件在本地的任何修改都会消失
2.5 Git 基础 - 远程仓库的使用
远程仓库的目的是为了根你的同伴协作这个项目
1. 查看远程仓库
如果已有配置好的远程仓库服务器,运行一下命令
git remote -v
2. 添加远程仓库
git remote add <shortname> <url>
以上命令会添加一个新的远程 Git 仓库 shortname是方便使用的简写 shortname 可以代替 url
3. 从远程仓库中抓取与拉取
git fetch <remote>
这个命令会访问远程仓库,从中拉取所有你还没有的数据。执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看
git clone 命令克隆一个仓库,命令会自动将origin作为url的简写
4. 推送到远程仓库
git push <remote> <branch>
5. 查看某个远程仓库
如果想要查看某一个远程仓库的更多信息,可以使用
git remote show <remote>
6. 远程仓库的重命名与移除
修改一个远程仓库的简写名。
git remote rename <oldname> <newname>
注意,同样也会修改你所有跟踪的分支名,那些过去引用的oldanme的现在会引用newname
删除一个远程仓库。跟这个远程仓库相关的远程跟踪分支以及配置信息也会一起被删除
git remote remove <name>>
2.6 Git 基础 - 打标签
Git 给仓库历史中某一个提交打上标签,比较有代表性的是,某个版本的提交会以(v1.0,v2.0等等)。
1. 列出标签
$ git tag
该命令在 Git 中列出已有的标签 会以字母顺序列出标签
2. 创建标签
Git 支持两种标签:轻量标签与附注标签。本小节只对附注标签。因为附注标签是存储在 Git 数据库中的一个完整对象,
最简单的方式是当你在运行tag命令时指定 -a 选项
git tag -a v1.0 -m "my version 1.0"
-m 选项指定了一条将会存储在标签中的信息。如果没有写Git会启动编辑器要求你写入信息。
通过使用 git show v1.0 可以查看标签信息和与之对应的提交信息
3. 删除标签
要删除掉本地仓库的标签,
git tag -d v1.0
该命令不会对远程仓库做任何的修改。你必须推送到远程仓库才会造成更新。
git push origin --delete <tagname> 该命令也可以删除远程标签的方式
2.7 Git 基础 - Git 别名
你不想在使用 Git 时每次都完成输入命令吧? 作为新手刚开始肯定要的。但是你以后习惯了 是不是会觉得不够高效?
如果你不想每次都完整的输入 Git 命令, 可以通过 Git config 文件来轻松地为每一个命令设置一个别名。
git config --global alias.c commit
以后暂存区提交 Git 目录时,可以同git c 代替 git commit。这样是不是方便多了? 其他的命令你都是自行设置
2.8 Git基础 - 总结
现在我们已经完成基本上Git 基础的本地操作-创建或克隆一个仓库,进行更改,暂存并提交这些更改,浏览仓库从创建到现在的所有更改历史。接下来我们会介绍Git的特性:分支模型
5.11