一步一步教你使用Git

互联网给我们带来方便的同时,也时常让我们感到困惑。随便搜搜就出一大堆结果,然而总是有大量的重复和错误。小妖发出的内容,都是自己实测过的,有问题请留言。

  • 现在,你已经安装了Git,即:

  • 新建一个目录 test_git,让我们开始尝试

  • 初始化Git

  • 现在你的代码已经在Git管理之下了,开始编辑,新建一个文件 master/1.md

  • 保存后回到根目录test_git下查看一下当前Git的状态

  • 这里告诉我们,多了一个文件夹,可以用 git add 命令把它加入缓存区

  • git add . 把所有修改加入缓存区,注意是“git add .”。你也可以把部分修改加入缓存区,那就用“git add filename”。这里简单说下什么是缓存区,git 下共有三个区:工作区、缓存区、库。工作区就是你编辑的环境,缓存区就是已经存起来的修改,准备提交到库了,库就是已提交的修改。下面查看下 git add 后的Git的状态,还是用 git status

  • 这个告诉我们,文件已经在缓存区了,默认情况下,红色就是在工作区,绿色就是在缓存区。那我们现在还能对 master/1.md 继续修改或增删别的文件吗?可以的,我们增加一个文件 master/2.md。内容为“第二个文件,内容都无所谓啦”,并修改 master/1.md

  • 然后还是 git status(这个只是为了让你得知当前Git是什么状态,并不是必须的,熟练后可以省略,当然时常查看一下状态是个好习惯)

  • 我们看到,有一个缓存区的修改,有两个工作区的修改。好吧,先git add .

  • 然后提交到库,这里用命令 git commit -m "本次提交的说明"

  • 提交完成,再看一下当前的状态

  • 这告诉我们,已经提交过,提交后并没有任何修改,工作目录是“干净”的

  • 有一次,我不小心修改了一个文件,还没有提交到缓存区,我想放弃修改

  • 可以看到,我们先修改了 master/1.md,想放弃它的修改,我们用了 git checkout 命令。git checkout 相当于用库里的文件覆盖了当前工作区的文件,也就是放弃了工作区的修改。放弃单文件的修改,用 “git checkout filename”,放弃所有文件区的修改,用 “git checkout .”,事实上大部分命令都支持“filename”和“.”

  • 另一种场景,我不是修改了一个文件,而是在工作区新加了一个文件,怎么办?

  • 可以看到,现在 master/3.md 还不在 Git 的管辖之下,不能用 git checkout 删除。

  • 这里用到 git clean -df ,用来删除工作区不在 Git 管辖下下的新增文件

  • 另一种场景,如果是已经提交到缓存区的文件,想放弃它的修改呢,首先把它放回工作区,再用 git checkout 命令就可以了。

  • 这里用 git reset 命令将文件从缓存区放回到工作区,git reset 同样支持“git reset filename”和“git reset .”

  • 有那么一次,你做了大量的修改,增删了大量文件,而且一部分已经提交到缓存区。这时产品经理突然说这个需求被砍了,全部回滚吧。你可以把

  • git reset .

  • git checkout .

  • 合并成一条命令

  • git reset --hard

  • 这就是放弃上一次提交后的所有修改,当然,这个不能删除新增的文件,全部回滚的话还得加一条

  • git clean -df

  • 先小结一下,这次我们只介绍了单人单分支下简单的 Git 使用方法,包括三个区(工作区、缓存区、库)的概念,以及文件修改是如何在这三个区间流动的。现在 Git 只是你自己的代码版本控制工具。如果你看到了这里,那你可能也是一个 Git 新手,希望激起了你对 Git 的兴趣,以后还会接着介绍 Git 的分支和远程库,多人协作等。当然,不需要等我,这种文章网上铺天盖地,我记录下来多半是为了我的小弟,让他少走点弯路~

