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