Git学习(1.本地仓库与暂存区)

Git介绍

Git是目前世界上最先进的分布式版本控制系统,与SVN这类的集中式版本控制系统不同,Git通过在每个人的电脑都设置一个完整的版本库,使得不需要联网也能使用Git提供的各种功能。而在进行多人协作时(涉及远程仓库),通过把各自的修改推送上去便可以看到各自的改动。Git学习(1.本地仓库与暂存区)_第1张图片
上图所示,工作区为本地看到电脑里的目录,暂存区则是在创建仓库后生成的.git文件夹中的index文件,本地仓库也是在.git目录下,远程仓库则是使用Github、Gitee等创建的仓库。本节主要介绍本地仓库与暂存区的使用。

Git安装

Windows用户可以在Git官网进行下载,下载地址,然后可以按默认选项进行安装,安装成功后,得到下图的文件目录。Git学习(1.本地仓库与暂存区)_第2张图片

Git使用

安装成功后,我们就可以使用Git愉快地进行版本管理了。首先我们需要配置自己的机器,通过以下命令设置名字与邮箱,其中global参数表示这台机器上的所有Git仓库都使用这个名字与邮箱。

git config --global user.name "Your Name"
git config --global user.email "[email protected]"`

常用命令与用法demo

1.创建一个版本库

$ git init
Initialized empty Git repository in D:/博客/git/test/.git/

通过执行git init创建版本库,创建成功后会在工作区目录下出现.git文件夹, 注意.git文件夹是用于跟踪管理版本的,不要随意更改。

2. 下面是用于展示用法的一个简单demo

首先在工作区目录下创建一个readme.txt文本文件,如图Git学习(1.本地仓库与暂存区)_第3张图片
readme.txt中我先写入hello world,Git学习(1.本地仓库与暂存区)_第4张图片
然后在git bash中执行命令git add readme.txt将文件添加到暂存区,再执行git commit -m "第一次提交"将文件提交到仓库,其中-m参数用于指定提交时的注释。执行结果如下

$ git add readme.txt

$ git commit -m "第一次提交"
[master (root-commit) c63aa3a] 第一次提交
 1 file changed, 1 insertion(+)
 create mode 100644 readme.txt

然后,可以执行git status查看是否还存在未提交文件。

$ git status
On branch master
nothing to commit, working tree clean

然后我们在readme.txt文件中添加change11111,再执行git status查看工作区状态。

$ git status
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

可以看到文件进行了修改,同时Git提示可以使用git add 进行更新,我们执行git add readme.txtgit commit -m "第一次修改"

版本回退

继续向readme.txt文件写入change22222,可以使用git diff 查看修改内容

$ git diff
diff --git a/readme.txt b/readme.txt
index 2fe4992..9ed4e1f 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
 hello world
-change11111
\ No newline at end of file
+change11111
+change22222
\ No newline at end of file

然后按前面命令提交,至此readme.txt中包含内容Git学习(1.本地仓库与暂存区)_第5张图片
我们可以通过git log命令查看历史提交记录,

$ git log
commit 93a066b23c3a99e361508f6be19d6ac0bf458bb7 (HEAD -> master)
Author: XXXX<[email protected]>
Date:   Sun Jul 2 20:17:40 2023 +0800

    第二次修改

commit 5e687930625b606d6a82332403628438ef6eaf26
Author: XXXX<[email protected]>
Date:   Sun Jul 2 20:13:05 2023 +0800

    第一次修改

commit c63aa3a2bfb2cd2f65bd99da5b32067e5c5438be
Author: XXXX<[email protected]>
Date:   Sun Jul 2 19:43:26 2023 +0800

    第一次提交

可以看到目前总共完成了三次操作,那么如何完成版本回退呢?
可以使用命令git reset --hard HEAD^ 回退到上个版本,回退到上上个版本仅需将HEAD^ 改为HEAD^^,如果是很多个以前版本,则可以使用HEAD ~ n(n为以前版本,若为1000个以前版本则是HEAD~1000)。
执行 git reset --hard HEAD^,可以看到readme.txt文件回退到了上个版本。Git学习(1.本地仓库与暂存区)_第6张图片那么如果我们像回到最新版本又该怎么做呢?可以使用命令git reset --hard 版本号。如何查询版本号呢?可以使用git reflog命令查询。

$ git reflog
5e68793 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
93a066b HEAD@{1}: commit: 第二次修改
5e68793 (HEAD -> master) HEAD@{2}: commit: 第一次修改
c63aa3a HEAD@{3}: commit (initial): 第一次提交

下面是执行git reset --hard 93a066b后的结果,同时readme.txt也恢复到了第二次修改后的版本

$ git reset --hard 93a066b
HEAD is now at 93a066b 第二次修改

撤销修改

撤销修改有两种命令,分别是git checkout --file 与 git restore --staged file。其中git resotre的出现是因为git checkout承担了不仅仅撤销修改的任务,还包括分支的管理。因此git restore可以更方便用于撤销修改。
使用git checkout --file包含两种情况:
一是文件以readme.txt举例,再文件中添加change33333,但修改后还没有放到暂存区,即没有执行git add 命令,那么git checkout -- readme.txt执行则会撤销修改回到和版本库一模一样的状态,即撤销change33333的添加;
Git学习(1.本地仓库与暂存区)_第7张图片

二是readme.txt已经添加到暂存区后,但又对其做了修改,新的修改还没有提交到暂存区,现在,撤销修改就回到添加到暂存区后的状态。如下图所示,我先添加change33333,并使用git add将其提交到暂存区,接着又添加change44444,但不提交到暂存区,结果是恢复到添加change33333的状态。
Git学习(1.本地仓库与暂存区)_第8张图片
使用git restore --staged file包含以下几种情况:
一.已经添加到暂存区但还没有commit:git restore --staged readme.txt
二.已经commit:
可以使用git restore -s HEAD~1 readme.txt 将版本回退到当前快照的前一个版本;
或者git restore -s 93a066b readme.txt 指定明确的 commit id ,回退到指定的快照中。

你可能感兴趣的:(git,学习)