【Git企业级开发实战指南①】Git安装、基本操作!

开源 0

目录

  • 一、Git是什么?
    • 1.1特点
    • 1.2功能
    • 1.3基本概念
  • 二、Git安装
    • 2.1Ubuntu下安装
    • 2.2Centos下安装Git
  • 三、Git基本操作
    • 3.1创建git本地仓库
    • 3.2配置Git
    • 3.3 工作区&暂存区&版本库
    • 3.4 实操案例
      • 3.4.1添加文件
    • 3.5 修改文件
    • 3.6版本回退
    • 3.7查看历史操作日志
    • 3.7撤销修改
      • 3.7.1工作区还没有add
      • 3.7.2已经add,但没有commit
      • 3.7.3已经add,并且也commit了
    • 3.8删除文件
  • 🍀小结🍀

在这里插入图片描述
在这里插入图片描述

🎉博客主页:小智_x0___0x_

🎉欢迎关注:👍点赞🙌收藏✍️留言

🎉系列专栏:Git企业级开发教程

🎉代码仓库:小智的代码仓库


一、Git是什么?

Git是一个免费和开源的分布式版本控制系统,它可以快速高效地处理从小型到大型项目的所有文件。Git由Linux内核的开发者Linus Torvalds在2005年为了管理Linux内核源代码而创建。Git的主要特点和功能包括:

1.1特点

  1. 分布式:与SVN等集中式版本控制系统相比,Git是分布式的。每个开发者都拥有完整的本地仓库,可以在本地进行提交、分支、合并等操作,无需依赖网络连接或中央服务器。这种特性提高了开发效率,降低了服务器压力,并增强了安全性和灵活性。
  2. 高效性:Git能够高效地处理各种规模的项目,无论是小型项目还是大型项目,都能迅速完成版本控制任务。
  3. 安全性:由于每个开发者都拥有完整的本地仓库,因此即使中心仓库出现问题,开发者也可以通过本地仓库恢复数据,保证了数据的安全性。

1.2功能

  1. 版本控制:Git能够追踪项目从开始到结束的整个过程,记录每次代码修改的内容和时间,并能够回滚到任意历史版本,方便团队协作和代码维护。
  2. 协作开发:Git支持多人协作开发,开发者可以在不同的分支上独立进行代码修改,最后通过合并操作将修改集成到一起。这种方式避免了代码冲突和重复开发的问题。
  3. 分支管理:Git的分支功能非常强大,允许开发者在不影响主干代码的情况下进行代码的修改和开发。每一个分支都是当前代码仓库中的一个拷贝,可以独立进行修改和版本管理。
  4. 代码审查:Git可以与代码审查工具集成,方便开发者在提交代码前进行代码审查,确保代码质量。
  5. 集成与自动化:Git可以与持续集成/持续部署(CI/CD)工具集成,实现自动化的构建、测试和部署流程,提高开发效率。

1.3基本概念

  • 仓库(Repository):Git存储代码和相关历史记录的地方。Git支持本地仓库和远程仓库,本地仓库存储在开发者的计算机上,而远程仓库通常存储在云端,如GitHub、Gitee等。
  • 提交(Commit):将代码的当前状态保存到仓库中的过程。每次提交都会生成一个唯一的SHA-1哈希值,称为提交ID。
  • 分支(Branch):从主分支(或其他分支)上分出来的一条独立的代码线。使用分支可以使得多人协作更加高效,同时也可以保证代码稳定性。
  • 合并(Merge):将两个或多个分支上产生的不同的修改合并为一个代码历史。合并可能会导致冲突,需要手动解决。

二、Git安装

2.1Ubuntu下安装

  1. 检查Ubuntu下有没有安装git
$:git --version-bash: git: command not found //表示没有安装git
  1. 安装Git
sudo apt install -y git
等待安装完毕即可。
  1. 查看Git版本
git --version$:git version 2.34.1

2.2Centos下安装Git

  1. 检查Centos下有没有安装git
