码迷,mamicode.com
首页 > 其他好文 > 详细

Git本地仓库管理

时间:2018-08-27 21:57:08      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:one   append   pos   定位   查看命令   focus   分享图片   版本   loaded   

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

Git is a distributed version control system
Git is free software

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

[root@localhost 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 命令显示从最近到最远的提交日志

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

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

[root@localhost 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本地仓库管理

标签:one   append   pos   定位   查看命令   focus   分享图片   版本   loaded   

原文地址:https://www.cnblogs.com/africancu/p/9543780.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!