git:安装+命令行(创建仓库+版本回退+撤销/删除操作)

 


 

git安装

安装系统:centos7.9

一、yum安装git

# 安装
yum install -y git

# 查看版本
git version

# git version 1.8.3.1

 

二、源码安装最新版本git

1.下载最新版本的git地址:https://mirrors.edge.kernel.org/pub/software/scm/git/

#wget -O /root/git-2.24.4.tar.gz https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.24.4.tar.gz

2.编译安装、配置环境变量

复制代码
# 安装依赖
yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

# 解压,并切换到解压目录
tar -zxf /tmp/git-2.24.4.tar.gz -C /tmp/

cd /tmp/git-2.24.4

# 预编译,检验相关依赖,设置安装路径
./configure --prefix=/usr/local/git

# 编译安装
make && make install
复制代码

3.配置环境变量

复制代码
# 删除已有的 git(即之前可能Yum下载过的)
yum remove git

# 配置环境变量
vim /etc/profile

# GIT_HOME
GIT_HOME=/usr/local/git
export PATH=$PATH:$GIT_HOME/bin

# 刷新
source /etc/profile

#验证
git --version
git version 1.8.3.1
复制代码

 

安装系统:Windows

网址:Git - Downloading Package (git-scm.com)

然后一步一步点击,默认安装就可以了。安装好后,在桌面鼠标右键会出现两个新的选择(一个是Git  bash、一个是Git  GUI),

选择Git GUI后,会出现一个bash界面,其中的常用命令就是bash命令+git命令,界面如图。

 使用方式都一样,底层都是Git命令来实现。

 


 

Git命令使用

一、使用用户和邮箱标识。

1.在Git软件安装完毕后,需要做的第一步就是需要以"用户名"和"邮箱"来做一个标识,因为git是一个分布式版本控制系统,需要以此来区分。

 

 

 其中:

复制代码
这时引出的命令
git config  global/system/local  '用户'  '邮箱'
    --global            使用全局配置文件(用户级别,即该机器上的所有git仓库都会使用这个配置,优先级次之)
    --system            使用系统配置文件(系统级别,优先级最低)
    --local             使用本地仓库配置文件(仓库级别,优先级最高)

实例:
--global全局(不用进入到某个仓库再执行,其配置文件在"~/.gitconfig")
#git config --global user.name ""
#git config --global user.email ""

--local(进入指定的仓库后,执行该命令即可,其对应的标识会记录到当前仓库的".git/config"文件中)
#cd 指定仓库目录下
#git config user.name "用户名"
#git config user.email "邮箱"
复制代码

其中

git 仓库级别(local)对应的配置文件是当前仓库下的.git/config 。

 

 

 

git 用户级别(golbal)对应的配置文件是用户宿主目录下的~/.gitconfig。

 

 

 git系统级别(system)对应的配置文件是git安装目录下的 /etc/gitconfig。

对于git来说,配置文件的权重是仓库>全局>系统。Git会使用这一系列的配置文件来存储你定义的偏好,它首先会查找/etc/gitconfig文件(系统级),该文件含有对系统上所有用户及他们所拥有的仓库都生效的配置值。接下来Git会查找每个用户的~/.gitconfig文件(全局级)。最后Git会查找由用户定义的各个库中Git目录下的配置文件.git/config(仓库级),该文件中的值只对当前所属仓库有效。

 

二、创建git版本仓库和使用。

关git版本仓库:版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。

创建版本仓库(git init)

1.创建仓库的目录
#mkdir /d/Git/test
2.进入该目录下,执行git init将其变成git可以管理的版本仓库
#cd /d/Git/test
#git init

建立git版本仓库

 

这时候你当前test目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了。如图

 

 

首先要明确下,所有的版本控制系统,只能跟踪文本文件的改动,比如txt文件,网页,所有程序的代码等,Git也不列外,版本控制系统可以告诉你每次的改动,但是图片,视频这些二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是知道图片从1kb变成2kb,但是到底改了啥,版本控制也不知道。

 

