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

news2024/12/24 22:12:49

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!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1277638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为1+x网络系统建设与运维(中级)-练习题2

一.设备命令 LSW1 [Huawei]sys LSW1 同理可得&#xff0c;给所有设备改名 二.VLAN LSW1 [LSW1]vlan ba 10 20 [LSW1]int g0/0/1 [LSW1-GigabitEthernet0/0/1]port link-type trunk [LSW1-GigabitEthernet0/0/1]port trunk allow-pass vlan 10 20 [LSW1-GigabitEthernet0/0/1]in…

.Net core 6.0 升8.0

1 Update Visual Studio 2 3 用Nutget 更新不同套件版本 更新后结果如下&#xff1a;

logistic回归详解

为什么不直接统计标签数和预测结果数&#xff0c;计算精度&#xff1f; 因为 存在梯度为0的情况梯度不连续 为什么叫logistic回归 logistic是因为加了一个sigmoid函数&#xff0c;将输出预测值映射到【0&#xff0c;1】 有时候使用MSE损失函数&#xff0c;拟合 有时候使用c…

java学习part27线程死锁

基本就是操作系统的内容 138-多线程-线程安全的懒汉式_死锁_ReentrantLock的使用_哔哩哔哩_bilibili

QT消息机制和事件 - 鼠标事件、键盘按下事件、绘图事件、定时器事件处理

事件 事件(event)是由系统或者Qt本身在不同时刻发出的。当用户按下鼠标、敲下键盘&#xff0c;或者是窗口需要重新绘制的时候&#xff0c;都会发出一个相应的事件。一些事件在对用户操作做出响应时发出&#xff0c;如键盘事件等。另一些事件则由系统自动发出&#xff0c;如定时…

大学里学编程,为什么这么难?

在大学学习计算机专业&#xff0c;为何很多同学觉得编程学得不顺心呢&#xff1f;许多同学会有这种感觉&#xff0c;在上大学里的计算机专业课程时&#xff0c;听得头都大了&#xff0c;但是真正要写代码&#xff0c;却不知道从哪里开始&#xff0c;或是觉得&#xff0c;大学里…

redis------在java中操作redis

Redis&#xff08;非关系型数据库&#xff09;简介 redis下载 点击即可进入redis中文网进行下载 百度网盘windows版本 提取码 DMH6 redis主要特点 基于内存存储&#xff0c;读写性能高 适合存储热点数据&#xff08;热点商品、资讯、新闻&#xff09; 企业应用广泛 redis不同…

[计算机网络] 高手常用的几个抓包工具(下)

文章目录 高手常用的抓包工具一览什么是抓包工具优秀抓包工具HTTP Debugger ProFree Network AnalyzerKismetEtherApeNetworkMiner 结尾 高手常用的抓包工具一览 什么是抓包工具 抓包工具是一种可以捕获、分析和修改网络流量的软件。它可以帮助您进行网络调试、性能测试、安全…

VSCode 开发C/C++实用插件分享——codegeex

VSCode 开发C/C实用插件分享——codegeex 一、codegeex 一、codegeex CodeGeeX 智能编程助手是一款编程插件&#xff0c;CodeGeeX支持多种主流IDE&#xff0c;如VS Code、IntelliJ IDEA、PyCharm、Vim等&#xff0c;同时&#xff0c;支持Python、Java、C/C、JavaScript、Go等多…

内存管理+模板初阶

内存管理模板初阶 一&#xff0c;内存管理1.1new和delete1.2语法规范补充重点&#xff08;malloc/free和new/delete的区别和联系&#xff09; 二&#xff0c;模板初阶2.1泛型编程2.2模板函数2.3函数模板格式2.4类模板 一&#xff0c;内存管理 我们在c语言学习了动态开辟内存&a…

群晖Video Station 添加海报墙-新方法

海报墙 一般我们找到的都是mp4、mkv等格式的视频资源&#xff0c;而没有像上图这样的海报资源&#xff0c;那要怎样实现海报墙呢&#xff1f; 按照以前的方法&#xff0c;是可以通过The Movie Database的API Key来搜刮电影海报信息&#xff0c;但是现在这个方法不行了 现在介绍…

134. 加油站(贪心算法)

根据题解 这道题使用贪心算法&#xff0c;找到当前可解决问题的状态即可 「贪心算法」的问题需要满足的条件&#xff1a; 最优子结构&#xff1a;规模较大的问题的解由规模较小的子问题的解组成&#xff0c;规模较大的问题的解只由其中一个规模较小的子问题的解决定&#xff…

Linux基础项目开发1:量产工具——UI系统(四)

前言&#xff1a; 前面我们已经把显示系统、输入系统、文字系统搭建好了&#xff0c;现在我们就要给它实现按钮操作了&#xff0c;也就是搭建UI系统&#xff0c;下面让我们一起实现UI系统的搭建吧 目录 一、按钮数据结构抽象 ui.h 二、按键编程 1.button.c 2.disp_manager…

C++作业4

代码整理&#xff0c; 将学过的三种运算符重载&#xff0c;每个至少实现一个运算符的重载 代码&#xff1a; #include <iostream>using namespace std;class Stu {friend const Stu operator*(const Stu &L,const Stu &R);friend bool operator<(const Stu …

软著项目推荐 深度学习疲劳驾驶检测 opencv python

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 &#x1f525; 优…

【UGUI】Unity为下拉菜单添加选项(DropDown)

要想控制谁就把谁拿到代码里-获取组件-修改组件参数&#xff08;变量或者方法&#xff09; 代码示例&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro;public class UIcontrol : MonoBehavi…

今天给大家分享一套Python入门基础测试题,大家看看都会做吗?

今天给大家分享一套Python入门基础测试题&#xff0c;大家看看都会做吗&#xff1f; 一、测试题 1. 正确下载Anaconda平台或Python安装包并成功安装。 2. 掌握Python注释与print()和input()两个函数的用法&#xff0c;并作答以下选择题&#xff08;不定项选择&#xff0c;正…

【算法】动态规划中的路径问题

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;如果给算法的难度和复杂度排一个排名&#xff0c;那么动态规划算法一定名列前茅。今天&#xff0c;我们通过由简单到困难的两道题目带大家学会动…

根目录/ 空间不够,扩容,导致web页面无法加载问题

现象就是&#xff1a;搭建的web页面无反应&#xff0c;也没报错&#xff0c;怀疑是内存空间不够导致的。/ 扩容步骤如下&#xff1a; 虚拟机为关机状态添加虚拟磁盘 #查看磁盘&#xff0c;并创建新分区 fdisk -l fdisk /dev/sdb p       查看已分区数量&#xff08;我看…

在cmd下查看mysql表的结构信息

我提前已经在mysql数据库中创建了一个表&#xff1a; 在cmd下&#xff0c;登录mysql以后&#xff0c;使用命令describe 表名、或者explain 表名可以查看表结构信息。但在实践中&#xff0c;查看表结构&#xff0c;多用describe命令&#xff0c;而查看执行计划用explain。 例…