一、什么是Git
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,广泛应用于项目开发中,通过版本管理、团队协作、代码回滚、分支管理、备份与恢复、版本发布等功能,为项目开发和维护提供强大的支持,提高项目开发的效率和质量,促进团队协作和沟通,降低开发风险。
经典Git开发过程:
二、Git的特点
-
完全分布式,不像集中式存在一个必备的中央服务器。最常见的集中式版本控制系统是SVN,Git和SVN的区别如下:
Git | SVN | |
核心区别 | 分布式 | 集中式 |
存储方式 | 元数据方式存储 | 文件方式存储 |
分支 | 分支功能强大,将Git从版本控制系统的家族中区分出来 | 分支在SVN并不特别,只是版本控制系统中的另外一个目录 |
全局版本号 | 无 | 有 |
内容完整性 | 内容存储使用的是SHA-1哈希算法,确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏 | 性能低于Git |
安全性 | 每个分支都有一个完整的版本库,某个分支所在的电脑故障也不影响,从其他电脑复制即可 | SVN版本控制系统的中央服务器一旦挂掉,则所有工作不能继续进行 |
-
速度快
-
几乎所有操作都在本地执行
-
支持离线工作,本地提交可以稍后提交到服务器上
-
直接记录快照,而非差异比较
-
Git 提交都是原子的,且是整个项目范围的
-
Git 中的每个工作树都包含一个具有完整项目历史的仓库
三、Git的三个区域
使用Git 管理的项目,拥有三个区域,分别是工作区、仓库区、暂存区。
工作区(Workspace):工作目录,负责处理工作的区域,包含.git文件夹的目录,即自己电脑上看到的目录,存放开发的代码;
仓库区(Repository/Git Directory):也称资源库/Git仓库/版本库,是一个本地仓库,存储了很多配置信息、日志信息和文件版本信息等;
暂存区(Index/Stage):临时保存被修改的文件,等待被提交,一般放在.git目录下的index文件中,故暂存区也称为索引(index);
此外还有
远程的Git仓库(Remote Directory):托管代码的服务器,可以简单的认为是项目组中的一台电脑用于远程数据交换。远程仓库可以使用第三方平台,如Github、Gitlab、Gitee等,以下创建的是Github远程仓库。
文件在这四个区域之间的转换关系如下:
四、常用Git命令
1. 新建代码库
- git init——将当前目录变成Git可管理的仓库。仓库建好后,会多一个.git文件夹,一般是隐藏起来的,输入ls -ah可以查看
- git init [diretory]——新建一个目录并将其初始化成Git代码库添加
2. 增加文件
- git add [file1] [file2]...——暂存修改,提交当前目录下的文件到暂存区(file带扩展名)
- git add [dir]——添加指定目录到暂存区,包括子目录
- git add .——添加当前目录的所有文件到暂存区
3. 提交文件
- git commit -m [“message”]——提交暂存区到仓库区,message是对提交的说明
- git commit [file] [file]... -m [“message”]——提交暂存区的指定文件到仓库区
- git commit -a [file]——直接提交修改文件到仓库区
- git commit -v [file]——提交时显示diff信息
4. 删除文件
- git rm [file1] [file2]...——删除工作区文件,并将这次删除的文件放入暂存区
- git rm --cached [file]——停止追踪指定文件,但该文件会保留在工作区
- git mv [originalname] [renamed]——重命名文件,并将改名文件放入暂存区
5. 分支
- git branch——列出所有本地分支(带*且为绿色字体的表示当前所在分支)
- git branch -r——列出所有远程分支
- git branch -a——列出所有本地和远程分支
- git branch [branchname]——新建分支,但仍停留在当前分支
- git checkout -b [branchname]——新建分支,并切换到新分支
- git checkout [branchname]——切换分支,并更新工作区
- git checkout - ——切换到上一个分支
- git merge [branchname]——合并指定分支到当前分支
- git ls-tree [branchname]——查看指定分支中的所有文件
- git branch -d [branchname]——删除分支
- git push origin --delete [branchname]——删除远程分支
6. 查看信息
- git status——显示有变更的文件
- git log——显示当前分支的版本历史
- git log --sta——显示commit历史,以及每次commit发生变更的文件
- git diff——显示暂存区和工作区的差异
7. 配置
- git config --list——显示当前的Git配置
- git config -e [--global]——编辑Git配置文件(.gitconfig)
-
git config [--global] user.name "[name]"——设置提交代码时的用户名
-
git config [--global] user.email "[email]"——设置提交代码时的用户邮箱
8. 远程同步
-
git remote add [shortname] [remote url]——添加远程仓库,并命名
-
git fetch remote——下载远程仓库的所有变动
-
git clone [remote url]——载入远程仓库
-
git pull [remote] [branchname]——取回远程仓库的变化,并与本地分支合并
-
git push [remote] [branchname]——推送本地指定分支到远程仓库
-
git push [remote] --all——推送本地所有分支到远程仓库
9. 撤销
-
git checkout [file]——恢复暂存区的指定文件到工作区
-
git checkout .——恢复暂存区的所有文件到工作区
-
git checkout [commit] [file]——恢复某个commit的指定文件到暂存区和工作区