三、关于git的一些常用命令概图及讲解:

 

( 1 ):版本仓库的建立和版本的提交

下列涉及到的命令

$git init
$git add
$git commit
$git status (主要是查看暂存区,同名文件只保留最新的状态,即新git add会覆盖之前的git add状态)
$git diff

1.首先,建立一个文件"num.txt"

  $echo "1231414" >/d/Git/test/num.txt (注意,这样添加内容,在git add时会提示替换些格式)

2.将num.txt文件添加到暂存区。

  $git add num.txt

  翻译:警告:在num.txt中,LF将被CRLF替换;该文件将在您的工作目录中有它原来的行尾;

  $cat num.txt

 

   $git add num.txt  (再执行一遍,若没有任何提示,说明添加成功)

3.查看git状态

  $git status 

 

4.把num.txt文件提交到本地仓库

  $git commit  -m  'num.txt版本1' 

5.提交后再查看状态"git status",查看是否还有未提交的文件

 

6.将"版本1"文件上传到本地仓库后,在num.txt原文件上进行修改。

 

 7.修改后,在还未添加到暂存区时,查看此刻状态(该文件是modfied,已修改状态),但还未提交。

 

 8.查看这里两个文件的不同之处(git diff)

复制代码
关于git diff
git diff <file> # 比较当前文件和暂存区文件差异 git diff

git diff <id1><id1><id2> # 比较两次提交之间的差异

git diff <branch1> <branch2> # 在两个分支之间比较

git diff --staged # 比较暂存区和版本库差异
git diff --cached # 比较暂存区和版本库差异

git diff --stat # 仅仅比较统计信息
复制代码

$git diff num.txt

 

9.将新修改的num.txt再次提交到本地仓库中。(注意:不管是加到暂存区,还是本地仓库,原文件都依然存在)

  $git add num.txt

  $git commit  -m 'num.txt版本2'

 

( 2 ):版本回退

下列版本回退涉及到的命令

 

$git log
$git reset --hard 
$git reflog

 

1.将num.txt文件再次进行修改,为了方便版本回退时进行对比,版本回退回退的是已经提交(git commit)到本地仓库的版本。

显示提交日志信息:git log (git log 命令需要在本地仓库目录下执行),若不在"git init"生成的目录下执行,则会报错

 

 使用$git log ,显示详细信息

 

 使用$git log --pretty=oneline,只显示"哈希值"和其提交时填写的"提交注释"

 

 

 关于git log

复制代码
例:可能经常用到的
显示最近两周的更改文件gitk。 “--”是必要的,以避免与名为gitk的分支混淆
$ git log --since="2 weeks ago" -- gitk

只显示"哈希值"和其对应提交时的"提交注释"
$git log –pretty=oneline
--since,--affter - 仅显示指定时间之后的提交(不包含当前日期) --until,--before - 仅显示指定时间之前的提交(包含当前日期) $ git log --before={3,weeks,ago} --after={2018-04-18}
复制代码

 

版本回退

复制代码
回退所有内容到当前版本:$git reset --hard HEAD
回退所有内容到上一个版本:$git reset --hard HEAD^ 那么如果要所有内容回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推,即$git reset --hard HEAD^
那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:$git reset --hard HEAD~100 即可。

回退到指定版本:$git reset --hard "版本号"
回退hello.php文件的版本到上一个版本:$git reset --hard HEAD^ hello.php
git reset --hard origin/master    # 将本地的状态回退到和远程的一样 

HEAD 说明:

  • HEAD 表示当前版本  

  • HEAD^ 上一个版本   

  • HEAD^^ 上上一个版本 

  • HEAD^^^ 上上上一个版本 

  • 以此类推...

复制代码

