简介
Git、Svn:版本控制器(用于多人团队协作)
Svn:集中式版本控制器;版本库集中放在中央服务器,操作非常简单,鼠标右键提交、新增、下载
Git:分布式版本控制器;并非将所有版本放在中央服务器,它将每一个人的电脑都看做是一个服务器,不需要联网也可以提交;目前最先进主流的版本控制器,Git相对于SVN会复杂一些,因为它有很多命令
流程
->工作区 :自己电脑上项目所在目录
-> 暂存区 :通常放在当前目录 .git目录下
-> 本地仓库(本地版本库):同样在 .git目录下
-> 远程仓库(远程端版本库):将代码放在服务器上
安装
1)去下载"https://git-scm.com" => 选择"Downloads" => 选择"Window系统的下载" => 选择"64-bit Git for Windows Setup"
2)双击下载好的.exe文件 => 默认选项不改,直接next直到install,整个过程都不需要手动选择,直接采用默认选项
常见命令
安装好Git之后,对着项目根目录点击右键会有"Git Bash Here"的选项,选择之后可以直接进入项目命令行或终端弹窗
(1)配置命令
安装完Git之后必须先设置全局的用户名和邮箱地址
=> git config --global user.name '你的用户名' (必须英文,执行成功没有提示,错误会有提示)
=> git config --global user.email '你的邮箱'
如果仅仅是为了当前项目单独设置用户名,那么需要去掉global执行命令
git config user.name '你的用户名'
查看当前配置
git config --list
(2)仓库初始化
新项目的仓库创建(首先进入到你准备创建项目的目录下)
=> mkdir mygit (英文,自定义文件夹的名字;执行后指定的目录下就会出现文件夹mygit)
=> cd mygit (进入创建的项目目录中)
仓库初始化
=> git init (会在当前目录下创建一个.git的隐藏目录,不要再电脑里去显示隐藏文件,不许碰)
/* 执行结果:
Initialized empty Git repository in E:/前端/code/git/mygit/.git/ */
(3)查看当前项目状态
可以看到有没有文件的变动,新的文件,文件的改变等等
=> git status
/* 执行结果:
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track) */
在项目mygit中新建index.html,再次执行git status
/* 执行结果:
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
index.html
nothing added to commit but untracked files present (use "git add" to track) */
(4)文件跟踪 -> 工作区提交到暂存区
将工作区的文件(例:index.html)提交到暂存区
=> git add index.html
(5)文件跟踪 -> 暂存区提交到本地仓库
=> git commit -m '本次提交说明文字'
/* 执行结果:
[master (root-commit) 095d7dd] 新建了一个index.html
1 file changed, 10 insertions(+)
create mode 100644 index.html */
(6)新增文件(修改文件之后重新更新 | 提交文件)
操作:index.html新增了内容,并且创建了css文件夹和index.css文件
如果添加的文件和文件夹比较多的情况下,我们每次执行git add 文件名(暂存区),git commit -m '本次提交说明'(本地
仓库),可以这样一个文件一个文件的提交操作,但是会很麻烦。可以通过一个指令将所有都包含进去(根据情况选用以下两个
指令中的一项执行)
=> git add . (新增、修改的都添加到暂存区,但不包含删除的文件)
=> git add -A (添加所有变化,新增、修改、删除)
注意:并非只要执行了git add之后就必须git commit -m 'xxx',可以多次add之后再git commit到本地仓库
执行顺序:当有文件发生变动,不能直接执行git commit,必须首先执行git add
新增完毕之后再提交到本地仓库
=> git commit -m '修改了index.html文件和新增了index.css文件'
(7)可通过代码编辑器完成之前的操作
补充:Sourcetree: https://www.sourcetreeapp.com 可视化工具
WebStorm:不同版本的编辑器,有稍许差异看具体情况操作(当前使用的2021.3.3版本在左下角、左上角操作)
VSCode:下载安装插件(Git History、GitLens — Git supercharged)后即可使用
HBuilderX:官方插件商城下载安装(easy-git Git源代码管理工具),另外要去下载Git插件依赖的(TortoiseGit)工具
(8)历史记录
查看版本历史记录(最新提交的记录前会有 HEAD -> master 的标记)
=> git log
查看历史操作记录
=> git reflog
(9)文件删除
手动将工作区的index.css文件删除
=> git status(提示有文件被删除了,但这里的删除并没有在本地仓库中删除index.css文件)
/* 执行结果:
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: css/index.css */
怎样删除本地仓库中的文件?因为这个操作也算是在修改文件,所以同样提交暂存 ->修改本地仓库
=> git add .
=> git commit -m '删除css文件'
/* 执行结果:
[master 2a7f5cd] 删除css文件
1 file changed, 3 deletions(-)
delete mode 100644 css/index.css */
或也可不用以上两步操作,直接使用指令git rm 文件名(删除工作区文件,并且也从暂存区删除对应记录)
=> git rm index.html
=> git commit -m '删除index.html文件'
(10)停止跟踪
操作:新建了test.html文件
以下两步操作完成后,文件就会一直处于被跟踪状态,一旦文件发生变化就会被发现
=> git add . (提交到暂存区)
=> git commit -m '新增test.html文件' (提交到本地仓库)
指定某个文件停止跟踪(文件变更的内容将停留在停止跟踪之前)
=> git rm --cached test.html
如果停止跟踪之后,又希望再次跟踪(文件内容为最新的文件内容)
=> git add .
=> git commit -m '提交test.html文件'
(11)版本回退
每次提交之后就会生成当前版本,如果出现错误,可以回退到指定版本(但会导致在它之后提交的记录都消失)
语法:
git reset 版本号
git reset --hard 版本号 (不加hard回退的时候,仅回到暂存区;加上hard回到工作区)
操作:
查看当前提交的记录,选择回退到哪个版本
=> git reflog
=> git reset --hard 3bd00d8
(12)可以仅仅撤销某一次版本的操作(最好是最近一次)
创建1.html -> git add -A -> git commit -m '添加1.html文件'
创建2.html -> git add -A -> git commit -m '添加2.html文件'
创建3.html -> git add -A -> git commit -m '添加3.html文件'
查看操作记录,将要撤销的版本号复制(前7位:5c43a43)
=> git reflog
撤销某次版本的操作(结果就是将第三步创建的3.html删除)
=> git revert 5c43a43
其它指令(撤销指定版本,撤销上一次,撤销上上次,撤销上上上次)
=> git revert 版本号
=> git revert HEAD
=> git revert HEAD^
=> git revert HEAD~3
本地仓与远程仓关联
仓库类型:
1)github(国外)
2)gitee(码云,国内,与github类似)
3)自建服务器(保密,可以上传机密文件)
(1)直接克隆clone远程仓库中有的项目(语法:git clone 远程端url)
拉取下来的文件有一个隐藏的.git文件夹,这是版本库,因此不需要再初始化
=> git clone https://gitee.com/limengyue7/uni-demo.git
(2)关联远程端与本地端
可以在上传到远程仓库的时候最后检查一下是否还有需要提交的文件(=> git status)之后再进行下一步操作
语法:
git remote add remoteName(自定义的,通常是origin) url
相关指令:
git remote (查看本地仓库关联的远程仓库)
git remote -v (列出关联的远程仓库详细信息)
=> git remote add origin https://gitee.com/limengyue7/uni-demo.git
(3)将远程仓库同步到本地
git pull (拉取代码并和本地代码合并,一般直接使用git pull)
语法:git pull 远程主机名 远程分支名:本地分支名
还可以使用rebase模式进行合并,有更好的代码提交树
语法:git pull --rebase 远程主机名 远程分支名:本地分支名
拉取合并指令:
git pull --rebase origin master (将远程端的master与当前本地的master合并)
git pull --rebase origin master:dev (将远程端的origin的master分支拉取下来和本地的dev分支合并)
(master)
=> git pull --rebase origin master
(4)将本地仓库推送到远程仓库
语法:git push 远程主机名 本地分支名:远程分支名
git push origin master (将本地master推送到远程的master上)
git push origin dev:dev (将本地dev分支推送到远程端的dev上)
git push -u origin master (一般第一次推送的时候加上 -u)
-u是为了方便以后的推送只需要写git push不用写后面的origin master
-u的意思是将本地的master和远程的master进行关联,关联一次就好了,以后直接git push
=> git push -u origin master
冲突解决
推送到远程仓库时,当自己和别人都修改了同一个文件内容时,命令行提示存在冲突情况
项目克隆或者同步到本地时的内容:
别人对文件更改推送后的远程仓库中的内容:
自己对文件内容更改后,推送时出现冲突错误:
提示当前内容已落后,应该整合远程的更改,在推送之前先 git pull 一下
按报错的提示先git pull,然后手动编辑合并冲突的内容
修改合并好内容的冲突文件,进行add标记 -> commit ->push解决完成
以上操作步骤,也可以由编辑器自带的冲突解决工具按照窗口提示操作即可
最后推送即可