git的基础知识与基本使用
版本管理
本地版本控制系统
人们把项目拷贝到本地磁盘上进行备份,然后以命名方式来区分,这种做法好处是简单,但坏处也不少比如备份比较多或许就会混淆不同版本之间的区别,为了解决这个问题,有人就开发了一个本地版本管理系统
本地版本管理就是把版本号存入数据库来记录文件的历史更新差异
集中化版本控制系统
为了解决开发者协同工作的问题,于是,就出现了集中化的版本控制管理系统(CVS)。这一种管理系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或者提交更新
但是有一个致命的问题就是,如果服务器坏了,所有人就不能提交代码,如果服务器丢失了数据,没有做数据备份,那么就有丢失数据的风险。还有就是只要项目的历史记录被保存在单一位置,就会有丢失所有历史更新的记录风险(本地版本控制系统也有这种风险)
分布式版本控制系统(git)
客户端不只是提取最新版本的文件快照,而且把最原始的代码仓库镜像到本地,这样一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。
git的安装
- git安装地址:Git (git-scm.com)
- 在官网把安装包下载下来之后一路next操作即可(无需再勾选或取消其他选项)
git的基本配置
- 鼠标右键然后选中Git Bash Here打开git的控制台
- 版本查询指令:git --version
- 配置用户名指令:git config --global user.name "XXX"
- 配置邮箱指令:git config --global user.email xxxx@qq.com
- 查看配置指令:git config --list
输入ssh-keygen -t rsa -C "xxxx@qq.com"然后一直回车直至出现如下图
Git文件的三种状态与工作模式
使用Git操作文件时,文件状态有三种
| 状态 | 描述 |
|---|---|
| 已提交(commited) | 已提交表示数据已经安全的保存在本地数据库中 |
| 已修改(modified) | 已修改表示修改了文件,但还没保存到数据库中 |
| 已暂存(staged) | 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中 |
Git项目有三个工作区域:工作区、暂存区和Git仓库
| 分类 | 描述 |
|---|---|
| 工作区 | 简单的理解为在电脑里能看到的目录,比如自己创建的本地项目目录 |
| 暂存区 | Git的版本库里存了很多东西,其中最重要的就是称为stage的暂存区,还有Git自动创建的第一个分支master,以及指向master的一个指针叫HEAD |
| Git仓库 | 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库 |
Git项目的工作流程
- 在工作区中修改某些文件
- 对修改后的文件进行快照,然后添加到暂存区
- 提交更新,将保存在暂存区域的文件快照永久存储到Git仓库中
常用的git指令
新建代码库
- git init 在当前目录新建一个Git代码库
- git init [project-name] 新建一个目录,将其初始化为Git代码库
- git clone [url] 下载一个项目和它的整个代码历史
增加/删除文件
- git add [filename] 添加指定文件到暂存区
- git add [dir] 添加指定目录到暂存区,包括子目录
- git add . 添加当前目录的所有文件到暂存区
- git rm [filename] 删除工作区文件,并且将这次删除放入暂存区
- git rm --cached [file] 停止追踪指定文件,但该文件会保留工作区
- git mv [file-original] [file-renamed] 改文件 并且将这个改名放入暂存区
代码提交
- git commit -m [message] 提交暂存区到仓库区
- git commit [filename] -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 cherry -pick [commit]选择一个commit,合并进当前分支
- git branch -d [branch-name] 删除分支
- git push origin --delete[branch-name]删除远程分支
- git branch -dr [remote/branch]
标签
- git tag 列出所有tag
- git tag [tagname]新建一个tag在当前的commit
- git tag [tag][commit]新建一个tag在指定的commit
- git tag -d [tag]删除本地tag
- git push origin :ref/tags/[tagName]删除远程tag
- git show [tagname]查看tag信息
- git push [远程仓库] [tagname]提交指定tag
- git push [远程仓库] --tags 提交所有tag
- git checkout -b [branchname] [tagname]新建一个分支,指向某个tag
查看信息
- git status 显示有变更文件
- git log 显示当前分支的版本历史
- git diff 显示暂存区和工作区的差别
- git reflog 显示当前分支的最近几次提交
远程同步
- git fetch [remotename] 下载远程仓库的所有变动
- git remote -v 显示所有远程仓库
- git remote show [remotename]显示某个远程仓库的信息
- git remote add [shortname][url]增加一个新的远程仓库并命名
- git pull [remotename] [branch]取回远程仓库的变化,并与本地分支合并
- git push [remotename][branch]上传本地指定分支到远程仓库
- git push [remotename] --force 强行推送当前分支到远程仓库,即使有冲突
- git push [remotename] --all 推送所有分支到远程仓库
撤销
- git checkout [file]恢复暂存区的指定文件到工作区
- git checkout [commit][filename]恢复某个commit的指定文件到暂存区和工作区
- git checkout 恢复暂存区的所有文件到工作区
- git reset [file] 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
- git reset --hard 重置暂存区和工作区,与上一次commit保持一致
- git reset [commit] 重置当前分支的指针为指定commit,同时重置暂存区,但是工作区不变
- git reset --hard [commit] 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
- git reset --keep [commit]重置当前HEAD为指定commit,但保存暂存区和工作区不变
其他
- git log --pretty=online 使日志格式化在一行显示
- git reset --hard HEAD^回退版本 多少个^就回退几个版本
在vscode集成git
下载git插件
在vscode中配置git信息
文件->首选项->设置->搜索.gitpath->setting.json中编辑->配置git.path与git.confirmSync
注意:git.path要到git.exe
最后当按钮被点亮就说明成功啦!!