$:git --version-bash: git: command not found //表示没有安装git
  1. 安装Git
sudo yum install -y git
等待安装完毕即可。
  1. 查看Git版本
git --version$:git version 1.8.3.1

三、Git基本操作

3.1创建git本地仓库

  1. 先创建一个目录mkdir gitcode进入gitcode目录
  2. 使用git init创建一个本地仓库
    在这里插入图片描述
    创建好git仓库之后本地会有一个.git的隐藏目录
    在这里插入图片描述
    .git目录是用Git用来跟踪管理仓库的,不能手动去修改里面的文件

3.2配置Git

安装好Git之后首先要做的是设置自己的用户名称邮箱

git config [--global] user.name "Your Name"git config [--global] user.email "email@example.com"# 把 Your Name 改成你的昵称# 把 email@example.com 改成邮箱的格式,只要格式正确即可

其中--global是⼀个可选项。如果使用了该选项,表示这台机器上所有的Git仓库都会使用这个配置。如果你希望在不同仓库中使用不同的 namee-mail ,可以不要--global 选项,但要注意的是,执行命令时必须要在仓库里。

查看配置命令:

ubuntu@xiaozhi:~/Desktop/gitcode$ git config -luser.name=小智user.email=2935117143@qq.comalias.st=statuscore.repositoryformatversion=0core.filemode=truecore.bare=falsecore.logallrefupdates=true

删除对应的配置命令为:

git config [--global] --unset user.namegit config [--global] --unset user.email

3.3 工作区&暂存区&版本库

  • ⼯作区:是在电脑上你要写代码或⽂件的目录。
  • 暂存区:英文叫stage或index。⼀般存放在 .git 目录下的index文件(.git/index)中,我们
    把暂存区有时也叫作索引(index)。
  • 版本库:又名仓库,英文名repository 。工作区有⼀个隐藏目录.git ,它不算工作区,而是Git的版本库。这个版本库里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以还原
    在这里插入图片描述
  • 左侧为工作区,右侧为版本库,版本库中最重的是stage(暂存区)。
  • 创建git的版本库时,git会默认给我们创建一个唯一的master分支,以及一个指向master分支的指针HEAD
  • 当在工作区修改文件时执行git add命令,则会更新暂存区的文件树索引
  • 当执行git commit命令时,master分支会相应进行更新(此时暂存区的文件树索引内容才被真正写入版本库中)

通过新建或粘贴进目录的文件,并不能称之为向仓库中新增文件,而只是在工作区新增了文件。必须要通过使用git addgit commit命令才能将文件添加到仓库中进行管理!!!

3.4 实操案例

3.4.1添加文件

  • 添加一个文件或多个文件到暂存区:git add [file1] [file2]
  • 添加指定目录,包括子目录到暂存区:git add [dir]
  • 添加当前目录下所有文件改动到暂存区:git add .

在使用git commit 命令将暂存区中的内容添加到本地仓库中:

  • 提交暂存区中所有内容到本地仓库中:git commit -m "message"
  • 提交暂存区中的指定文件到本地仓库中:git commit [file1] [file2] -m "message"

git commit后面的-m选项,要加上本次提交的message(描述本次提交),这部分不能省略。用来记录我们提交细节。
在这里插入图片描述
git log可以查看历史提交信息,并且可以查看我们每次commit的日志信息。
也可以格式化打印输出:

git log --pretty=oneline

在这里插入图片描述
这里的ceea989e0ba7254e1bf2cafc8c1619257511da14是每一次commit的版本号,是通过特殊的哈希算法(SHA-1)算出来的数字。用于唯一标识一个提交

查看.git中的文件结构
在这里插入图片描述

  • index是我们的暂存区,add之后的内容都添加到这里。
  • HEAD是我们的默认指向master分支的指针。
ubuntu@xiaozhi:~/Desktop/gitcode$ cat .git/HEAD ref: refs/heads/master

默认的master分支就是:

ubuntu@xiaozhi:~/Desktop/gitcode$ cat .git/refs/heads/master ceea989e0ba7254e1bf2cafc8c1619257511da14

