笔者用的是windows系统,不过并没有什么影响。

Git  分布式版本控制系统。

为了让初学git的人明白git是干什么的,有什么意义 笔者觉得先来介绍git作为版本控制器是怎么运作的会让大家对后边的内容有更好的掌握。

  Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。工作区就是我们的代码存放的位置。

  我们把文件往Git版本库里添加的时候,是分两步执行的:

    第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

    第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

  我们创建版本库的时候git为我们创建了唯一的一个master分支,git是git commit命令把所有暂存区的内容提交到master分支。也就是说我们在写代码时为了防止出现因为修改bug或是误操而破坏代码的情况我们可以每编写一段代码就add到暂存区,等代码完成然后一次commit。就像word文档的保存一样,当然git的意义可远不止这样!!!以后笔者会依次介绍。

1.git init

文哥@DESKTOP-GHL1S3Q /D/test (master)
$ git init
Initialized empty Git repository in d:/test/.git/

  创建版本库,使当前目录变成git可以管理的目录。

2.git add

文哥@DESKTOP-GHL1S3Q /D/test (master)
$ git add gitTest.txt

  把文件从工作区添加到缓存区

3.git status

文哥@DESKTOP-GHL1S3Q /D/test (master)
$ git status
On branch master
Your branch is up-to-date with 'originTest/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: gitTest.txt no changes added to commit (use "git add" and/or "git commit -a")

  显示当前状态

  命令下边的信息是说gitTest.txt这个文件的内容 已经被修改了,但是还没有提交。git虽然告诉我们内容有修改过,那么我们要怎么查看修改的内容呢 答案是用git diff 命令。

4. git diff

文哥@DESKTOP-GHL1S3Q /D/test (master)
$ git diff gitTest.txt
diff --git a/gitTest.txt b/gitTest.txt
index 142c56d..87b9489
--- a/gitTest.txt
+++ b/gitTest.txt
@@ -, +, @@
git first
git second
+git third
\ No newline at end of file

  这段话的意思是当前gitTest.txt的内容和暂存区的gitTest.txt相比多了一句git third。这时我把gitTest.txt文件在提交一次,然后看看git status是什么状态。

文哥@DESKTOP-GHL1S3Q /D/test (master)
$ git add gitTest.txt 文哥@DESKTOP-GHL1S3Q /D/test (master)
$ git commit -m "second commit"
[master b43d55f] second commit
file changed, insertions(+) 文哥@DESKTOP-GHL1S3Q /D/test (master)
$ git status
On branch master
Your branch is ahead of 'originTest/master' by commits.
(use "git push" to publish your local commits) nothing to commit, working directory clean

  最后git说nothing to commit, working directory clean 意思是我们当前没有需要提交的修改,而且,工作目录是干净(working directory clean)的。

5。git log

文哥@DESKTOP-GHL1S3Q /D/test (master)
$ git log
commit b43d55f4f8268fe191aa16ddaa3fe418c05cb6f5
Author: wenge <@qq.com>
Date: Fri Mar :: + second commit commit ef3dbb7a669ecb38e14a3327702456abb4a91900
Author: wenge <@qq.com>
Date: Fri Mar :: + delete except first commit 985f7833052563af586a75edfdb40439e57b861d
Author: wenge <@qq.com>
Date: Thu Mar :: + commit second commit c9ef4de9ad04bbac7e38b6cc95eea294854d96b7
Author: wenge <@qq.com>
Date: Thu Mar :: + first commit

很容易看出来 这个命令是查看之前的提交记录。

6.git reset

那现在我们在工作环境中我们已经用了git保管之前写的代码,但我们要是遇到问题需要回到上一个版本该怎么办呢 就要用到这个命令了

现在gitTest.txt文件里有这些内容:

git first
git second
git third

现在用git reset回到之前的版本该怎么做呢?如下:

文哥@DESKTOP-GHL1S3Q /D/test (master)
$ git reset --hard head^
HEAD is now at ef3dbb7 delete except first

再看gitTest.txt的内容:

git first

回到了之前的版本,这里要注意的是上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。但是我们也没有必要真的去数是第几个版本,可以换另一个语句,这时候就要知道git log这个语句了,大家会看到之前介绍的git log语句会看到一大长串版本号,我们的新语句就是基于这一大串数字来实现的

