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

Git的使用

概述

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

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

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

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

  • 工作目录(工作区): 包含.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或其他代码托管中心的账号没有任何关系
bash 复制代码
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隐藏文件夹

bash 复制代码
# 假设/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 11 月 25 14:07 ./
drwxr-xr-x 1 Layne 197609 0 11 月 25 14:07 ../
drwxr-xr-x 1 Layne 197609 0 11 月 25 14:07 .git/ 

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

bash 复制代码
#首次查看(工作区没有任何文件)
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: 将暂存区的文件取消暂存

bash 复制代码
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 "提交的日志描述信息" 文件/*: 将暂存区的文件提交到本地版本库,形成文件的历史版本,*表示提交所有的文件

bash 复制代码
# 将暂存区的文件提交到本地库
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表示详细信息 ,从下往上看

bash 复制代码
#将暂存区的文件提交到本地库后可以查看文件的版本信息
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分支指向的版本包含的是文件最后提交的版本

bash 复制代码
#修改工作区的文件(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: 查看提交的历史版本信息

bash 复制代码
#查看版本信息,此时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指针指向当前分支的版本
bash 复制代码
# 切换到我们第一次提交的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!
相关推荐
研究是为了理解2 小时前
Git Bash 常用命令
git·elasticsearch·bash
DKPT2 小时前
Git 的基本概念和使用方式
git
Winston Wood6 小时前
一文了解git TAG
git·版本控制
喵喵先森6 小时前
Git 的基本概念和使用方式
git·源代码管理
xianwu5437 小时前
反向代理模块
linux·开发语言·网络·git
binishuaio10 小时前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
会发光的猪。11 小时前
如何在vscode中安装git详细新手教程
前端·ide·git·vscode
stewie612 小时前
在IDEA中使用Git
java·git
晓理紫21 小时前
使用git lfs向huggingface提交较大的数据或者权重
git
我不是程序猿儿1 天前
【GIT】sourceTree的“当前分支“,“合并分支“与“检出分支的区别
git