master指向的就是我们最新提交到本地仓库的commit ID

  • objects 是 Git 的对象库,里面包含了创建的各种版本库对象及内容。当执行git add命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,这个新对象就位于 .git/objects 目录下。
ubuntu@xiaozhi:~/Desktop/gitcode$ ls .git/objects/16  c7  ce  info  packubuntu@xiaozhi:~/Desktop/gitcode$ ls .git/objects/ce/ea989e0ba7254e1bf2cafc8c1619257511da14

查找object时要将commit ID分为两部分查看,前2位时文件夹名称,后38位是文件名称。
找到这个文件一般我们不能直接去cat这个文件,因为这个文件是通过哈希算法加密过的文件。我们可以使用Git给我们提供的指令git cat-file -p + (commid ID)来查看:

ubuntu@xiaozhi:~/Desktop/gitcode$ git cat-file -p ceea989e0ba7254e1bf2cafc8c1619257511da14tree c730883a3e1d9acd478bcc8e4ce4a2d144e78256author 小智 <2935117143@qq.com> 1722834791 +0800committer 小智 <2935117143@qq.com> 1722834791 +0800add file1

查看上面输出中tree后面的commit ID:

ubuntu@xiaozhi:~/Desktop/gitcode$ git cat-file -p c730883a3e1d9acd478bcc8e4ce4a2d144e78256100644 blob 16372721c888812697c2f880365b83e1db033a3f	file1

再来看看对应file1里面的commit ID:

ubuntu@xiaozhi:~/Desktop/gitcode$ git cat-file -p 16372721c888812697c2f880365b83e1db033a3fI am file1!#这是我们对file1做的修改!!被git记录了下来!!

3.5 修改文件

Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改而非文件。什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。

ubuntu@xiaozhi:~/Desktop/gitcode$ echo "aaaaaaaaaaaa" >>file1 ubuntu@xiaozhi:~/Desktop/gitcode$ cat file1 I am file1!aaaaaaaaaaaa

git status查看当前仓库状态:
在这里插入图片描述
上面告诉我们file1文件已经被修改但是没有添加和提交。
git diff [file]查看暂存区和工作区中的文件差异,现实的格式是Unix通用的diff格式,也可以通过git diff HEAD -- [file]来查看版本库和工作区的文件差异。

ubuntu@xiaozhi:~/Desktop/gitcode$ git diff file1diff --git a/file1 b/file1index 1637272..e0eef4b 100644--- a/file1+++ b/file1@@ -1 +1,2 @@ I am file1!+aaaaaaaaaaaaubuntu@xiaozhi:~/Desktop/gitcode$ git diff HEAD -- file1diff --git a/file1 b/file1index 1637272..e0eef4b 100644--- a/file1+++ b/file1@@ -1 +1,2 @@ I am file1!+aaaaaaaaaaaa

3.6版本回退

执行 git reset 命令用于回退版本,可以指定退回某一次提交的版本。回退的本质是将版本库中的内容进行回退,工作区或暂存区是否回退由命令参数决定:

git reset 命令语法格式为: git reset [--soft | --mixed | --hard] [HEAD]

  • --mixed 为默认选项,使用时可以不用带该参数。该参数将暂存区的内容退回为指定提交版本内容,工作区文件保持不变。
  • --soft 参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。
  • --hard 参数将暂存区与工作区都退回到指定版本。切记工作区有未提交的代码时不要用这个命令,因为工作区会回滚,你没有提交的代码就再也找不回了,所以使用该参数前一定要慎重。

HEAD 说明:

  • 可直接写成 commit id,表示指定退回的版本。
  • HEAD 表示当前版本。
  • HEAD^ 上一个版本。
  • HEAD^^ 上上一个版本。
  • 以此类推…

可以使用 ~数字表示:

  • HEAD~0 表示当前版本。
  • HEAD~1 上一个版本。
  • HEAD~2 上上一个版本。
  • 以此类推…

