
学习目标新公司需要Git进行版本管理学习加记录首先要安装Git这个百度这里就不讲学习内容一、建立仓库仓库就是保存你上传文件的地方你可以简单理解成一个目录这个目录里面的所有文件都可以被Git管理起来每个文件的修改、删除Git都能跟踪以便任何时刻都可以追踪历史或者在将来某个时刻可以“还原”要存的东西就得放到仓库里本地版1.新建一个文件夹先在本地电脑建一个文件夹作为仓库打开Git Base软件;但是可以看到 Git Base一开始的操作地址是默认的但是接下来的操作都需要在这个文件夹的地址里操作这时候就有两种方法把Git Base的操作地址改成新建的仓库文件夹1.因为Git最开始是为了Linux的所以可以直接使用Linux的cd命名去到指定文件夹可以看到就到了新建的文件夹了2.直接在新建文件夹鼠标右键有一个 open Git Base Here,点击这个就会在当前文件夹打开Git Base2. Git init这个语句就是设置当前文件夹为仓库Git init回车之后会自动出现Initialized empty Git repository in D:/GitTest1/.git/提示ok了二、 添加到库1.git add在文件夹里随便创建两个文件因为add这个指令可以添加多个文件回车之后没有回应2.git commit -mxxx上面的add还只是上传到暂存区这个就是把暂存区里的都上传到库里xxx就是本次上传写的注释最好写清楚这次上传的文件都更新了什么回车之后会返回[master (root-commit) e2d4fa2] 第一次添加了两个文件2 files changed, 2 insertions()create mode 100644 test.txtcreate mode 100644 test1.txt返回内容解析2 file changed2个文件被改动我们新添加的2个文件2 insertions插入了两行内容两个文件各一行总共两行。3. git status可以获取当前仓库的状态比如这时候我们修改了文件但是没有提交add就可以看到提醒有一个文件改了但是没有上传文件名字就是红色如果仓库里干干净净如果刚把文件ADD到暂存区暂存区里有东西文件名字就是绿色4. git diff使用git status 可以知道改了没有上传但是不能知道详细的改了什么这时候就需要diffdifference的缩写指令可以看到加了两个two如果是删除的话会是-开头单diff对比的是工作区和暂存区的版本如果要看刚改的工作区文件或者是暂存区的文件和本地仓库的做对比呢在Git中使用大写的HEAD来表示当前本地仓库的版本使用可以使用git diff HEAD来对比还有一个比较使用的就是比较两个提交过的版本的区别git diff 版本号1 版本号2对比两个历史提交版本之间的差异# 比较两次提交之间所有改动 git diff 68c6698 3ad4539三、版本回退1、工作区、暂存区、本地仓库在回退之前要明白三个使用到的区域1.工作区工作区是你写代码的地方在这个地方写完之后Git只知道你改了东西但是不会帮你记录这个代码只保存在你本地2.暂存区这个是Add之后就会先存在暂存区3.本地仓库在你使用Commit把暂存区的文件提交之后就是提交到这里2.git log获取提交的所有记录这样太长了可以使用 Git log --oneline来获取短的日志信息这些log日志每次提交记录的这一大串比如e2d4fa260b2d6ce6a541e1aabad0ad0ad77a77c8这就是版本号后面要想回退到某个版本就需要这个版本号log看完之后按q退出日志界面3.git show这个就是展示当前仓库的文件可以使用HEAD查看当前版本还有注释信息文件内容就是这一次新加了什么内容HEAD^查看上一个版本以此类推4.git reset首先要知道在git中用大写的HEAD来表示仓库当前的版本要是是一个版本就是HEAD^再上一个就是HEAD^^,再往前比如说往前100个要是角标就太多了所以是HEAD~100;回退有三种方式1.--soft这种回退是把当前仓库里的版本回退工作区和暂存区的不变而且会把回退的版本重新返回到暂存区里就是如果你是commit的备注没写对的话就可以使用这个重新把文件回退到暂存区再使用commit重新写备注可以看到使用之后再去查看状态就发现文件回到暂存区里了2.--mixed这个回退是除了工作区其他的都回退可以看到会之后再查看状态就是只改了本地文件没有Add有没有commit的状态这个有简写状态也就是这个是系统默认的git reset --mixed HEAD git reset HEAD;还可以指定文件回退git reset HEAD test.txt这个适合就是写错了某个文件并且上传到了暂存区或者上传到了仓库就可以指定文件回退到工作区3.--hard这个回退就是彻底回退了包括本地文件都会一起回退5 git reflog回退使用HEAD来回退的时候要知道具体的第几次的版本有的时候不太记得了这时候就可以直接使用要回退的版本号来回退但是你也不知道之前回退了的版本号了啊这时候你可能想用log来查看log日志但是回退之后的log也会一起删除就只剩下最开始的两次提交了这时候就要使用reflogreflog可以查到本地电脑上90天的操作这时候就可以配合reset回退删掉的版本log由于删除前看看要回退到哪个版本reflog适合回退错了要回退这个回退6.git restore 撤销 / 恢复文件专用命令这个是专门用来操作 暂存区和本地文件的1.git restore 文件名用于回退没有上传到暂存区的本地文件使用回退工作区之后2.git restore --staged 文件这个是把文件从暂存区退回工作区取消暂存可以用于rm删除之后恢复3.git restore --source版本号 文件从历史提交恢复文件尤其是恢复具体一个文件的时候就用这个四 删除1 git rm这个就是删除本地文件而且会把删除这个文件删除到暂存区这时候还可以通过 restore恢复但是恢复的是之前add或者commit了的版本要先$ git restore --staged test.txt来把删除之后上传到暂存区取消之后再restore来回退本地操作如果rm删除之后还commit了这时候就只能从历史版本里恢复就要先reflog知道版本号再用restore五、远程仓库远程仓库可以是公司的还可以是自己在github上创建自己来测试学习下面的就全是在github上测试的5.1 git push这是把本地仓库的推送到远程仓库上origin的话是默认代表远程仓库的代号这个是可以自己再去重新设置的把本地仓库里所有的东西都推送上去 git push -u origin master使用上面这个指令不只是会全部推送还会把本地的master和远程仓库里的master联系起来如果不联系起来的话push会报错要重新联系之后再改了推送具体的分支 $ git push origin master git push origin dev5.2 git clone 【地址】这个是从远程仓库克隆到本地$ git clone gitgithub.com:michaelliao/gitskills.git5.3 分支分支就相当于从某一个时间节点分裂出一个平行宇宙两个平行宇宙拥有一模一样的历史、一模一样的代码在公司就是有一个主的master分支里面负责放已经稳定的版本其他人要改或者添加新东西就先clone主的master分支再在自己电脑上创建一个自己的工作dev分支这样改东西哪怕是改错了或者该丢了都不影响主的master分支自己测试完了觉得ok了再把dev分支合并到主分支上这样dev改的内容就到主分支上了5.3.1 分支图像化在前面可以知道commit之后就是添加了一个时间节点HEAD就是最新版本其实HEAD指向的不是当前分支的最新版本而是指向当前分支由分支指针来指向最新版本再创建一个分支devHEAD就是指向最新这个分支dev指针这时候在当前分支comiit一个新版本就是dev指针往前这时候要合并了在git里就是把master指针指向当前最新的操作HEAD也指向master指针就好了这就是为什么在合并指针之后如果不删除的话dev分支会一直保持当前状态删掉的话就是删掉dev指针5.3.2 git switch -c创建分支的话旧版本是git checkout最新的是git switch -c name可以看到创建分支之后里面就是当前分支名字注意基于一个分支创造另外一个分支的话要在第一个分支下创造5.3.3 git switch name切换分支要去哪个分支就填哪个分支的名字5.3.4 git branch这个是查看当前有哪些分支,*name就是代表当前是哪个分支5.3. 5分支注意的问题可以看到在dev分支下改了文件注意要是分支上改了文件但是没有commit再切换到主分支也会一起带过去现在就是在dev上改的可以看到切换到master后一起带过去了文件改了没commit5.3.6 git merge在dev分支修改了文件可以看到在master分支上并没有还是在修改前的版本这时候就需要合并注意要把a分支合并到b分支上就得先切换到b分支注意上面的合并是快速合并5.3.7 git restore -d name不需要的分支可以通过这个删除5.3.8 合并冲突如果在两个分支对同一个文件都有修改提交这时候再合并就会报错了这时候在报错的文件里会自动把不一样的地方画出来HEAD的部分就是当前分支的就是分界线,dev就是另外一个分支的可以看出两个对比前三行都一样是第四行开始不一样了master分支的是threeworkingchangedev的changeworking这时候就看你要哪个版本的了保留需要的版本把标志和不需要的都删掉比如要master的就改完之后就按照流程add再commit六、git stash临时去别的分枝干活现在手头这个分支的活又没干完没办法提交比如working到一半要临时去主分支帮忙改bug可以看到当前分支的还没干完所以没有提交1. git stash save “xxx”可以添加一些注释方便等一下回来知道现在改到哪里了这时候再看工作区就是干净的了可以切换到别的分支干活了之后就可以回到主分支再开个新分支去修改bug了还可以使用ls来看看分支有哪些文件修改提交好了就回到主分支把修改bug分支上改好的合并2. git stash pop之后再回到之前工作的分支但是之前的工作区已经被储存起来了这时候就需要pop来把之前存的拿出来可以看到还是之前工作的内容3.git stash apply恢复储存出来pop还可以使用applypop是恢复之后会把储存记录删掉apply不会apply和pop都可以恢复指定的储存记录这个需要git stash list来看有多少储存记录git stash apply stash{1}git stash pop stash{1}一些疑问1.指令为什么有些是-有些是---的后面跟着的是一个字母一些简写--后面跟着的完整的单词git commit -m;git reset --hard ;学习时间提示这里可以添加计划学习的时间例如周一至周五晚上 7 点—晚上9点周六上午 9 点-上午 11 点周日下午 3 点-下午 6 点学习产出提示这里统计学习计划的总量例如技术笔记 2 遍CSDN 技术博客 3 篇习的 vlog 视频 1 个