Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是Linus Torvalds为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。(Git官方网址是:https://git-scm.com/)
特点
分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
下图是经典的git开发过程。

优点:
-
适合分布式开发,强调个体。
-
公共服务器压力和数据量都不会太大。
-
速度快、灵活。
-
任意两个开发者之间可以很容易的解决冲突。
-
离线工作。
缺点:
-
资料少(起码中文资料很少)。
-
学习周期相对而言比较长。
-
不符合常规思维。
-
代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
与SVN比较
| 内容 | GIT | SVN |
|---|---|---|
![]() |
![]() |
|
| 架构 | 分布式 | 集中式 |
| 日志 | 离线(可在本地做版本管理) | 在线 |
| 效率 | 快 | 慢 |
| 难度 | 复杂 | 简单 |
常用指令
| 命令 | 作用 | 备注 |
|---|---|---|
| git init | 创建一个版本库 | |
| git clone |
将存储库克隆到新目录中 | SSH需配合秘钥使用 |
| git branch | 查看本地分支 | *代表当前分支 git branch -r:查看远程分支 git branch -a:查看本地和远程分支 |
| git branch |
创建一个分支 | |
| git checkout |
切换分支/恢复工作树文件 | 如有本地无分支则创建本地分支(git checkout -b 若有冲突则需手动处理 |
| git status | 显示工作目录和暂存区的状态 | |
| git diff <file/id/branch> | 显示提交和工作树等之间的更改 | 比较工作目录中当前文件和暂存区域快照之间的差异(修改之后还没有暂存起来的变化内容) |
| git log | 显示提交日志信息 | |
| git add |
将文件内容添加到索引(将修改添加到暂存区) | 支持多文件(git add |
| git rm <file/path> | 将文件/目录从git的仓库管理系统中移除 | –cached保留文件,-f 同时删除文件 |
| git commit -m “” | 提交记录 | git commit:记录到目前为止已经进行了什么更改(冲突解决完成后) git commit –amend:增补提交(–no-edit:不修改记录message) |
| git reset | 将当前HEAD复位到指定状态 | git reset HEAD git reset --soft HEAD^:撤销commit git reset --(mixed) HEAD^:撤销commit及add git reset --hard [ |
| git push | 将本地分支的更新,推送到远程主机 | git push origin git push [--force/-f]:强制推送(non-fast-forward merge) git push --tags:推送标签(git push不会推送标签) |
| git fetch | 从另一个存储库下载对象和引用(更新所有分支) | git fetch origin |
![]() |
||
| git merge | 将两个或两个以上的开发历史加入(合并)一起至当前分支(记录实际发生过什么) | ![]() merge结果能够体现出时间线 用revert撤销merge git –no-ff:不使用fast-forward方式合并,保留分支的commit历史 git –squash:使用squash方式合并,把多次分支commit历史压缩为一次 |
| git rebase | 把一个分支的修改合并到当前分支(项目过程中发生的事) | ![]() rebase会打乱时间线 不要对在你的仓库外有副本的分支执行变基 用rebase -i重新编辑 |
| git pull | 从另一个存储库或本地分支获取并集成(整合) | git pull origin git pull = git fetch + git merge git pull -r = git fetch + git rebase |
| git revert | 撤销某次操作(用一次新的commit来回滚之前的commit) | git revert <HEAD/id/> reset处理本地,revert处理远端 |
| git stash (save) | 将更改储藏在脏工作目录中 | git stash list:查看现有的储藏 git stash apply (stash@{n}):应用储藏 git stash pop:应用所有储藏 git stash drop stash@{n}:删除储藏 git stash clear:清空储藏 |
| git tag | 列出现有标签 | 轻量级标签:保存着对应提交对象的校验和信息的文件 git tag [tag]:创建标签 含附注的标签:存储在仓库中的一个独立对象 git tag -a [tag] -m ““:创建标签 git tag -s [tag] -m ““:利用私钥签署标签 git show [tag]:展示标签 git tag -d [tag]:删除标签 git push origin [tag]:推送标签 |




