一些必须要知道的概念

git的三个工作区域:工作目录、暂存区、git仓库。

工作目录:其实就是本地文件磁盘上的文件或目录;

暂存区:是一个文件,保存了下次提交的文件列表信息,一般在git仓库目录中;

git仓库:就是保存项目或文件的元数据和对象数据库的。其中包含了你提交给git的所有完整版本库。

基本的git工作流程如下:

  1. 在工作目录中修改文件。

  2. 暂存文件,将文件的快照放入暂存区域。

  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

创建一个git仓库

git init

进入你想要让git管理的目录,执行上面的命令,便初始化了一个git仓库。

这时,会在该目录下创建一个名为.git子目录,.git子目录下的文件其实就是git仓库的主要文件,一般不建议手动修改或删除它。

另外也可以从远程clone一个仓库到本地。

一般地,可以从github上clone一个你关注的项目下来。

git clone [url]

例如:git clone https://github.com/git/git.git

在git仓库中的一些基本操作

下面结合一个具体实例进行操作。

1、新建一个文件README.md,并交给git仓库管理。



可以看到我在mytestgit目录下先执行了git init 命令初始化了一个仓库。

然后新建了一个README.md文件。

此时,可以使用git status命令查看仓库状态。



可以看到有一个标红的文件是提示Untracked files,意思是还未交给git仓库跟踪管理,而且提示你可以使用git add命令来添加。

使用git add命令将文件添加到暂存区中。

git add README.md

继续使用git status命令查看状态



状态显示,当前在master分支,还未有过提交。提示下面绿色的文件可以提交或者从暂存区删除。

接下来,我们在新建一个test.txt文件,并使用git add命令交给git仓库跟踪。然后修改该文件,再查看状态。



出现在 Changes not staged for commit 这行下面的test.txt文件内容发生了变化,但是还未提交到暂存区中。如果要暂存这次修改,则需要继续运行git add命令。

因此,可以看到git add命令是多功能的,可以用它开始跟踪新文件,还能用它将已跟踪的文件再次放到暂存区中(即更新暂存区中的内容)。

2、使用git commit命令提交文件到git仓库

将上个步骤的两个文件我们提交到git仓库。

git commit -m "第一次提交新增了两个文件"



可以看到,提交后它会告诉你,当前是在哪个分支(master)提交的,本次提交的完整 SHA-1 校验和是什么(18350c3),以及在本次提交中,有多少文件修订过,多少行添加和删改过。

请记住,提交时记录的是放在暂存区域的快照。 任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。 每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。

另外有一种方法可以跳过使用git add添加到暂存区然后再提交的方式。

即只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:

我们再次修改了test.txt文件,然后使用-a选项直接commit。

移除文件的操作

一种情况是从git仓库移除文件,同时删除磁盘上目录上的文件。

使用git rm完成,我们删除test.txt文件看下。



可以看到test.txt文件已经从被删除了。删除之后再使用git commit提交删除。



另外一种情况是,我们只想从git仓库中删除,但是仍然保留当前工作目录中的文件。可以使用--cached选项实现。

例如我们将版本库中的111.txt文件从版本库中删除,但是磁盘上的文件任然保留。

查看提交的历史记录

使用git log命令。



默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。

git log 有许多选项可以帮助你搜寻你所要找的提交, 接下来我们介绍些最常用的。

一个常用的选项是 -p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交:



还有--stat 选项在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。 在每次提交的最后还有一个总结。



git log 的常用选项说明

撤销操作

1、工作区代码的撤销。

文件还未add到暂存区域,此时做出的修改可以通过git checkout -- <file>命令来撤销修改。

2、add到暂存区的代码想撤销

使用git reset HEAD <file>命令从暂存区撤销到工作区,然后再从工作区撤销。

3、提交到git仓库的代码回退

使用命令git reset --hard <版本号>

