关注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 --version
git version 2.48.1.windows.1
即安装成功,在菜单栏搜索git,选择git bash。实际上这里跟w+R cmd打开的命令窗口在用这些基础命令时效果没差别。
使用前说明一点,git命令设计哲学是“无消息就是好消息”,所以每次执行成功都会显示空行,不必惊慌。
二、常用命令
1.配置
像所有工具一样,首先设置一些信息,这里只需要
git config --global user.name "名字" //全局设置用户名字
git config --global user.email "邮箱" //全局设置用户邮箱
全局的意思是,在你这台电脑上以后任何被git标记管理的项目,都默认为是上面用户的操作,该设置在连接远程的时候也会被使用。
但实际上这里设置的时候不加双引号也是可以的,但前提内容没有空格,下面命令同样。
已有文件的项目和空项目都可以被git标记管理,这里我以本地项目为例,因为其他教程都讲的是空项目,实际都一样。
2.常用命令
git init // 将当前目录标记为git管理
git add 文件名 // 将文件添加到暂存区
git commit -m "说明" // 将当前暂存区的文件一次性全部提交到当前分支
git log // 查看文件修改记录
git reset --hard HEAD^ // 回退到上一个版本(如果回退到指定的提交,git reflog记录了每次命令)
git reflog // 记录了每次命令
cat 文件名 // 查看当前文件内容,不管你有没有add,commit
git status // 查看当前状态
git reflog // 记录了每次命令
git diff 文件名字 // 查看git的版本和当前文件是否存在差异
因为都是命令窗口,所以cd,mkdir那些操作这里也同样使用,并且在git bash中不能使用ctrl c+v,效果不说了,可以去试试。
都是什么意思呢?以我本地的一个项目为例
首先进入项目的根目录新知识 git init
cd E:\test\ruoyi-ui // 注意这里是正斜杠/不是反斜杠\,这与windows文件资源管理器截然相反。否则会找不到
输入
gbx@LAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui
$ git init
Initialized empty Git repository in E:/test/ruoyi-ui/.git/
意味着成功初始化了一个git仓库,这时候观察你的根目录,打开隐藏文件,观察到.git,还记得吗?
现在仅完成初始化,我们要将项目的所有文件交给git管理,新知识 git add和commit
gbx@LAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui (master)
$ git add . // 将所有文件添加到缓存区
warning: in the working copy of 'bin/build.bat', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'src/api/monitor/job.js', LF will be replaced by CRLF the next time Git touches it
......
gbx@LAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui (master)
$ git commit -m "第一次提交到本地仓库" // 提交到分支
[master (root-commit) 511218a] 第一次提交到本地仓库
292 files changed, 26083 insertions(+)
create mode 100644 .editorconfig
create mode 100644 .env.development
create mode 100644 .env.production
......
有没有发现一个现象,整个过程用时不会超过1s,这就是Git牛逼的地方之一,因为它追踪的是修改,而不是文件,并且不需要联网。
有关上传到缓存区,可以理解你准备要将修改的文件上传到的地方,等待一起提交。意味着你可以:
git add 文件1
git add 文件2
...
git add 文件n
git commit -m "说明"
也可以
git add 文件1
git commit -m "说明"
git add 文件2
git commit -m "说明"
...
这说明缓存区的文件等待被提交,提交一次清空一次。
现在输入新知识 git log
gbx@LAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui (master)
$ git log // 日志记录,查看从诞生到现在的所有修改记录
commit 511218a45f1b6a451d24fae0c2427f7ee3fe5433 (HEAD -> master)
Author: ruciyingjun <19949317733@163.com>
Date: Wed Feb 26 23:23:45 2025 +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)
$ git diff // 查看git版本的文件和当前文件的差异
diff --git a/src/views/index.vue b/src/views/index.vue
index 92a6482..a6d98a3 100644
--- 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)
$ git log
commit ff59015cb5c67531c93dcda56222095d69cd2b45 (HEAD -> master)
Author: ruciyingjun <19949317733@163.com>
Date: Thu Feb 27 00:12:55 2025 +0800
修改了views/index.vue的技术选型为1234
commit 511218a45f1b6a451d24fae0c2427f7ee3fe5433
Author: ruciyingjun <19949317733@163.com>
Date: Wed Feb 26 23:23:45 2025 +0800
第一次提交到本地仓库
如果后悔了,我们就可以进行版本回退,新知识 git reset
git reset --hard HEAD^ // 回退到上一个版本,几个^就回退到几个版本。
git reset --hard HEAD~n // 如果你需要回退的多,且记性还不错,指回退到上n个版本
git reset --hard 提交号 // 如果你需要回退指定的版本,就需要找到它的提交号,还记得这个哈希值吗?
这里回退到上个版本,经过了这么多操作,现在让我们输入git log。
gbx@LAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui (master)
$ git log
commit 511218a45f1b6a451d24fae0c2427f7ee3fe5433 (HEAD -> master)
Author: ruciyingjun <19949317733@163.com>
Date: Wed Feb 26 23:23:45 2025 +0800
第一次提交到本地仓库
便又回去了,当然也可以指定提交号操作,效果一样。
那现在让我们输入新知识 git reflog
gbx@LAPTOP-0PF1NI40 MINGW64 /e/test/ruoyi-ui (master)
$ git reflog // 记录了每次执行成功命令
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)
$ cat src/views/index.vue
<template>
<div class="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)
$ git status
On branch master
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working 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)
$ git status
On branch master
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified: src/views/index.vue
Untracked files:
(use "git add ..." to include in what 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)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged ..." to unstage)
modified: src/views/index.vue
Untracked files:
(use "git add ..." to include in what will be committed)
readme.txt
让我们总结一下git status:
- 会显示未被git追踪的新文件
- 修改了但还没假如缓存区的文件
- 已经加入缓存区的文件
- 当然,还会显示当前分支的状态,包括分支名字和远程仓库的差异。
总结
写到这里,常用的基本结束了,你一定发现了,在过程中有些命令需要添加文件名,但并没有添加依然运行成功了,有些反之也可以成功。
这个的话后者规定比较宽松,前者需要该文件(注意是文件)与.git文件夹处于并列位置才会自动识别到。但git diff不同,它会进行整个根目录的搜索。
常用的命令掌握这些其实就够了,其他的等遇到了再查也不迟。
后续再对分支,远程仓库,ssh进行补充,先写到这。