当然,这里是一个表格,帮助你更好地理解 git reset--soft--mixed--hard 这三种模式的区别:

参数版本库(HEAD指针)暂存区(Index)工作区(Working Directory)
--soft回退到指定提交保持不变保持不变
--mixed(默认选项)回退到指定提交回退到指定提交保持不变
--hard (慎用)回退到指定提交回退到指定提交回退到指定提交

示例

假设有以下提交历史:

commit a1b2c3d (HEAD -> master)commit e4f5g6hcommit i7j8k9l

如果你想回退到 e4f5g6h

git reset --hard e4f5g6h

使用 git reset --hard 命令后,提交历史将变为:

commit e4f5g6h (HEAD -> master)commit i7j8k9l

不同参数对工作区和暂存区的影响:

  • git reset --mixed e4f5g6h

    • 版本库:回退到 e4f5g6h
    • 暂存区:更新为 e4f5g6h 的内容
    • 工作区:保持不变
  • git reset --soft e4f5g6h

    • 版本库:回退到 e4f5g6h
    • 暂存区:保持不变
    • 工作区:保持不变
  • git reset --hard e4f5g6h

    • 版本库:回退到 e4f5g6h
    • 暂存区:更新为 e4f5g6h 的内容
    • 工作区:更新为 e4f5g6h 的内容

恢复可以通过部分的commit ID来恢复!

3.7查看历史操作日志

使用git reflog可以查看历史操作日志

ubuntu@xiaozhi:~/Desktop/gitcode$ git reflog 787ed68 (HEAD -> master) HEAD@{0}: commit: md file1ceea989 HEAD@{1}: commit (initial): add file1

git reflog记录了对本地仓库的所有操作日志,包括那些已经丢失或不可见的操作。通过 git reflog,可以找到并恢复意外丢失的提交。
可以通过git reset --hard HEAD@{1}或者git reset --hard ceea989来恢复到部分commit ID为ceea989的提交。

在 Git 中,版本回退速度非常快,因为 Git 在内部使用了一个指向当前分支(如 master)的 HEAD 指针。refs/heads/master 文件中保存了当前 master 分支的最新 commit ID。当我们进行版本回退时,Git 只是将 refs/heads/master 中存储的 commit ID 更新为特定的版本。可以简单理解成如下示意图:

在这里插入图片描述
通过更新 refs/heads/master 文件中的 commit ID,Git 可以快速地实现版本回退,而不需要实际更改文件的内容。这种方式使得 Git 的版本回退操作非常高效。

3.7撤销修改

3.7.1工作区还没有add

可以使用 git checkout -- [file] 命令让工作区的文件回到最近一次 addcommit 时的状态。要注意 git checkout -- [file] 命令中的 -- 很重要,切记不要省略。

ubuntu@xiaozhi:~/Desktop/gitcode$ cat file1 I am file1!ubuntu@xiaozhi:~/Desktop/gitcode$ git reset --hard 787ed68HEAD 现在位于 787ed68 md file1ubuntu@xiaozhi:~/Desktop/gitcode$ cat file1 I am file1!aaaaaaaaaaaaubuntu@xiaozhi:~/Desktop/gitcode$ echo "cccccc" >> file1 ubuntu@xiaozhi:~/Desktop/gitcode$ cat file1 I am file1!aaaaaaaaaaaaccccccubuntu@xiaozhi:~/Desktop/gitcode$ git checkout -- file1ubuntu@xiaozhi:~/Desktop/gitcode$ cat file1 I am file1!aaaaaaaaaaaa

在这个命令中:

  • git checkout 是用于检出分支或恢复文件的命令。
  • -- 用于明确告诉 Git 后面的内容是文件名而不是分支名。这可以防止错误地检出到某个分支。
  • file1 是你想恢复的文件名。

