Git常用命令教程,非常细致,零基础也能听懂
关注git常用命令使用方法如何git管理自己现有的项目不包括远程连接不需要可以划走全文使用git bash进行演示。每到新知识有提示行文逻辑便于理解文章目录前言一、安装Git二、常用命令1.配置2.常用命令总结前言Git是什么Git原型是Linus大佬花了不到一个月时间写出的一款分布式版本控制系统底层使用C语言开发使用起来很快也很简单非常牛批文章中将体现它的厉害之处。分布式是什么集中式系统通过中央服务器获得最新版本用户每次更新版本都要上传到中央服务器中缺点显然多人协作十分麻烦安全性低还要求网速好不然出错了所有人都要停下工作于是分布式诞生了。。简单来说分布式中每台主机都是一个服务器每个人都有完整的版本库只需要交换每次修改也就是推送版本库就可以开始协作了。这样自然提高了安全性一台主机爆炸了其他的也不会受到影响并且在协作开发中可以各干各的十分方便。当然中央服务器依然存在作用也只是为了推送版本库更方便仅此而已。工作机制这里借用廖雪峰老师的原理图原文在此 liaoxuefeng.com。这里重点关注三个区域。基础只需了解深入不做探讨工作区也就是外部项目文件比如电脑上资源管理器的显示文件。版本库每个被git管理的文件库都会生成一个.git文件点开显示隐藏文件就可以看到其中index文件夹就是stage暂存区分支master在regs的文件夹下。友情提示.git文件不要乱动不要乱动不要乱动否则会破坏git工具对整个项目管理和结构废话不多说直接进入使用一、安装Git直接进入 git官网无需魔法选择下载版本无脑下一步默认安装路径即可选择自己的也可以但路径一定不要有中文验证是否安装成功winR,打开cmd输入C:\Users\gbxgit--versiongitversion2.48.1.windows.1即安装成功在菜单栏搜索git选择git bash。实际上这里跟wR cmd打开的命令窗口在用这些基础命令时效果没差别。使用前说明一点git命令设计哲学是“无消息就是好消息”所以每次执行成功都会显示空行不必惊慌。二、常用命令1.配置像所有工具一样首先设置一些信息这里只需要gitconfig--globaluser.name名字//全局设置用户名字gitconfig--globaluser.email邮箱//全局设置用户邮箱全局的意思是在你这台电脑上以后任何被git标记管理的项目都默认为是上面用户的操作该设置在连接远程的时候也会被使用。但实际上这里设置的时候不加双引号也是可以的但前提内容没有空格下面命令同样。已有文件的项目和空项目都可以被git标记管理这里我以本地项目为例因为其他教程都讲的是空项目实际都一样。2.常用命令gitinit // 将当前目录标记为git管理gitadd文件名 // 将文件添加到暂存区gitcommit-m说明// 将当前暂存区的文件一次性全部提交到当前分支gitlog // 查看文件修改记录gitreset--hardHEAD^ // 回退到上一个版本如果回退到指定的提交git reflog记录了每次命令gitreflog // 记录了每次命令cat文件名 // 查看当前文件内容不管你有没有addcommitgitstatus // 查看当前状态gitreflog // 记录了每次命令gitdiff文件名字 // 查看git的版本和当前文件是否存在差异因为都是命令窗口所以cdmkdir那些操作这里也同样使用并且在git bash中不能使用ctrl cv效果不说了可以去试试。都是什么意思呢以我本地的一个项目为例首先进入项目的根目录新知识 git initcdE:\test\ruoyi-ui // 注意这里是正斜杠/不是反斜杠\这与windows文件资源管理器截然相反。否则会找不到输入gbxLAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui $gitinit Initialized empty Git repositoryinE:/test/ruoyi-ui/.git/意味着成功初始化了一个git仓库这时候观察你的根目录打开隐藏文件观察到.git还记得吗现在仅完成初始化我们要将项目的所有文件交给git管理新知识 git add和commitgbxLAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui(master)$gitadd.// 将所有文件添加到缓存区 warning:inthe working copy ofbin/build.bat, LF will be replaced by CRLF the nexttimeGit touches it warning:inthe working copy ofsrc/api/monitor/job.js, LF will be replaced by CRLF the nexttimeGit touches it......gbxLAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui(master)$gitcommit-m第一次提交到本地仓库// 提交到分支[master(root-commit)511218a]第一次提交到本地仓库292files changed,26083insertions()create mode100644.editorconfig create mode100644.env.development create mode100644.env.production......有没有发现一个现象整个过程用时不会超过1s这就是Git牛逼的地方之一因为它追踪的是修改而不是文件并且不需要联网。有关上传到缓存区可以理解你准备要将修改的文件上传到的地方等待一起提交。意味着你可以gitadd文件1gitadd文件2...gitadd文件ngitcommit-m说明也可以gitadd文件1gitcommit-m说明gitadd文件2gitcommit-m说明...这说明缓存区的文件等待被提交提交一次清空一次。现在输入新知识 git loggbxLAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui(master)$gitlog // 日志记录查看从诞生到现在的所有修改记录 commit 511218a45f1b6a451d24fae0c2427f7ee3fe5433(HEAD -master)Author: ruciyingjun19949317733163.comDate: Wed Feb2623:23:4520250800 第一次提交到本地仓库511218a45f1b6a451d24fae0c2427f7ee3fe5433 是提交号一个哈希值后续我们如果想回退修改需要用到它想想看为什么不用123在多人协作情境下提交号很容易重复。看到我们在提交时的说明也输出了这里的说明可以选择不写但建议写是必要的。HEAD 指当前指向的最新提交在这里指向master表示你当前在master分支上。还有作者提交日期等。现在让我们来手动修改项目中的某个这里我打开vscode随意将views/index.vue中某个标题改成1234点击保存。再回到git bash输入新知识 git diffgbxLAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui(master)$gitdiff// 查看git版本的文件和当前文件的差异diff--gita/src/views/index.vue b/src/views/index.vue index 92a6482..a6d98a3100644--- a/src/views/index.vue b/src/views/index.vue -42,7 42,8 el-col :sm24:lg12stylepadding-left: 50pxel-rowel-col :span12-h2技术选型/h2!--h2技术选型/h2--h21234/h2/el-col/el-rowel-row看到我们刚刚的修改被git识别到了这是另一个牛逼之处git会迅速且准确的识别到当前文件和git版本不同的地方因为它记录的是修改而不是文件本身这是与其他一些版本管理工具不同的地方。现在如果我们确定要修改那就可以git add到缓存区等待所有修改然后git commit提进行提交。提交后输入git log就可以看到每次文件修改的记录gbxLAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui(master)$gitlog commit ff59015cb5c67531c93dcda56222095d69cd2b45(HEAD -master)Author: ruciyingjun19949317733163.comDate: Thu Feb2700:12:5520250800 修改了views/index.vue的技术选型为1234 commit 511218a45f1b6a451d24fae0c2427f7ee3fe5433 Author: ruciyingjun19949317733163.comDate: Wed Feb2623:23:4520250800 第一次提交到本地仓库如果后悔了我们就可以进行版本回退新知识 git resetgitreset--hardHEAD^ // 回退到上一个版本几个^就回退到几个版本。gitreset--hardHEAD~n // 如果你需要回退的多且记性还不错指回退到上n个版本gitreset--hard提交号 // 如果你需要回退指定的版本就需要找到它的提交号还记得这个哈希值吗这里回退到上个版本经过了这么多操作现在让我们输入git log。gbxLAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui(master)$gitlog commit 511218a45f1b6a451d24fae0c2427f7ee3fe5433(HEAD -master)Author: ruciyingjun19949317733163.comDate: Wed Feb2623:23:4520250800 第一次提交到本地仓库便又回去了当然也可以指定提交号操作效果一样。那现在让我们输入新知识 git refloggbxLAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui(master)$gitreflog // 记录了每次执行成功命令 511218a(HEAD -master)HEAD{0}: reset: moving to HEAD^ ff59015 HEAD{1}: commit: 修改了views/index.vue的技术选型为1234 511218a(HEAD -master)HEAD{2}: commit(initial): 第一次提交到本地仓库当然我们也可以查看文件内容也都清晰输出了新知识 cat 查看gbxLAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui(master)$catsrc/views/index.vuetemplatedivclassapp-container homeel-row :gutter20...当然我们再手动修改该文件这里我又改回去了。再查看cat 查看文件你会发现文件内容为你最后一次修改也就是当前状态下的内容不管有没有用git命令进行add和commit。ok现在来关注新知识 git status现在我已经修改了index.vue文件但我并没有进行提交输入gbxLAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui(master)$gitstatus On branch master Changes not stagedforcommit:(usegit add file...to update what will be committed)(usegit restore file...to discard changesinworking directory)modified: src/views/index.vue no changes added to commit(usegit addand/orgit commit -a)那我们再新建一个readme.txt在根目录下再输入gbxLAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui(master)$gitstatus On branch master Changes not stagedforcommit:(usegit add file...to update what will be committed)(usegit restore file...to discard changesinworking directory)modified: src/views/index.vue Untracked files:(usegit add file...to includeinwhat will be committed)readme.txt no changes added to commit(usegit addand/orgit commit -a)现在将index.vue的修改添加到暂存区再查看gbxLAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui(master)$gitstatus On branch master Changes to be committed:(usegit restore --staged file...to unstage)modified: src/views/index.vue Untracked files:(usegit add file...to includeinwhat will be committed)readme.txt让我们总结一下git status会显示未被git追踪的新文件修改了但还没假如缓存区的文件已经加入缓存区的文件当然还会显示当前分支的状态包括分支名字和远程仓库的差异。总结写到这里常用的基本结束了你一定发现了在过程中有些命令需要添加文件名但并没有添加依然运行成功了有些反之也可以成功。这个的话后者规定比较宽松前者需要该文件注意是文件与.git文件夹处于并列位置才会自动识别到。但git diff不同它会进行整个根目录的搜索。常用的命令掌握这些其实就够了其他的等遇到了再查也不迟。后续再对分支远程仓库ssh进行补充先写到这。