从使用场景出发,来理解,命令的使用,不要杠为什么不用图形操作界面,杠就是你对
首先来了解一下几个基本概念
- 工作区:workspace
- 暂存区:Index/Stage
- 本地仓库:Repository
- 远程仓库:Remote
【图1】
使用场景
阿珍上手接到一个需求,这是一个全新的需求,在她公司的代码管理平台(以gitlab为例)上没有创建分支的,这个时候,阿珍需要本地创建项目并上传到gitlab上,阿珍做了以下操作
1. 创建远程仓库
- 平台创建,不展开说了
2. 初始化本地仓库
git init
1. 在本地项目所在文件夹,调用终端执行git init命令,初始化本地仓库
2. 初始化了以下存储空间
3. 与远程仓库建立连接并进行第一次代码提交
git remote add origin http://xxxxxx.git(你远程仓库地址)
至此本地仓库已经有了git自动创建的第一个master分支
1. git status 命令查看工作区和暂存区的文件状态
-
Untrached file
未追踪过的文件,理解为新增的还没进行git提交过的文件
-
Changes not staged for commit
文件已修改,还没放入暂存区,未add过的修改
-
Changes to be committed
文件已存入暂存区,即将被提交到分支 已经add过没有commit的改动
2. git add .将未提交的文件提交到暂存区(可参考图1)
比如,工作区修改A、B、C文件
-
git add . 提交所有改动到暂存区 -
git add A B 提交A B 文件到暂存区 -
git add dir 提交一个文件夹到暂存区,效果与上面类似,文件替换为文件夹
暂存区有个目录树,每次提交add后,目录树会更新,并存储一个指向本次修改文件内容的ID引用
3. git commit 提交版本到本地仓库
将暂存区的文件提交到本地仓库对应分支(可参考图1)
1. git commit -m 'xxx' 将所有暂存区的文件提交到本地分支
1. git commit A -m 'xxx' 将暂存区A文件提交到本地分支
4. git push 提交到远程分支
git push origin master 将本地仓库master分支推送到远程仓库(可参考图1)
4. 各种常规操作
1. 创建、切换本地分支
git branch dev 以当前分支为基础在本地创建dev分支
git checkout dev 切换到dev分支
git checkout -b dev 合并命令,以当前分支为基础在本地创建dev分支,并切换到dev分支
-
以下几种情况请注意: 1. 当前分支有新增文件,且未追踪过,即未提交到暂存区(未add),切换分支时新增的文件会一直存在于工作区,直到进行提交到暂存区操作。 2. 当前分支有修改文件,且未提交到暂存区,切换分支时,需要先将本地代码提交到 暂存区或者堆栈,然后git才允许切换分支
2. 暂存修改到stash栈
1.git stash
将当前改动存储到stash仓库(将本地修改过未提交的A文件stash一下)工作区的改动会清除并存储到stash仓库里,原工作区A文件改动将还原
如果继续修改B文件后git stash,git会以栈的形式存储B到stash仓库,原工作区B文件改动将还原
2.git stash pop
将stash 仓库中的最近的一次改动记录推出到工作区,以上图为例
git stash pop 等于 git stash pop @stash{0} 0是stash的编号,最近的一次为0,往后类推为1,2...
3.git stash apply 将stash堆栈中的内容恢复到工作区,且在stash堆栈中仍旧保留内容
与stash pop不同,stash pop不会保留内容
4.git stash list 查看stash堆栈中的多有内容
3. 撤销修改
-
撤销已经修改,且未提交到暂存区的文件 (已修改,未add)-
git checkout 用暂存区上一次add的全部或指定文件替换工作区的文件 1. git checkout . 撤销所有修改 2. git checkout file 撤销file文件的修改 -
git restore file 撤销工作区的修改返回到最近一次暂存区的版本(需指定要restore的文件)
-
-
撤销已经提交到暂存区的文件(已add)//撤销你在暂存区的提交,工作区文件不变 git restore --staged file //从暂存区删除文件,工作区不做改变,修改内容还存在 //此操作,将文件从暂存区删除了,但是工作区还保留着修改状态,git会将此识别为未追踪过的修改文件 git rm --cached file -
撤销已经提交到本地分支的文件(已commit) 首先查看版本号,确定要撤销的版本 然后再进行回退操作-
查看版本号
1.git log 查看commit版本 查看当前分支提交过的版本信息(如果版本回退导致的删掉的操作记录不会保存 2. git reflog 查看当前分支所有提交过的版本信息,包含回退版本删除的操作记录 【小tip】 git log --oneline/git reflog --oneline提交信息一行展示更加便于阅读
-
回退版本
- git reset
//回退到上一个提交版本 git reset --hard HEAD^ //回退到上上个版本,上上上个版本^^^以此类推 git reset --hard HEAD^^ //回退到指定目标版本d8bf4c7,并将工作区内容替换为版本内容,修改的内容不会放入暂存区 git reset --hard d8bf4c7执行git reset --hard d8bf4c7 再次查看git log,d8bf4c7版本之后的提交记录都清除掉了如果git reflog 查看,之前的记录都还在-
git revert(推荐)git revert -n [指定版本号] //revert会回退到指定版本号,并且不会覆盖操作记录,再次提交后,会生成一个最新的版本在前面。 git revert -n d8bf4c7
git commit -am 'rever'
-
4. 删除分支
git branch -d branchName
5.拉取远端代码
-
git fetch 拉取远程仓库的所有分支同步到本地仓库 -
git pull 拉取远程仓库代码并合并本地的版本 git pull = git fetch + git merge//将远程仓库origin 的 master 分支拉取过来,与本地的 brantest 分支合并 git pull origin master:brantest //如果是与本地当前分支合并,可以省略冒号后面的分支名 git pull origin master