1. 什么是版本控制?
可以把一个版本控制系统(缩写VCS)理解为一个“数据库”,在需要的时候,它可以帮你完整地保存一个项目的快照。当你需要查看一个之前的快照(称之为“版本”)时,版本控制系统可以显示出当前版本与上一个版本之间的所有改动的细节。
2. 流行的版本控制器对比
名称
|
特点
|
难易程度
|
svn
|
1.集中式版本库
2.把内容按按文件存储 3.分支在SVN中一点不特别,就是版本库中的另外的一个目录 |
1.TortoiseSVN为Svn提供了一个简单易用的用户界面
|
git
|
1.git是分布式的
2.把内容按元数据方式存储 3.分支在git里非常智能, 在某些工作流里能够被当成是另外一个未提交代码的存储库 |
1. Git复杂概念多
2.不支持中文,图形界面支持差 |
3. git 使用实践
3.1 安装git
不同系统安装方式各有差异,此处参考git官网的安装:[https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)
3.2 git clone 两种方式
1. https: 使用https url克隆对初学者来说会比较方便,复制https url然后到git Bash里面直接用clone命令克隆到本地就好了,但是每次fetch和push代码都需要输入账号和密码,这也是https方式的麻烦之处
2. ssh: 使用SSH url克隆却需要在克隆之前先配置和添加好SSH key,因此,如果你想要使用SSH url克隆的话,你必须是这个项目的拥有者。否则你是无法添加SSH key的,另外ssh默认是每次fetch和push代码都不需要输入账号和密码,如果你想要每次都输入账号密码才能进行fetch和push也可以另外进行设置。
3.3 git 配置 ssh
1. 配置user.name
git config --global user.name '****'
2. 配置user.email
git config --global user.email '***'
3. 查看已设置好的user.name 和 user.email
git config user.name
git config user.email
4. 生成 ssh,输入下面命令,一直按enter键便生成ssh key
ssh-keygen -t rsa -C "email"
5. 查看ssh key
cd ~/.ssh
ls
6. 将id_rsa.pub 文件的内容保存到 gitee 或者 github 即可使用 ssh 方式 git clone
3.4 git 日常开发命令
git init # 在当前目录新建一个Git代码库
git init [project-name] # 新建一个目录,将其初始化为Git代码库
git clone [url] # 下载一个项目和它的整个代码历史
$ git add [file1] [file2] ... # 添加指定文件到暂存区
$ git add [dir] # 添加指定目录到暂存区,包括子目录
$ git add . # 添加当前目录的所有文件到暂存区
$ git rm [file1] [file2] ... # 删除工作区文件,并且将这次删除放入暂存区
$ git rm --cached [file] # 停止追踪指定文件,但该文件会保留在工作区
$ git mv [file-original] [file-renamed] # 改名文件,并且将这个改名放入暂存区
$ git commit -m [message] # 提交暂存区到仓库区
$ git commit [file1] [file2] ... -m [message] # 提交暂存区的指定文件到仓库区
$ git commit -a # 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -v # 提交时显示所有diff信息
$ git branch # 列出所有本地分支
$ git branch -r # 列出所有远程分支
$ git branch -a # 列出所有本地分支和远程分支
$ git branch [branch-name] # 新建一个分支,但依然停留在当前分支
$ git checkout -b [branch] # 新建一个分支,并切换到该分支
$ git branch [branch] [commit] # 新建一个分支,指向指定commit
$ git branch --track [branch] [remote-branch] # 新建一个分支,与指定的远程分支建立追踪关系
$ git checkout [branch-name] # 切换到指定分支,并更新工作区
$ git checkout - # 切换到上一个分支
$ git branch --set-upstream [branch] [remote-branch] # 建立追踪关系,在现有分支与指定的远程分支之间
$ git merge [branch] # 合并指定分支到当前分支
$ git branch -d [branch-name] # 删除分支
$ git push origin --delete [branch-name] # 删除远程分支
$ git branch -dr [remote/branch] # 删除远程分支
$ git status # 显示有变更的文件
$ git log # 显示当前分支的版本历史
$ git log --stat # 显示commit历史,以及每次commit发生变更的文件
$ git log -S [keyword] # 搜索提交历史,根据关键词
$ git diff # 显示暂存区和工作区的差异
$ git diff --cached [file] # 显示暂存区和上一个commit的差异
$ git diff HEAD # 显示工作区与当前分支最新commit之间的差异
$ git reflog # 显示当前分支的最近几次提交
$ git fetch [remote] # 下载远程仓库的所有变动
$ git pull [remote] [branch] # 取回远程仓库的变化,并与本地分支合并
$ git push [remote] [branch] # 上传本地指定分支到远程仓库
$ git push [remote] --force # 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --all # 推送所有分支到远程仓库
$ git reset [file] # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset --hard # 重置暂存区与工作区,与上一次commit保持一致