Git 知识点

简介: Git 知识点

Git 知识点


[TOC]


1.CentOS安装Git

1.1 YUM源或者第三方源IUS源安装

# 卸载自带Git
yum remove -y git
yum install -y epel-release    
# centos6配置IUS源 
rpm -ivh https://centos6.iuscommunity.org/ius-release.rpm  
# centos7配置IUS源
rpm -ivh https://centos7.iuscommunity.org/ius-release.rpm 
yum list git2u    
yum install -y git2u    
git --version  

# windows版本升级到最新版本
git update-git-for-windows

1.2 CentOS安装最新版Git(源码安装)

# 安装第三方依赖
sudo yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel

# 为了能够添加更多格式的文档(如 doc, html, info),你需要安装以下的依赖包
sudo yum install -y asciidoc xmlto docbook2X
# 如果使用的是 Fedora/RHEL/RHEL-衍生 系统,需要执行
sudo ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi

# 下载源码,解压后编译安装
wget https://codeload.github.com/git/git/tar.gz/v2.18.0
tar zxvf git-2.18.0.tar.gz && cd git-2.18.0
sudo make configure
./configure --prefix=/usr
sudo make all doc info && sudo make install install-doc install-html install-info 

# 现在已经可以用git命令了,用git把Git项目仓库克隆到本地,以便日后随时更新
git clone git://git.kernel.org/pub/scm/git/git.git

1.3 配置全局用户名和邮箱

git config --global user.name "顾小兔"
git config --global user.email 524343695@qq.com

1.4 安装中文汉化包

Windows下Git汉化包下载

下载后解压到/mingw64/share即可,同时Git Bash设置如下:


显示效果:

2. Git命令

2.1 git常用命令

# 初始化Git本地仓库
git init

# 查看Git项目状态(工作区、暂存区)
git status

# 查看Git项目日志记录(本地仓库,--oneline:显示在一行(提交哈希值,注释),看不到reset回退之后的记录
git log [--oneline]
# 显示效果
038b811 (HEAD -> master) 增加d.txt
a09f72b 增加c.txt
351e5ec 增加a.txt
b1baca7 增加b.txt

# 也可以使用git reglog,显示的HEAD@{数字},表明HEAD指针移动到当前指针需要几步,回退后仍然可以看到所有的版本记录 方便查看每个操作步骤所在的版本,可以根据版本号自由前进后退
git reflog
# 显示效果
038b811 (HEAD -> master) HEAD@{0}: reset: moving to 038b811
9723e41 HEAD@{1}: reset: moving to HEAD
9723e41 HEAD@{2}: commit: 第二次修改d.txt
23a53b3 HEAD@{3}: commit: 修改d.txt
038b811 (HEAD -> master) HEAD@{4}: commit: 增加d.txt
a09f72b HEAD@{5}: commit: 增加c.txt
351e5ec HEAD@{6}: commit: 增加a.txt
b1baca7 HEAD@{7}: commit (initial): 增加b.txt

# 远程服务器Git仓库克隆项目到本地仓库
git clone <远程仓库> [文件路径]

# 将工作区的文件(新建或修改)增加到暂存区进行追踪
git add <文件>

# 暂存区的文件修改后,用git add <文件>更新暂存区文件
git add <文件>

# 暂存区的文件修改后直接提交(但是跳过了暂存区,所以无法撤销,文件无法回退到工作区)
git commint -am 'comment'

# 暂存区的文件修改后,用git checkout -- <文件>丢弃修改
git checkout -- <文件>

# 删除暂存区的文件,-r:递归删除,-f:强制删除
git rm -rf <文件>

# 取消文件暂存,文件返回工作区中
git rm --cached <文件>

# 删除工作区的文件,-r:递归删除,-f:强制删除
rm -rf <文件>

# Git项目提交到本地仓库
git commit -m 'comment' <文件>

# 本地仓库中项目推送到原车给服务器Git仓库
git push

# 从远程服务器Git仓库更新项目到本地仓库
git pull

2.2 回退历史版本命令

2.2.1 git reset --soft 仅仅在本地仓库移动HEAD指针,但是本地文件还是之前最新状态

2.2.2 git reset --mixed 本地仓库移动HEAD指针,同时重置暂存区

2.2.3 git reset --hard 本地仓库移动HEAD指针,同时重置暂存区和工作区

# 重置HEAD指针到某个历史版本,可以在所有历史版本中前进或后退,一般与git reflog配合使用
git reset --hard <哈希值>
# 重置HEAD指针到某个历史版本,只能后退,n表示后退n步
git reset --hard HEAD~n
# 重置HEAD指针到某个历史版本,只能后退,一个^表示后退一步,n个^表示后退n步
git reset --hard HEAD^^^

