Git超详细使用教程

一、前言

Git 是一个快速、可扩展的 分布式版本控制系统 ,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问.Git与你熟悉的大部分版本控制系统的差别是很大的。也许你熟悉Subversion、 CVS 、Perforce、Mercurial 等等,他们使用“增量文件系统” (Delta Storage systems), 就是说它们存储 每次提交(commit)之间的差异 。 Git 正好与之相反,它会把你 的 每次提交的文件的全部内容(snapshot)都会记录下来 。

理论上,Git 可以保存任何文档,但是最善于保存文本文档,因为它本来就是为解决软件源代码(也是一种文本文档)版本管理问题而开发的,提供了许多有助于文本分析的工具。对于非文本文档,Git 只是简单地为其进行备份并实施版本管理。

二、安装(省略)

三、创建版本库

1、桌面打开Git bash here

2、进入D盘创建一个空文件夹Test

cd d:// //移动到D盘
mkdir  Test  //创建一个Test目录

Git超详细使用教程_第1张图片

3、进入Test文件夹执行git init 初始化本地仓库

git init 初始化版本库

Git超详细使用教程_第2张图片

4、查看Test文件夹里多了.git隐藏文件 

ls -al  //查看隐藏文件

Git超详细使用教程_第3张图片

此时一个版本库就创建完成,使用基本操作如下图 

Git超详细使用教程_第4张图片

工作区:项目文件存在的目录,通过git init命令会初始化为一个git仓库。

git  add:将工作区的修改添加到暂存区。

index/stage:暂存区,git add会将工作区里与暂存区存在差异的数据加入暂存区。

git  commit:将暂存区的修改(与上次提交的差异数据)提交到本地仓库,并由版本库记录提交信息,每一次提交后HEAD会指向当前分支的最新提交节点。

main:默认主分支(老版本为master主分支)未创建新分支时,HEAD指向默认主分区。

HEAD:指向当前分支

git管理的文件各种状态:

untracked files:未被暂存区跟踪的新文件

  • 可通过git  add 加入暂存区

changes not staged for commit:已被暂存区追踪的文件在工作区被再次修改但再次修改的数据还未加入暂存区的文件

  • 已被暂存区追踪的文件在工作区修改但未加入暂存区,可通过git restore 取消修改。
  • 可通过git  add 将修改加入暂存区

Changes to be committed:表示工作区修改已加入暂存区的文件

  • 可通过git rm --cached 将添加到暂存区的文件删除,即untrack(未跟踪)状态
  • 可通过git restore --staged 将加入暂存区的已修改恢复到工作区未暂存状态
  • 可通过git  commit 将暂存区已修改数据(与上一次提交的差异数据)提交到本地仓库

四、在当前工作空间使用版本库。

4.1、git add 、git  rm --cached (移除暂存区文件)和git restore --staged (将加入的暂存区的修改恢复到工作区,不带--staged参数为将工作区修改恢复到未更改状态)

Git超详细使用教程_第5张图片

4.1.1、先查看当前工作区状态

git status  //查看工作区状态

Git超详细使用教程_第6张图片

4.1.2、创建一个新的文件 

touch Test.java  //创建一个Test.java文件

ls  //查看当前目录文件列表

Git超详细使用教程_第7张图片

4.1.3、再次查看工作区状态,此时提示有一个未添加到暂存区的新文件

git status

Git超详细使用教程_第8张图片

4.1.4、将文件添加到暂存区

git add Test.java  //将修改加入暂存区

4.1.5、再次查看状态

Git超详细使用教程_第9张图片

 changes to be committed:已经从工作区添加到暂存区的新文件,等待提交至本地仓库,可通过git rm --cached 将添加到暂存区的文件从暂存区删除,即untrack(未跟踪)状态。

4.1.6、将添加到暂存区的文件恢复至工作区再次查看状态

git  rm --cached Test.java   //将Test.java文件从暂存区恢复至工作区未跟踪(即暂存区不存在与工作区相同的文件)状态

git  status  //再查看状态

Git超详细使用教程_第10张图片

 此时Test.java文件恢复为工作区未被暂存区跟踪状态,可重新通过git  add 添加至暂存区。

4.1.7、再次添加至暂存区并提交到本地仓库

首先设置用户和邮箱

git  config  user.name  ""  //设置用户名
git  config  user.email ""  //设置邮箱

Git超详细使用教程_第11张图片

 将暂存区提交至本地仓库

git commit -m "第一次提交" 

Git超详细使用教程_第12张图片

 4.1.8、查看提交历史记录

git log //查看历史提交记录

Git超详细使用教程_第13张图片

4.1.9、修改Test.java文件保存后再次查看状态

public class Test{
	public static void main(String []args){
		System.out.printfln("a");
	}
}

 Git超详细使用教程_第14张图片

 git restore 可取消工作区文件的修改

4.1.10、查看已修改的文件Test.java,再取消修改

cat Test.java  //查看Test.java
git restore Test.java //取消工作区Test.java文件的修改
cat Test.java

Git超详细使用教程_第15张图片

 取消工作区的修改后查看Test.java文件为空。

4.1.11、再次修改Test.java文件

