Git版本控制工具(一)

一、Git安装

Linux-centos:

安装命令:

shell 复制代码
sudo yum -y install git

检查版本:

安装完成后,查看git版本,有版本信息,说明安转成功。

shell 复制代码
git --version

Linux-ubuntu:

安装命令:

shell 复制代码
sudo apt-get install git -y

检查版本:

复制代码
git --version

Windows:

打开cmd,输入一下安装命令:

shell 复制代码
winget install --id Git.Git -e --source winget

验证:git --version

二、Git基本操作

1.创建本地仓库

命令:

shell 复制代码
git init

当前目录下,会创建出一个.git隐藏文件。里面包含了 Git 用来跟踪和管理文件修改历史的所有核心数据和细节,不能修改里面的任何内容。

2.配置git

为什么要配置?

标识每一次代码提交(commit)的作者身份,表明是谁提交的代码。

如何配置?

全局配置:

在整个Linux机器上都使用该配置信息作为作者身份。

shell 复制代码
git config --global user.name "Your name"
git config --global user.email "email@example.com"
局部配置:

只对当前仓库生效。

shell 复制代码
git config --global user.name "Your name"
git config --global user.email "email@example.com"
确认是否已配置好?
shell 复制代码
git config -l

有作者身份标识,说明就已配置好。

删除配置:
shell 复制代码
git config [--global] --unset user.name
git config [--global] --unset user.email

加上--global,就是删除机器上所有的git身份标识。

3.工作区、暂存区、版本库

工作区:

写代码界面的左侧目录就是工作区。

.git不属于工作区,属于Git的版本库。

暂存区:

英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

版本库:

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

工作区是本地写代码的地方,写完代码后git add [要提交的文件],将工作区内容的修改(新增、删除、修改)添加至版本库(.git)的暂存区,修改的工作区内容会写入版本库的一个新的git对象中,有许多的新的git对象创建,形成对象库(objects),暂存区:储存的就是git对象的指针,然后 git commit -m "描述本次修改的信息",将暂存区内容提交至当前所在分支(git branch查看)下,这一步才会被正式写到版本库中,成为一条可以随时追踪和还原的历史记录,最后git push origin + 当前的分支,将修改的代码推送至远程仓库。

4.添加文件到版本库

添加文件到版本库必须经历git add和git commit后,才会被正式写入到版本库中。

为什么要有git add 和git commit 操作,只有git add 不也可以吗?

理论上可以,但是这样效率很低。

使用git add 和git commit 操作,可以多次修改不同的文件,分批使用 git add 把它们放到暂存区,最后确认无误后,再用 git commit 一次性把它们作为一个完整的版本提交上去。

1)添加到暂存区

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

2)提交到版本库

  • git commint -m "描述本次修改的信息"
    描述信息尤为重要,描述本次做了哪些修改,可以更好的对历史版本管理。

3)查看历史提交记录

  • git log:显示从近到远的提交日志。
  • git log --pretty=oneline:显示更简洁的提交日志。

    可看到提交日志变简洁了,每条日志包含commit id、提交描述信息。
    注:commit id是用SHA1计算的一个非常大的数字,并用16进制表示了出来。

查看.git文件

GIt就是根据.git隐藏文件做版本管理,里面包含了 Git 用来跟踪和管理文件修改历史的所有核心数据和细节

其中 HEAD 是 Git 中一个指针,它表示当前所在的位置,可以查看HEAD是什么?可以知道它指向当前分支master,而当前分支maseter中的内容是什么呢?查询得知是最近一次提交的commit id。

commit id就是对象库中的一个git对象的索引。

通过commit id查看git对象中内容:

命令:

复制代码
git cat-file -p commit id
  • 查看最新commit id所指向git对象中的内容:

    里面有:上一次提交的commit id,和tree 对象,还有作者是谁、是谁提交的,tree 对象是 Git 中保存目录结构的对象,它记录"这个目录里面有哪些文件和子目录"。通过进入tree对象就能一步步的找到当前版本中所有的信息。
  • 查看tree对象中的内容:


    管理了本目录下的文件和目录。

    由于最新一次提交,正是改变了README.md文件中的内容。所以我们通过.git版本库追溯到上一个版本的README.md。

    可以发现,最新一次的提交,正是删除了README.md文件中的一些信息。追溯到上一个版本后,还原了之前删除的信息。