git基础命令详解的更多相关文章

  1. Git 常用命令详解

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

  2. Git 常用命令详解(二)

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

  3. 【转】 Git 常用命令详解(二)----不错

    原文网址:http://blog.csdn.net/ithomer/article/details/7529022 Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如: ...

  4. git checkout 命令详解

    转自:http://www.cnblogs.com/hutaoer/archive/2013/05/07/git_checkout.html?utm_source=tuicool&utm_me ...

  5. git checkout 命令详解(转)

    在日常的git操作中,git checkout——检出,是我们的常用命令.最为常用的两种情形是创建分支和切换分支. 在下面的命令中,使用了一些简写,在这里说明一下: git st # git stat ...

  6. git checkout 命令详解【转】

    转自:http://www.cnblogs.com/hutaoer/archive/2013/05/07/git_checkout.html 在日常的git操作中,git checkout——检出,是 ...

  7. Linux基础命令详解-3

    本篇详解的命令有以下15个 1.chown 更改文件和文件夹的用户和组所有权 2.useradd 创建一个新用户 3.userdel 删除一个用户 4.usermod 修改用户帐户 5.echo 打印 ...

  8. Linux基础命令详解-2

    本篇详解的命令有以下30个 1.rmdir 功能:删除一个空目录   2.telnet 功能:使用telnet协议连接到主机的指定端口 3.vim 功能:编辑器之神 vim三种模式的功能及其转换   ...

  9. Linux基础命令详解-1

    本篇详解的命令有以下30个 1.cd 功能:切换工作目录 参数列表     2.ls 功能:查看目录里的内容 参数列表     3.mv 功能:  移动或重命名文件和目录 参数列表     4.pwd ...

随机推荐

  1. Winform中怎样根据Name获取同窗体的控件

    场景 在同一个Winform窗体中,点击一个Button按钮时, 获取同窗体的其他控件的属性. 首先需要对要获取的控件赋予Name属性,然后就可以通过Name进行获取. 实现 在Button的点击事件 ...

  2. Servlet重定向

    重定向就是在访问一个Servlet时,没有得到资源,只能去找另外一个Servlet去获取资源.状态码为302. import javax.servlet.ServletException; impor ...

  3. Fragment的创建与通信

    由于这里涉及到接口回调的问题,所以先来看一看什么是接口回调: 这就好比老板和员工的微妙关系,老板需要员工去工作,员工挣钱了以后还要告诉老板自己挣了多少钱,然后由老板来处理这些钱. 首先创建一个接口: ...

  4. charles 自动存储/auto_save

    本文参考:charles 自动存储 自动保存工具 auto_save "自动保存"工具会在你设定的间隔后,自动保存并清除抓取到的内容.假设你设置了3分钟,则每隔三分钟会保存一次, ...

  5. HTML-css样式引用方式

    1.使用行内样式表 语法:在标签内部写入一个style属性. 优点:没有样式表文件,在某些时候可以提高效率: 优先级高. 缺点:多个页面难以共享样式,不利于代码复用: HTML和CSS代码混杂,不利于 ...

  6. log4j日志不输出的问题

    今天服务器上报错,想先去看一下日志进行排查,结果发现日志很久都没有输出过了.从上午排查到下午,刚刚解决,因此记录一下,但现在也只是知其然,并不知其所以然,所以如果大家有什么想法请在下方评论. 先说一下 ...

  7. zipkin+elk微服务日志收集分析系统

    docker安装elk日志分析系统 在win10上安装docker环境 tip:win7/8 win7.win8 系统 win7.win8 等需要利用 docker toolbox 来安装,国内可以使 ...

  8. [LeetCode]singleNumber

    题目:singleNumber Given an array of integers, every element appears twice except for one. Find that si ...

  9. Codeforces Numbers 题解

    这题只需要会10转P进制就行了. PS:答案需要约分,可以直接用c++自带函数__gcd(x,y). 洛谷网址 Codeforces网址 Code(C++): #include<bits/std ...

  10. APP功能测试要点(功能测试重点)

    APP功能测试要点 1.功能性测试 根据产品需求文档编写测试用例而进行测试,包括客户端的单个功能模块以及功能业务逻辑(功能交互)如:涉及输入的地方需要考虑等价类,边界值,异常或非法等 1.1 安装与卸 ...