2.2.4 各种误删文件情况

1)在误删文件同时提交到本地库后,可以通过git reset --hard <文件删除前的版本哈希值>来找回误删的文件
git reset --hard <文件删除前的版本哈希值>
2)添加到暂存区的误删除文件找回,解决办法:hard方式重置本地库HAAD指针,让暂存区,工作区和本地库保持一致
git add <文件>
git commit -m '增加文件' <文件>
rm -rf <文件> # 工作区删除文件
git add <文件> # 将删除操作变更提交到暂存区
git status # 查看工作区和暂存区状态
位于分支 master
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存) 
        删除:     e.txt
git reset --hard HEAD # :hard方式重置本地库HAAD指针,让暂存区,工作区和本地库保持一致

总结:

==前提,删除前,文件存在于本地库。==

   git reset --hard [HEAD指针位置]
  • 删除操作已经提到本地库,HEAD指向历史版本位置
  • 删除操作尚未提交本地库,HEAD指向当前版本位置(默认HEAD)

2.3 git diff <文件> 文件比较命令

# 修改e.txt后比较(默认和暂存区比较)
git diff <文件>
# -:表示删除的行,+:表示增加的行
diff --git a/e.txt b/e.txt
index 384c816..f0ebe0a 100644
--- a/e.txt
+++ b/e.txt
@@ -1 +1,5 @@
-eeeeee
+
+
+1234434
+1345454
+dfda

# 增加到暂存区后,显示没有任何修改
git diff <文件>

# 如果和本地库比较,则和之前一样显示删除增加修改的行
git diff HEAD <文件>

Tips:如果某行同时又删除和增加或者修改操作。会把原有的那行用-表示删除,再把更新好的结果用+表示增加,如以下效果

-dfda
+dfdd

结论:不带文件名就是比较多个文件

git diff <文件> # 工作区和暂存区比较
git diff [本地库历史版本哈希值] <文件> # 工作区和本地库比较

2.4 git branch 分支管理

2.4.1 git branch基础命令

git branch <分支名> # 创建分支
git checkout <分支名> # 切换分支
git branch -v # 查看所有分支,前面*标识当前所在分支

2.4.2 合并分支

  1. 切换到接受修改的分支的上(被合并,增加新内容)

    git checkout <被合并的分支名>
  2. 执行合并命令git merge

    git merge <有新内容的分支名>
    
    # 查看当前HEAD指针指向版本
    git log --oneline
    14b5d83 (HEAD -> xiaotu) 修改c.txt
    5a466a3 (master) 增加e.txt
    9723e41 第二次修改d.txt
    23a53b3 修改d.txt
    038b811 增加d.txt
    a09f72b 增加c.txt
    351e5ec 增加a.txt
    b1baca7 增加b.txt 
  3. 解决冲突

    # 当前分支合并另一分支
    git merge <分支名>
    自动合并 b.txt
    冲突(内容):合并冲突于 b.txt
    自动合并失败,,修正冲突然后提交修正的结果。
    
    # 查看冲突文本,<<<<<<HEAD:当前分支内容,=======:分隔符,>>>>>>>xiaotu:分支xiaotu中的内容
    cat <文件>
    <<<<<<< HEAD
    ffffff
    =======
    ccccc
    >>>>>>> xiaotu
    
    # 修改b.txt,删除fffff等文本
    cat <文件>
    ccccc
    # 提交到本地库,注意合并过程中不能单个文件部分提交
    git add <文件>
    git commit -m 'comment'
    
    # 再次合并
    git merge <分支名>
    # 显示合并成功
    Already up to date.

3. Git的文件管理机制

3.1 Git文件系统简介

     Git把数据看作小型文件系统的一组快照,每次提交更新时Git都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git不会重新存储该文件,而是只保留一个链接指向之前存储的文件。所以Git的工作方式可以称之为快照流。

3.2 Git的“提交对象”

提交对象以及父对象形成的链条

==切换分之前,master和testing指向当前最新版本,同时HEAD指向分支testing==

graph RL;
    head[HEAD] -->testing[testing]
    master[master] -->B[f30ab]
    testing[testing] -->B[f30ab]
    B[f30ab] -->C[34ac2]
    C[34ac2] -->D[98ca9]

==切换分之前,testing更新提交后指向最新版本,master依然指向某个历史版本==