5.状态查询:

命令 :git status

作用 :查看当前仓库的状态。告诉我们当前在哪个分支、哪些(工作区)文件被修改了、哪些文件已经暂存、哪些文件还没有提交。

Git status中的常见状态:

状态 含义
modified 文件被修改
untracked 新文件,Git未跟踪
staged 已进入暂存区
nothing to commit 没有需要提交的内容
ahead 本地领先远程
behind 本地落后远程

6.显示差异:

git diff 是 Git 的"代码变化查看器",用于在提交前确认自己改了什么。

1)显示目前工作区和暂存区之间的差异:

命令 :git diff [文件名]

作用 :查看具体代码变化。

@@ -307,6 +307,14 @@ namespace chat_server {,这是 diff 定位信息,格式:@@ -旧文件位置,旧代码数量 +新文件位置,新代码数量 @@

解释:

复制代码
-307,6
旧版本:
从第307行开始
显示6行


+307,14
新版本:
从第307行开始
显示14行

2)显示暂存区和commit之间的差异

命令:git diff --cached

3)显示当前工作区和最新commit之间的差异

命令:git diff HEAD

4)比较两个版本差异

命令:git diff commit1 commit2

5)比较两个分支

命令:git diff 分支1 分支2

7.版本回退(也可回退到当前版本):

应用场景 :常用于撤销 commit、版本回退、重新整理提交;

命令 :git reset [--soft | --mixed | --hard] [HEAD]

HEAD说明:

  • 可以写commit id,表示指定退回的版本。
  • HEAD表示当前版本
  • HEAD^表示上一个版本
  • HEAD^^表示上上一个版本,以此类推
  • HEAD~0表示当前版本
  • HEAD~1表示上一个版本
  • HEAD~2表示上上一个版本,以此类推
    注:
  • --hard慎用,回退后,之前的所有修改代码将会丢失。
  • --mixed是默认选项
  • 如果执行了git reset --hard commit_id,后悔了怎么办?
    使用git reflog命令查看本地的每一次命令。

    可以使用局部的commit id,也可以回退。
版本回退的本质:

修改分支(master)指向的commit id,即完成了版本回退。

8.撤销修改

我们在开发时,发现自己写的代码很烂,或写出了很多新的BUG,想恢复到上一个版本,重新开发,这时候就需要用到撤销修改了。

撤销修改对应了三种情况:

  • 只在工作区写了代码,没有提交至暂存区
  • 在工作区写了代码,提交到了暂存区,但是没有提交到版本库
  • 在工作区写了代码,提交到了暂存区,也提交到了版本库
    解决方式 :

9.删除版本库中的文件

对于已经提交到版本库中的文件,使用rm filename,只能删除当前工作区中的文件,版本库中的文件并没有删除。

需要将删除的文件经过git add 删除的文件名,再git commit -m "delete filename"后,版本库的文件才被删除。

或则使用git rm 删除的文件名,这条命令帮我们做了两件事,一是在工作区中删除文件,二是在暂存区中删除文件。然后再执行git commit -m "delete filename",版本库的文件才被删除。

最后git push远程同步删除文件。

相关推荐
小小小米粒10 小时前
重置本地git
大数据·git·elasticsearch
鶴哥只手遮天16 小时前
第 8 章 工作区与检出:unpack-trees 与并行 checkout
git
xing-xing18 小时前
git 相关命令总结
git
A-刘晨阳20 小时前
GitLab + ArgoCD 实现 Kubernetes GitOps 自动化部署
运维·人工智能·git·kubernetes·自动化·云计算·argocd
ControlRookie1 天前
SyncBridge:一个 CODESYS 工程与 AI 之间工程师级的同步工具
git·ai编程·codesys·工业软件·controlrookie
鬼手点金2 天前
opencode-性能优化建议
java·人工智能·git·自动化·nanogpt
网络毒刘2 天前
开源 Aider 工作流实战:Git 提交驱动的 AI 结对,与 Cursor 何时互补
git·ai编程·cursor·aider
HRTOS2 天前
HRTOS 4.0 将长期维护:为什么版本号不再频繁变化
经验分享·git·单片机·51单片机
驭渊的小故事3 天前
linux 基础命令 + git 仓库创建和配置命令
linux·git