由上可知,当前最新的git commit版本为"num.txt版本2"。如图

 

 所有的历史信息显示如上,最新版本为"num.txt版本2",这也是当前版本;切不可错误理解为当前目录下的未提交过的版本为最新版本。

当回退到上一个版本时,实际上就是回退到"num.txt版本1"。如图:版本1内容

 

 

关于版本回退:
回退理解误区:在仓库目录下修改文件后,发现修改文件错误,想"回退"到未修改之前的状态,于是使用git reset --hard HEAD^版本回退。
回退后发现,回退的是未修改之前状态的上一个版本。(即在实例中:"num.txt版本2"提交后,未提交新的版本。
又继续在num.txt文件上进行修改,然后发现想回退到"num.txt版本2",于是使用了git reset --hard HEAD^,使用后发现竟然回退到了"num.txt版本1"。
实际:在git commit提交到本地仓库的版本中,距离当前时间最近的一个版本为最新版本,版本回退是以最新版本为基础开始回退。
即回退到上一个版本,实际上是回退到了最新版本的上一个版本,也就是代码仓库中,版本从
"num.txt版本2"回退到了"num.txt版本1"
如果是要回退到当前版本的话,即使用$git reset --hard HEAD。即回退到"num.版本2"。

回退后再查看历史记录信息$git log

 

 

如果想再次回退到最新的版本呢?即回退到"num.txt版本2"。

$git reflog 查看所有的历史版本记录(之后又测试玩提交了"版本3333"。)

 

 回退到版本注释为"num.txt版本2"的版本

$git reset  --hard "版本号"

$git reset  --hard  c73f9f1,如图

 

 可以看到,已经恢复到"num.txt版本2"了。

 

( 3 ):撤销和删除

撤销

即当文件被修改,还未被commit提交到版本仓库时,可以使用该撤销命令来撤销错误的文件内容。

如,当前为"num.txt版本2"的内容,然后向其中添加内容后,如图

 

 然后查看状态,观看画圈的部分"放弃工作目录中的更改"

 

使用命令$git restore num.txt   = 或使用命令$git checkout -- num.txt  (这两个命令效果一样)

注意:$git checkout -- num.txt中,必须添加"--",如果没有 -- 的话,那么命令变成创建分支了。

注意:该文件目前未$git add num.txt,即还未添加到暂存区。

 

若添加到暂存区后,还未commit到仓库,又在原文基础上进行了修改,想要撤销到"添加到暂存区"后的状态。(同理,使用如上两个命令即可恢复)。即可以这么理解,撤销动作,撤销后恢复到的状态为"添加到暂存区后的状态";若未添加到暂存区,则恢复到最新commit版本后的状态。

 

 

 

删除

关于删除操作,一般情况下删除目录文件的话"rm -rf 文件",即可。此刻执行"$git status"发现有红色字体"deleted:文件名"

  此时若想恢复则使用"$git checkout -- 文件"或"$git restore 文件",这里有两种情况:

  •   情况一:若删除文件时,未将该文件add到暂存区,那么恢复只能从版本库中恢复之前的版本(即若有修改,修改无法恢复)。
  •   情况二:若删除文件前,将该文件add到暂存区,那么恢复后的文件是从暂存区中取出的,状态是删除前的文件(若有修改,修改保留)。

  若想彻底删除文件,则在执行"rm -rf 文件"命令后,还需要再执行"git add 文件"此刻"$git status"后发现"delted:文件名"字体会变为绿色,此时再执行"$git checkout -- 文件"或"$git restore 文件",则会报错文件不存在,此时已经无法恢复,只可以从暂存区git commit到本地仓库。

  简单理解删除恢复:当删除文件后,若$git status 发现"deleted:文件名"是红色的,则可以恢复(但要区分情况);若"deleted:文件名"是绿色的,则无法恢复,只能通过回退版本来减少损失。

  总结:使用删除命令前,为了保证安全,最好先将文件git add到暂存区。

 

posted @   浮~生  阅读(313)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示