一步一步教你使用Git的更多相关文章

  1. 一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app

    一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app 转载 作者:jrainlau 链接:https://segmentfault.com/a/1190000005844155 ...

  2. 一步一步教你如何在linux下配置apache+tomcat(转)

    一步一步教你如何在linux下配置apache+tomcat   一.安装前准备. 1.   所有组件都安装到/usr/local/e789目录下 2.   解压缩命令:tar —vxzf 文件名(. ...

  3. 一步一步教你将普通的wifi路由器变为智能广告路由器

    一步一步教你将普通的wifi路由器变为智能广告路由器 相信大家对WiFi智能广告路由器已经不再陌生了,现在很多公共WiFi上网,都需要登录并且验证,这也就是WiFi广告路由器的最重要的功能.大致就是下 ...

  4. 使用WPF教你一步一步实现连连看

    使用WPF教你一步一步实现连连看(一) 第一步: 问题,怎样动态的建立一个10*10的grid(布局) for (int i = 0; i < 10; i++){ RowDefinition r ...

  5. 一步一步教你将开源项目上传到jcenter

    最近闲着看了一下jcenter的使用,也想将自己使用频率比较高的东西抽成类库,然后通过compile来使用,提高开发效率,本来以为挺简单的,但是网上介绍的比较模糊,很多博客也比较老了,不适用,花了我一 ...

  6. Ace教你一步一步做Android新闻客户端(一)

    复制粘贴了那么多博文很不好意思没点自己原创的也说不出去,现在写一篇一步一步教你做安卓新闻客户端,借此机会也是让自己把相关的技术再复习一遍,大神莫笑,专门做给新手看. 手里存了两篇,一个包括软件视图 和 ...

  7. git 出现502错误后用depth一步一步来

    公司有个项目的git仓库,因为一些二进制文件也放在里面,版本迭代后,整个仓库特别大,有好几G. 直接git clone是不行的,会报这样的错误: error: RPC failed; HTTP 502 ...

  8. 一步一步教你实现iOS音频频谱动画(二)

    如果你想先看看最终效果再决定看不看文章 -> bilibili 示例代码下载 第一篇:一步一步教你实现iOS音频频谱动画(一) 本文是系列文章中的第二篇,上篇讲述了音频播放和频谱数据计算,本篇讲 ...

  9. 一步一步教你实现iOS音频频谱动画(一)

    如果你想先看看最终效果再决定看不看文章 -> bilibili 示例代码下载 第二篇:一步一步教你实现iOS音频频谱动画(二) 基于篇幅考虑,本次教程分为两篇文章,本篇文章主要讲述音频播放和频谱 ...

随机推荐

  1. java事件处理

    1.ActionEven事件 文本框,按钮,菜单项,密码框,单选按钮都可以出发ActionEvent事件 使用 addActionListener(ActionListener listen1) 来注 ...

  2. QT5-控件-QDial(表盘控件)

    #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QDial> class ...

  3. uva 484 - The Department of Redundancy Department

    已有的数据结构装不下数据,或者不能处理现有的数据,那就必须要思考其他的辅助手段,辅助结构: #include <cstdio> #include <map> #include ...

  4. .net防止刷新重复提交(转)

    net 防止重复提交 微软防止重复提交方案,修改版 Code ; i < cookie.Values.Count; i++)                     log.Info(" ...

  5. 删除Excel中的打印预览留下的打印线

    Excel 工作表打印后,会留有几条虚线打印线.如下图所示:     不少同学反映,他们尝试了很多操作却仍然无法消除.难道除了重新打开就没有别的办法了? 可以这样做: 在 Excel 2010 中,单 ...

  6. PHP扩展开发(5) - PHP常量的定义和读取

    1. 定义   //定义PHP常量REGISTER_STRINGL_CONSTANT("SIMPLE_VERSION", PHP_SIMPLE_VERSION, sizeof(PH ...

  7. JBPM4.4GPD设计器中文乱码问题的另一种解决方法

    在eclipse中使用JBPM4.4的设计器时,输入中文后直接查看Source发现xml里中文全都乱码了,这时候大约整个人都不好了!赶紧百度.谷歌,搜到的多数结果都是要你在eclipse.ini或my ...

  8. [算法]动态规划(Dynamic programming)

    转载请注明原创:http://www.cnblogs.com/StartoverX/p/4603173.html Dynamic Programming的Programming指的不是程序而是一种表格 ...

  9. 消息通信机制NSNotificationCenter -备

    消息通信机制NSNotificationCenter的学习.最近写程序需要用到这类,研究了下,现把成果和 NSNotificationCenter是专门供程序中不同类间的消息通信而设置的,使用起来极为 ...

  10. 一个简单LINUX程序的逆向

    开始之前的准备: 反汇编:IDA 十六进制编辑器: Hexworkshop LINUX环境: KALI LINUX 调试: EDB (KALI自带的) 一个简单的动态追码, 大牛们就略过吧…… 用16 ...