graph RL;
    head[HEAD] -->testing[testing]
    master[master] -->B[f30ab]
    testing[testing] -->A[87ab2]
    A[87ab2] -->B[f30ab]
    B[f30ab] -->C[34ac2]
    C[34ac2] -->D[98ca9]

==切换分之后,HEAD切换指向master主分支==

graph RL;
    head[HEAD] -->master[master]
    master[master] -->B[f30ab]
    testing[testing] -->A[87ab2]
    A[87ab2] -->B[f30ab]
    B[f30ab] -->C[34ac2]
    C[34ac2] -->D[98ca9]

附录:Hash算法简介

哈希是一系列的加密算法,各个不同的哈希加密算法虽然强度不同,但是有以下几个共同点:

  • 不管输入的数据的数据量多大,输入同一个哈希算法,得到的加密长度固定。
  • 哈希算法确定,输入数据确定,输出的数据结果唯一。
  • 哈希算法确定,输入数据变化,数据的数据通常变化很大。
  • 哈希算法不可逆

==Git底层采用的是SHA-1算法==

哈希算法可以被用来验证文件。原理如下图所示:

目录
相关文章
|
7天前
|
云安全 人工智能 运维
阿里云联动百位企业安全专家,共识Agent防御最佳实践
当Agent成为新员工,你的安全边界在哪里?
1922 6
阿里云联动百位企业安全专家,共识Agent防御最佳实践
|
5天前
|
存储 人工智能 关系型数据库
阿里云AI产品与云产品最新组合套餐:Token Plan、AI coding及云服务器和建站等组合优惠价
阿里云推出全新“算力+模型+应用”一站式云与AI组合套餐活动,覆盖从个人开发者到中大型企业的全场景需求。核心亮点为分三档定价的Token Plan订阅服务,支持Qwen3.8-Max-Preview大模型调用,错峰时段最低可享0.2折优惠。活动同步推出AI Coding、智能体部署、云电脑托管、0代码建站等十余类场景化组合,搭配99元/年的普惠云服务器、88元/年的入门数据库等经典特惠产品,还为企业提供1V1定制化AI转型方案,大幅降低了不同用户群体拥抱AI的技术门槛与采购成本。
652 111
|
15天前
|
人工智能 JSON 安全
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
阿里云AI安全产品联动防御Fastjson攻击
2556 13
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
|
7天前
|
人工智能 弹性计算 数据库
阿里云优惠券种类解析:主要券种区别和适用群体及领取和使用指南
2026年阿里云构建了覆盖全用户的七类优惠券,本文逐一拆解了每类优惠券的核心规则、适用人群与使用技巧:大促限定的阶梯满减券分个人、企业双通道,最高可减800元;学生专属300元无门槛券支持全品类通用;按量付费用户可参与消费达标返券形成循环优惠;新用户有低门槛专享满减券尝鲜;老用户可领取系统自动发放的随机福利券;中大型企业迁云可申请最高100万元的专项补贴;云产品通用券还能在活动价基础上实现折上折。不同身份、不同采购场景的用户均可通过精准匹配对应优惠券,最大化享受优惠力度。
462 110
阿里云优惠券种类解析:主要券种区别和适用群体及领取和使用指南
|
13天前
|
人工智能 前端开发 Linux
Codex 桌面版安装 + CC Switch 接入第三方 API 完整教程(2026 最新)
2026最新教程:手把手教你安装Codex桌面版,通过CC Switch v3.17.0一键接入Fenno等国产API(兼容OpenAI Responses格式),跳过账号登录,完整启用代码审查、多步任务与上下文感知功能。零基础友好,全程图文实操。(239字)
1624 2
|
15天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max-Preview深度全解析:2.4万亿参数旗舰MoE模型+Token Plan限时优惠完整落地指南
2026年7月,全新旗舰级混合专家大模型Qwen3.8-Max-Preview正式开放抢先体验,作为通义千问Qwen3系列规格最高、综合推理能力顶尖的新一代模型,该模型总参数量达到2.4万亿(2.4T),是当前线上可调用的原生多模态旗舰模型,综合推理水准对标海外顶级Fable 5模型,在复杂工程开发、长文档深度分析、多步骤智能体自治、跨境多语言创作、海量数据挖掘五大高难度业务场景实现跨越式性能提升。
1428 2
|
17天前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
1500 55
|
2天前
Qoder 一周年 × Qwen3.8-Max 正式上线,多重好礼限时领
8月3日,Qwen3.8-Max 正式上线Qoder,迎来Qoder一周年。新老用户可领800次免费调用,下单再赠2000次;夜间(22:00–08:00)调用5折;邀请好友双方得积分与调用额度。
250 0