Git本地仓库管理

Posted africancu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git本地仓库管理相关的知识,希望对你有一定的参考价值。

上一篇已经提交了一个readme.txt文件,现在我们修改一下这个文件的内容,以测试Git是如何跟踪文件修改的。将readme.txt中的内容改为:

Git is a distributed version control system
Git is free software

现在运行 git status 命令查看状态:

[[email protected] learngit]# 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:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

git status命令可以让我们时刻掌握仓库当前状态,上面的输出告诉我们如下信息:

  1. 当前处于master分支

  2. 修改还没有提交到暂存区

  3. readme.txt文件被修改了

  4. 暂存区没有更改需要被提交

Git虽然告诉我们readme.txt文件被修改了,但是如果能告诉我们具体修改了什么,那是最好不过了。

使用git diff命令就可以查看到底什么被修改了。

git diff readme.txt
?
diff --git a/readme.txt b/readme.txt
index f7249b8..2fdf0c4 100644
--- a/readme.txt    //表示源文件
+++ b/readme.txt    //目标文件
@@ -1,2 +1,2 @@     //差异定位
-Git is a version control system    //只出现在源文件中
+Git is a distributed version control system    //只出现在目标文件中
 Git is free software   //既出现在源文件又出现在目标文件中

---代表源文件,比如 a/readme.txt是源文件

+++代表目标文件,比如 b/readme.txt是目标文件

@@ -1,2 +1,2 @@ 表示差异小结的定位

- 开头的,只出现在源文件中

+ 开头的,只出现在目标文件中

空格开头的,即出现源文件又出现在目标文件中。

看完差异之后,我们再次将修改提交到版本库中

git add .
git commit -m "add distributed"

 

一、版本回退

为了更好的显示版本控制,我们对 readme.txt 再进行一次修改,并提交到版本库

Git is a distributed version control system
Git is free software distributed under the GPL
?
git add .
git commit -m "append GPL"

我们可以使用 git log 命令显示从最近到最远的提交日志

[[email protected] learngit]# git log
commit 79aa29e0b2cfa9023c5814108948ae969516979b
Author: zhoumingjun <[email protected]126.com>
Date:   Mon Aug 27 17:25:45 2018 -0400
?
    append GPL
?
commit 79a2516b55dabea00086ab0d53c9481ea5da539d
Author: zhoumingjun <[email protected]126.com>
Date:   Mon Aug 27 17:20:30 2018 -0400
?
    add distributed
?
commit 63c6fc5426a4b8962522e183a45b609708448f53
Author: zhoumingjun <[email protected]126.com>
Date:   Mon Aug 27 16:43:05 2018 -0400
?
    wrote a readme file

可以看到有三次提交信息,使用 git log --pretty=oneline 可以输出精简版

[[email protected] learngit]# git log --pretty=oneline
79aa29e0b2cfa9023c5814108948ae969516979b append GPL
79a2516b55dabea00086ab0d53c9481ea5da539d add distributed
63c6fc5426a4b8962522e183a45b609708448f53 wrote a readme file

这个长度为40的字符串就是每次提交的版本号。我们想回退的话,必须要告诉Git我们要回退到那个版本。

Git中,HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^表示上上个版本,依次类推,如果回退100个版本,那就是简写成HEAD~100

比如我们现在要向前回退一个版本,就可以执行 git reset命令

git reset --hard HEAD^
?
HEAD is now at 79a2516 add distributed  //当前版本在79a2516

如果又要回到最新的那个版本

git  reset --hard 79aa29e

 

现在总结一下:

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

 

二、工作区和暂存区

  • 工作区(Working Direcotory)

    就是电脑里面能看到的目录,比如我的learngit文件夹就是一个工作区

  • 版本库(Repository)

    工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

    Git的版本库中存了很多东西,其中最重要的就是暂存区(stage / index),还有Git为我们创建的第一个分支 master,以及指向master的一个指针HEAD

    技术分享图片

    前面我们将文件提交到版本库是分两步进行的:

    1. 使用git add将文件从工作区添加到暂存区(暂存区是版本库的一部分)。

    2. 使用 git commit将暂存区的内容提交到当前分支。

    我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

    可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

  •  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于Git本地仓库管理的主要内容,如果未能解决你的问题,请参考以下文章

git 在windows下的应用 - 本地仓库代码管理

Ⅲ. 通过git管理github上托管的代码

代码管理工具 --- git的学习笔记一《git的本地操作》

#yyds干货盘点# 超全面Git知识总结!

2.9 git

本地Git仓库的使用方法