文哥@DESKTOP-GHL1S3Q /D/test (master)
$ git reset --hard b43d55f
HEAD is now at b43d55f second commit

当然了我们不用把版本号全部写下来,只需要写前几位记好了。

其实大家看一下最上面那个图,这两个语句是一样的

7.git checkout -- file

让这个文件回到最后一次commit或是add的状态,如说是add了没有commit就回到暂存区的状态,如果是commit之后没有在add那就回到master的状态,这时就和上边的git reset命令的作用一样了。

那么我们要是想撤销暂存区的内容怎么做呢,可以用到git reset HEAD file。

文哥@DESKTOP-GHL1S3Q /D/test (master)
$ git checkout -- gitTest.txt 文哥@DESKTOP-GHL1S3Q /D/test (master)
$ git reset HEAD gitTest.txt
Unstaged changes after reset:
M gitTest.txt

8. git rm file

在版本库里删除文件

本地库的命令就暂时介绍这几个。下一篇介绍远程库的git操作。

git 常用命令及解析 由浅入深的更多相关文章

  1. sublime 集成git插件,及git常用命令

    以前用了很久的totoiseSVN,显然不够高大上,开发界的版本装x利器还得是git.然而git的命令行对没怎么用过linux的人可能觉得还不如用gitGUI,可是当你知道sublime可以集成git ...

  2. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  3. Git 常用命令详解

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...

  4. Git 常用命令大全

    Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v 添加 ...

  5. Git常用命令总结

    Git常用命令总结 git init      在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹.   git clone ...

  6. GIT常用命令备忘

    Git配置 git config --global user.name "storm" git config --global user.email "stormzhan ...

  7. Git 常用命令2

    Git 常用命令 Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ gi ...

  8. git常用命令-基本操作

    git常用命令-基本操作 1)      新增文件 新增了Test_1.java git add Test_1.java git commit –m “新增了Test_1.java” git push ...

  9. 转收藏:Git常用命令速查表

    一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...

随机推荐

  1. 浮点数 (IEEE-754)

    浮点数又称"实数",一个浮点数包含三个部分 符号位(S) 阶码 有效数字 S:阶码:有效数字 浮点数是由科学二级制来表示的. 三种类型的浮点数: 短浮点数(32bit):  S(b ...

  2. MVC代码中如何调用api接口

    关于代码解释,为了方便读者浏览时更好理解代码的含义,我把注释都写在代码里面了.因为一开始我只考虑到功能上的实现并没有考虑代码的优化所以代码我就全写在一个页面了.至于那些生成扑克牌类.计算类等代码优化方 ...

  3. Netty In Action

    1 introduction 1.2 Asynchronous by design two most common ways to work with or implement an asynchro ...

  4. PowerDesigner中表名过长,自动生成的主键名截取的问题

    在PowerDesinger中,若表名过长,自动生成的主键名会被自动截取. 解决如下:DataBase/Edit Current DBMS/Scripts/Objects/PKey/ConstName ...

  5. ACM集训的Training Day 3的A题。。。

    A. 等差数列 一.题目描述: 一个等差数列是一个能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...)的数列. 在这个问题中a是一个非负的整数,b是正整数.写一个程序来 ...

  6. ps用画笔工具设计水墨圆环

    1.打开ps,新建一个1500*1500px的空白文档,分辨率为72,背景选择白色,如图: 2.选择画笔工具,按F5调出画笔预设面板,设置参数. 画笔笔尖形状:选择27号画笔,找不到可以复位一下画笔: ...

  7. 自动重启sqlserver服务

    公司一台官网服务器是由.net语言sqlserver数据库开发的,官网后台登录要涉及到sql数据库,现在出了一个问题,每天登录后台都会报错,要重启sqlserver才能进入,问题一直也没有解决,但是也 ...

  8. Python学习【第九篇】函数

    函数 函数是什么? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上而下实现功能,其往往用一段代码来实现指定功能,开发过 ...

  9. 28个Unix/Linux的命令行神器_转

    28个Unix/Linux的命令行神器 下面是Kristóf Kovács收集的28个Unix/Linux下的28个命令行下的工具,有一些是大家熟悉的,有一些是非常有用的,有一些是不为人知的.这些工具 ...

  10. nodejs的request创建的get和post请求,带参数

    1.导入request : var request = require('request'); 2.get请求 request({ timeout:5000, // 设置超时 method:'GET' ...