注意事项

  1. 慎重使用git checkout -- [file] 命令会丢失你在文件中的所有未保存的修改,因此使用前请确保你真的不需要这些修改。
  2. 区分分支和文件-- 符号非常重要,因为它能让 Git 清楚地知道你指的是文件而不是分支名。
  • git reset 用于回退版本,根据参数不同可以回退到不同的状态(soft、mixed、hard)。
  • git checkout -- [file] 用于撤销工作区中文件的修改,使其恢复到最近一次 git addgit commit 时的状态。

3.7.2已经add,但没有commit

如果已经使用 git add 将文件添加到暂存区,但还没有进行 commit,你可以通过以下方法撤销这些更改:

ubuntu@xiaozhi:~/Desktop/gitcode$ cat file1 I am file1!aaaaaaaaaaaaubuntu@xiaozhi:~/Desktop/gitcode$ echo "cccccccc" >>file1 ubuntu@xiaozhi:~/Desktop/gitcode$ cat file1 I am file1!aaaaaaaaaaaaccccccccubuntu@xiaozhi:~/Desktop/gitcode$ git reset HEAD file1 #将暂存区恢复至HEAD指向的master版本重置后取消暂存的变更:M	file1ubuntu@xiaozhi:~/Desktop/gitcode$ git status #查看分区状态位于分支 master无文件要提交,干净的工作区ubuntu@xiaozhi:~/Desktop/gitcode$ cat file1 I am file1!aaaaaaaaaaaaccccccccubuntu@xiaozhi:~/Desktop/gitcode$ git checkout -- file1 #再来恢复工作区ubuntu@xiaozhi:~/Desktop/gitcode$ git status 位于分支 master无文件要提交,干净的工作区ubuntu@xiaozhi:~/Desktop/gitcode$ cat file1 I am file1!aaaaaaaaaaaa

3.7.3已经add,并且也commit了

  • 如果还没有将本地版本库推送到远程,可以安全地使用 git reset --hard HEAD^ 来回退到上一个提交。这样本地的最新提交会被丢弃,工作目录会恢复到上一个提交的状态。

3.8删除文件

ubuntu@xiaozhi:~/Desktop/gitcode$ lsfile1  file2ubuntu@xiaozhi:~/Desktop/gitcode$ rm file2 ubuntu@xiaozhi:~/Desktop/gitcode$ git status 位于分支 master尚未暂存以备提交的变更:  (使用 "git add/rm <文件>..." 更新要提交的内容)  (使用 "git restore <文件>..." 丢弃工作区的改动)	删除:     file2修改尚未加入提交(使用 "git add" 和/或 "git commit -a")ubuntu@xiaozhi:~/Desktop/gitcode$ 

在这种情况下,工作区和版本库不一致,需要删除文件。有两种可能性:

  • 确实需要从版本库中删除该文件。
  • 不小心误删了文件。

对于第二种我们可以直接通过git checkout -- file2来进行恢复。

ubuntu@xiaozhi:~/Desktop/gitcode$ git checkout -- file2ubuntu@xiaozhi:~/Desktop/gitcode$ lsfile1  file2

对于第一种则需要使用git rm将暂存区和工作区中删除,并且还需要commit

ubuntu@xiaozhi:~/Desktop/gitcode$ git rm file2 rm 'file2'ubuntu@xiaozhi:~/Desktop/gitcode$ git status 位于分支 master要提交的变更:  (使用 "git restore --staged <文件>..." 以取消暂存)	删除:     file2ubuntu@xiaozhi:~/Desktop/gitcode$ git commit -m "delete file2"[master 5c846bd] delete file2 1 file changed, 1 deletion(-) delete mode 100644 file2

这样文件就从版本库中删除了。

🍀小结🍀

今天我们学习了"Git安装、基本操作相信大家看完有一定的收获。种一棵树的最好时间是十年前,其次是现在! 把握好当下,合理利用时间努力奋斗,相信大家一定会实现自己的目标!加油!创作不易,辛苦各位小伙伴们动动小手,三连一波💕💕~~~,本文中也有不足之处,欢迎各位随时私信点评指正!
在这里插入图片描述

也许您对下面的内容还感兴趣: