01-使用Git操作本地库,如初始化本地库,提交工作区文件到暂存区和本地库,查看版本信息,版本切换命令等

本文主要是介绍01-使用Git操作本地库,如初始化本地库,提交工作区文件到暂存区和本地库,查看版本信息,版本切换命令等,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Git的使用

概述

Git是一个分布式版本控制工具, 通常用来管理项目中的源代码文件(Java类、xml文件、html页面等)进行管理,在软件开发过程中被广泛使用

  • Git可以记录文件修改的历史记录并形成备份从而实现代码回溯, 版本切换, 多人协作, 远程备份的功能
  • Git具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce 和 ClearCase 等版本控制工具

在这里插入图片描述

Git仓库专门用来存储项目中的文件(实际可以存储任何文件),大体分为本地仓库和远程仓库两种

  • 本地仓库:开发人员自己电脑上的Git仓库
  • 远程仓库(代码托管中心): 局域网远程库GitLab和互联网远程库GitHub(国外托管平台),Gitee(国内平台),BitBucket

工作区、暂存区、本地版本库概念

  • 工作目录(工作区): 包含.git文件夹的目录就是工作目录,主要用于存放开发的代码
  • 暂存区: 一个临时保存修改文件的地方, .git文件夹内的名为index的文件就是暂存区(stage)
  • 本地版本库: 在执行git init命令后会在当前文件夹创建一个隐藏文件.git(版本库),这个文件中存储了很多的配置信息、日志信息和文件版本信息等

Git工作目录下的文件存在未跟踪和已跟踪两种状态,这些文件的状态会随着我们执行Git的命令发生变化,最后形成一个历史版本

**对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化 **

  • untracked: 未跟踪(未被纳入版本控制)即新创建的文件
  • tracked: 已跟踪(被纳入版本控制),具体又分为Unmodified未修改状态, Modified已修改状态, Staged已暂存状态

在这里插入图片描述

Git常用命令

命令名称作用
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户邮箱(不会验证是否存在,最好用自己创建GitHub时的邮箱,不然提交没有小绿点)
git init初始化本地库
git status查看本地库状态
git add 文件名 或 *添加文件到暂存区 , * 表示添加所有的文件
git rm --cached 文件名删除暂存区的文件,但不会删除工作区的文件,工作区的文件会处于未追踪状态(红色警示)
git reset 文件名称将暂存区的文件取消暂存
git commit -m “提交文件时的日志描述信息” 文件名 或 *将暂存区的文件提交到本地库,日志信息必须要写(可以在日志文件中查看),* 表示提交所有文件
git reflog查看提交的历史版本信息(包含提交的日志信息和精简版本号)
git log查看提交的历史版本的详细信息(含提交作者和提交时间以及完整版本号)
git reset --hard 要穿越到的版本号切换到指定版本

全局范围的签名设置: 用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的

  • 签名的作用是区分不同操作者身份 , Git 首次安装必须设置一下用户签名否则无法提交代码
  • 这里设置的用户签名和将来登录GitHub或其他代码托管中心的账号没有任何关系
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git config --global user.name Layne
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git config --global user.email Layne@atguigu.com
# 查看.gitconfig配置文件(在用户的家目录下)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ cat ~/.gitconfig
[user]
name = Layne
email = Layne@atguigu.com
#查看配置信息命令
git config --list

git init: 在项目目录下右键打开Git bash窗口然后执行该命令就可以让Git获取项目目录的管理权, 初始化后会在该目录下生成.git隐藏文件夹

# 假设/d/Git-Space/SH0720就是我们的项目目录(工作区)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720
$ git init
Initialized empty Git repository in D:/Git-Space/SH0720/.git/#(ll -a查看当前目录下的隐藏目录)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ ll -a
total 4
drwxr-xr-x 1 Layne 197609 0 1125 14:07 ./
drwxr-xr-x 1 Layne 197609 0 1125 14:07 ../
drwxr-xr-x 1 Layne 197609 0 1125 14:07 .git/ 

git status 参数(-s参数可以使输出信息更加简洁) :查看本地版本库状态,未追踪的文件将会红色显示,追踪后的文件将会绿色显示

#首次查看(工作区没有任何文件)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master#当前本地库在master分支(默认)
No commits yet#还没有提交过东西
nothing to commit#没有东西可以提交 (create/copy files and use "git add" to track)#在项目目录下新增hello.txt文件
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ vim hello.txt
hello git! hello atguigu!##再次查看(检测到未追踪的文件)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master
No commits yet
Untracked files:#Git还未追踪文件,文件此时在工作区(use "git add <file>..." to include in what will be committed)hello.txt
nothing added to commit but untracked files present (use "git add" to track)

*git add/git rm --cached 文件/*: 将工作区的文件添加到暂存区或者删除暂存区的文件(表示所有的文件),追踪后的文件将会绿色显示

  • 暂存区的文件可以删除掉,但是工作区的文件并不会删除

gie reset: 将暂存区的文件取消暂存

Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
#将工作区的文件添加到暂存区
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory.#查看状态(检测到暂存区有新文件)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master
No commits yet#还没有提交
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: hello.txt#Git已经追踪到该文件,文件此时在暂存区,但是还没有提交到本地库#删除暂存区的文件
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git rm --cached hello.txt
rm ‘hello.txt’

git commit -m "提交的日志描述信息" 文件/*: 将暂存区的文件提交到本地版本库,形成文件的历史版本,*表示提交所有的文件

# 将暂存区的文件提交到本地库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git commit -m "my first commit" hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory.
[master (root-commit) 087a1a7] my first commit#087a1a7是提交的精简版本号
1 file changed, 16 insertions(+)
create mode 100644 hello.txt# 查看本地库的状态(没有文件需要提交)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master
nothing to commit, working tree clean# 工作区已经空,没有东西可以提交

git reflog/log: 查看版本的提交记录以及当前分支和其指向的版本(默认是最新版本) , reflog表示精简版信息 , log表示详细信息 ,从下往上看

#将暂存区的文件提交到本地库后可以查看文件的版本信息
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reflog
087a1a7 (HEAD -> master) HEAD@{0}: commit: my first commit#HEAD执向master分支的my first版本Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git log
commit 087a1a747382978(HEAD -> master) #完整的版本号
Author: #用户名
Date: #提交文件的日期my first commit#提交时的版本信息

版本切换

修改工作区中已提交到暂存区的文件后并不会自动添加到暂存区需要重新手动提交,此时master分支指向的版本包含的是文件最后提交的版本

#修改工作区的文件(hello.txt)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ vim hello.txt
hello git! hello atguigu! 2222222222222
hello git! hello atguigu!#查看状态(检测到工作区有文件被修改)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: hello.txt#文件以及被修改,并且没有提交到暂存区
no changes added to commit (use "git add" and/or "git commit -a")#将修改的文件再次添加暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git add hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory.#再次查看状态(工作区的修改文件已经添加到了暂存区)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master
Changes to be committed:(use "git reset HEAD <file>..." to unstage)modified: hello.txt#提交修改后的文件到本地库,形成文件的历史版本my second commit
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git commit -m "my second commit" hello.txt
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory.#查看本地库的状态(没有文件需要提交)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git status
On branch master
nothing to commit, working tree clean

git reflog(详细) 或 git log: 查看提交的历史版本信息

#查看版本信息,此时HEAD执向master分支的second版本
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reflog
ca8ded6 (HEAD -> master) HEAD@{0}: commit: my second commit
087a1a7 HEAD@{1}: commit: my first commit

git reset --hard commitID: 根据切换当前分支的版本, 底层其实是移动的HEAD指针

  • commitID: 提交的历史版本的精简版本号
  • .git下的HEAD文件或refs/heads/master文件: 查看HEAD指针指向当前分支的版本

在这里插入图片描述

# 切换到我们第一次提交的first版本
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reset --hard 087a1a7
HEAD is now at 087a1a7 my first commit#切换完毕之后再查看历史版本的记录
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git reflog
087a1a7 (HEAD -> master) HEAD@{0}: reset: moving to 087a1a7#记录指针移动的日志信息
ca8ded6 HEAD@{1}: commit: my second commit
087a1a7  (HEAD -> master) HEAD@{2}: commit: my first commit
#然后查看文件hello.txt,发现文件是第一次提交时的内容
$ cat hello.txt
hello git! hello atguigu!

这篇关于01-使用Git操作本地库,如初始化本地库,提交工作区文件到暂存区和本地库,查看版本信息,版本切换命令等的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/445697

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l