Git超详细使用教程_第16张图片

 Git超详细使用教程_第17张图片

 4.1.12、查看状态,将修改文件加入暂存区后再次查看状态

报错原因:主要是windows和unix系统的换行符标志不同,LF是UNIX标志,CRLF则是Windows标志,提交的代码中有UNIX标志的换行符

解决方案:

git config --global core.autocrlf false:用户级别全局修改

git config --local core.autocrlf false:项目级别单项目修改

本次选择项目级别修改

git config --local core.autocrlf false 

Git超详细使用教程_第18张图片

此刻可通过git restore --staged  将已加入的暂存区的修改取消

git restore 取消工作区的修改

git restore  --staged 取消暂存区的修改,也就是将加入到暂存区的修改恢复到未暂存状态 

4.1.13、将加入暂存区的已修改恢复至工作区未暂存状态

git restore --staged Test.java

Git超详细使用教程_第19张图片

 此时可通过git restore 命令将刚刚已恢复至工作区的修改也取消掉。

4.1.14、重新将Test.java工作区的修改加入暂存区并提交至本地仓库

Git超详细使用教程_第20张图片

1 file changed:一个文件被修改

6 insertions(+):插入6行数据

4.2、git log和git reflog

4.2.1、git log查看HEAD指向的当前分支的当前节点(版本)以及当前节点的父节点、祖先节点的提交记录信息

git log

Git超详细使用教程_第21张图片

git commit每一次提交都会产生一个新的版本,可通过版本切换将已提交代码恢复至不同版本时期的代码。HEAD指向的是当前分支的当前版本。

4.2.2、git reflog查看按顺序记录的每一次HEAD指向发生改变后的历史记录,无关父节点或祖先节点,可以帮助我们很好解决一次错误提交或者切换版本后返回上一次正确版本。

git  reflog

Git超详细使用教程_第22张图片

 

4.3、git reset重置操作,重置HEAD指向的版本号

4.3.1、git log查看当前节点

Git超详细使用教程_第23张图片 

当前工作区只有Test.java一个文件,查看文件内容

Git超详细使用教程_第24张图片

4.3.2、再插入一行代码并提交

Git超详细使用教程_第25张图片

 4.3.3、再次提交到本地仓库

Git超详细使用教程_第26张图片

4.3.4、查看当前节点记录

Git超详细使用教程_第27张图片

4.3.5、利用git reset重置HEAD指向

git reset 有三个参数分别是hard,soft,mixed(不带参数默认)。

4.3.5.1、带--hard参数为回退到指定版本,工作区与指定版本内容一致,清空指定版本提交后的工作区修改和暂存区修改记录,即git  status查看状态无任何修改,此刻工作区、暂存区、本地仓库内容一致且与指定版本内容一致

git reset --hard HEAD~1  //回退一个版本,回退几个版本就是~X
git reset --hard xxxxxxx  //将HEAD指向切换至当前分支指定版本号(commit id即提交节点),只需要前7位版本号即可

Git超详细使用教程_第28张图片

此时工作区文件与第二次提交的内容一致 

Git超详细使用教程_第29张图片

 查看当前节点及父、祖节点

git status查看工作区与暂存区、暂存区与本地仓库差异

Git超详细使用教程_第30张图片

 此时工作区、暂存区、本地仓库内容一致且与第二次提交内容一致。

Git超详细使用教程_第31张图片

 

4.3.5.2、带--soft 参数,回退到指定版本,但工作区与暂存区保留,再次通过git commit提交到本地仓库后与当前的版本内容一致,但版本号会改变

先切换至第三次提交,查看Test.java文件

git reset --hard 2cacaf3

Git超详细使用教程_第32张图片

 带--soft参数重置到上一个提交节点、查看Test.java文件变化,并查看当前提交节点

Git超详细使用教程_第33张图片

 Git超详细使用教程_第34张图片

 HEAD指向切换到第二次提交,但工作区文件未发生改变,与第三次提交内容一致

查看当前工作区、暂存区、本地仓库状态

git status

 Git超详细使用教程_第35张图片

工作区与暂存区一致且有修改但未提交,此时提交将会变成一个新的提交,虽然与第三次提交内容一致,但会成为第二次提交以后的一个分支提交

Git超详细使用教程_第36张图片

 

4.3.5.3、带--mixed参数

切换回第三次提交,查看Test.java文件

Git超详细使用教程_第37张图片

带--mixed参数切换到上一次提交,查看Test.java文件变化

 Git超详细使用教程_第38张图片

查看当前状态

Git超详细使用教程_第39张图片

 Test.java文件当前有修改但未暂存,说明--mixed参数将本地仓库回退到指定版本且清除了与指定版本暂存区差异,但保留了工作区当前版本与指定版本间的差异

Git超详细使用教程_第40张图片

 4.3.5.4、通过git reset重置版本回退后再次提交会在指定的重置版本后面产生一个分节点,以后每次提交都在新的分节点后面,如果重置版本为当前分支的最新节点,则再次提交后不会产生分节点

Git超详细使用教程_第41张图片

 

未完待续....

你可能感兴趣的:(Git,git,github)