我不会用*官方*的语言告诉你Git 是什么,对此我表示深深得歉意~~
在我看来像CSDN、博客园、掘金等博客交流平台就是小的“GitHub”,只不过在这里更多的是一些零零散散的笔记或者文章,其实Gihub也是一样的“交流(友)社区",这里有一本正经的开源项目,你可以在上面学习别人的开源项目也可以上传属于自己的作品,也有各种沙雕的个人“作品”,比如 [The F**k](https://github.com/nvbn/thefuck)、比如:[P站logo生成器](https://github.com/bestony/logoly),以及各种奇葩的交友方式 /滑稽。咳咳,总的来说呢,Github 是一个供大家“学习”的平台,同时也是一个学习交流社区,就酱。我只想带你入坑,至于你学的怎么样,我包不负责 /抠鼻
![Emmm.......](https://img-blog.csdnimg.cn/20200326174342946.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDM1NTU5MQ==,size_16,color_FFFFFF,t_70)
## 阅读说明:

总文加起来 *20分钟*可以看完,我把总文分成了 Git`命令`实战 和 GitHub `运用` 两部分,本篇是 Git 命令实战,各位不用担心~常用的Git命令两只手就可以数过来,无非就是提交和下载,好了那么我们开始进入~~入坑~~ 学习吧。

## 简单的安装
Git的安装非常**精简**,基本一步到位:
**Windows**:[点进去选择Window,它会自动安装好](https://git-scm.com/downloads)
**MacOS**:
*方法一*:推荐直接下载Xcode,直接在App Store搜索(免费)*xcode是苹果的集成开发环境*(IDE)下载好这个软件不仅Git很多环境都给你自动配置好了
*方法二*:通过第三方homebrew安装(不推荐):
在Mac`终端`输入

```python
# 安装 homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# 安装Git
brew install git

```
**Linux**:
*Ubantu*:`sudo apt-get install git`
*Centos*: `yum install git`

Emm。。。。git的安装基本不会出意外,出了意外你顺着网线来打我
接下来就开始动手实操了,让我们先创建一个文件夹吧,不妨就叫Git,作为练习的主要目录,好了就开始吧
## 初始化一个Git仓库
创建一个 Git 目录,我们把这个目录变为可以用GIT管理的仓库! `git init`命令把这个目录变成Git可以管理的仓库
> mkidr Git
> cd Git
> git init

## 创建练习对象

然后就可以在仓库愉快的玩耍了,我们先搞一个txt文件练习一下

>vim demo.txt

这条命令会 **创建** 并且 **进入** demo.txt, 按下 `i` 进入 vim编辑模式,就可以在这个文件里输入内容了!
我们输入:

> this is 1 test
> ~
> ~
> ~
> ~
> ~
>
然后 按下esc退出vim编辑模式, 然后按下(冒号) `:` 并在冒号后面输入 `wq` 然后回车,我们就自动关闭并且保存这个txt文件了.
随后我们用 `git add` 命令把 txt 文件放到仓库里,随后用`git commoit`命令 把文件提交给仓库,

> git add demo.txt
> git commit -m "first commit"
>
返回:
> [master c819da4] first commit
> 2 files changed, 2 insertions(+), 3 deletions(-)
>create mode 100644 demo.txt

你可以这样理解, 就像寄快递一样, 我们把快递交给`快递小哥(add)`,随后快递小哥把快递送到达`物流仓库(commit)`。`-m "first commit"` 是提交说明,`-m` 是固定格式,引号里面是自定义内容,就好像你邮寄快递的留言一样,可以对本次“邮寄”做一个说明.

## 第二次修改

然后我们对 demo.txt 修改添加一些内容,输入 `vim demo.txt` 我们会进入demo.txt文件,然后按下 `i` 键,进入vim 编辑模式,我们写入:

> this is first test
这是第二次修改

写完后,按下 `esc` 键退出vim编辑模式,进入vim命令模式, 然后输入(冒号) `:wq` 回车,这样就写入并且退出了。
其实,我们每一次的修改git它都有记录,我们输入 `git diff demo.txt` 命令可以查看,这个文件发生了哪些不同. diff 是different的意思

> [root@StrawberryJam Git]# git diff demo.txt
>diff --git a/demo.txt b/demo.txt
>index 2fd7f63..a9b2fb1 100644
>--- a/demo.txt
>+++ b/demo.txt
>@@ -1,2 +1,2 @@
> this is first test
>
> +这是第二次修改

我们输入 `git status` 查看git仓库的状态,看看有哪些是要给“快递小哥”,有哪些将要送往“物流中心”的

> [root@StrawberryJam Git]# git status
> 位于分支 master
> 尚未暂存以备提交的变更:
> (使用 "git add <file>..." 更新要提交的内容)
> (使用 "git checkout -- <file>..." 丢弃工作区的改动)
> 修改: demo.txt
> 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

上面提示告诉我们, demo.txt 已经修改过了,我们还没有提交给仓库,接下来我们进行第二次提交,也就是我们修改过后的又一次提交,输入 `git add demo.txt` 命令, 然后输入 `git commit -m "second commit"`

>[root@StrawberryJam Git]# git add demo.txt
> [root@StrawberryJam Git]# git commit -m "second commit"
>[master 2f14c19] second commit
> 1 file changed, 1 insertion(+), 1 deletion(-)

我们就完成第二次修改的(发送)提交了, 是不是很简单!!,我们再输入`git status` 看一看

> [root@StrawberryJam Git]# git status
> 位于分支 master
>无文件要提交,干净的工作区

到这里,我们已经学会了 如何初始化一个GIT仓库和对文件的修改及提交。我们知道Git是一个版本控制系统,既然我们对文件修改了,那么就一定还可以回到上次的版本,这就好比文件备份,接下来让我们尝试一下回到“备份”的文件

## 第三次修改
输入 `vim demo.txt` 命令进入文件,按 `i` 键 进入 vim 编辑模式,输入新的内容

> this is first test
>这是第二次修改
>这是第三次修改
>~
>~
>~
>~

按下 `esc` 退出编辑模式 输入 `:wq` 回车后保存并且退出。
输入 `cat demo.txt` 命令查看一下文件是否有我们修改的内容

> [root@StrawberryJam Git]# cat demo.txt
>this is first test
>这是第二次修改
>这是第三次修改

没有问题后我们就可以把第三次修改的文件进行提交了!再次输入 `git add demo.txt` 和 `git commit -m "thirt commit"`

> git add demo.txt
> [root@StrawberryJam Git]# git commit -m "third commit"
>[master 3b15c27] third commit
> 1 file changed, 1 insertion(+)

## 回到“备份”!!

到这里我们一共对文件进行了三次修改,接下来让我回到第二次修改的文件试试,输入 `git reset --hard HEAD^` , git reset --hard 是固定格式记住就好了,HEAD^ 是回到上一个版本,HEAD^^就是上上个版本

> [root@StrawberryJam Git]# git reset --hard HEAD^
>HEAD 现在位于 2f14c19 second commit

提示表明,我们在第二次修改的文件版本了,不妨输入`cat demo.txt` 预览一下

> [root@StrawberryJam Git]# cat demo.txt
>this is first test
>这是第二次修改

果然,我们退回到了第二次修改后的版本文件,如果我们又后悔了怎么办,不用担心依然可以回到第三次修改的版本文件,首先我们输入 `git reflog`可以查看git命令操作日志

> [root@StrawberryJam Git]# git reflog
>2f14c19 HEAD@{0}: reset: moving to HEAD^
>3b15c27 HEAD@{1}: commit: third commit
>2f14c19 HEAD@{2}: commit: second commit
>c819da4 HEAD@{3}: commit: first commit

最前面的 2f14c19 是我们操作对应的`ID` ,(ID都是随机分配的) 我们可以看到 第三次提交的 ID是 `3b15c27`,那么我就可以输入 `git reset --hard 3b15c27` 回到第三次提交的版本文件

> [root@StrawberryJam Git]# git reset --hard 3b15c27
>HEAD 现在位于 3b15c27 third commit
>[root@StrawberryJam Git]# cat demo.txt
>this is first test
>这是第二次修改
>这是第三次修改

就这样我们又再次回到了第三次版本是不是很简单,看来想要回到指定版本只需要通过 `git reflog` 查看操作ID,然后 `git reset --hard` 就可以回到“备份”版本文件了!这个HEAD是一个箭头指针, 每当我们`git reset--hard ID` 就代表HEAD指向了这个ID,那么我们当前的版本就是这个HEAD指向的版本。

## 修改的管理~
**多次修改一次提交**:

现在我们知道了 commit 是在 add 之后,如果对文件修改一次后,我们git add 把“邮件”(文件)交给`快递小哥`,此时我们又修改了一次文件,如果这时候使用`git commit` 命令,那么Git只会记录我们第一次修改的文件,也就是说我们通过git add 把第一次修改后的文件交给快递小哥后,他就离开了准备发往`物流中心`,所以此时使用git commit 命令只会记录第一次修改的文件。一句话总结来说:每次修改都需要 git add一下,最后统一git commit 一起提交文件。

**撤销修改:**

接下来我们学习修改的撤销,我们先看一下git的 status

> [root@StrawberryJam Git]# git status
> 位于分支 master
> 无文件要提交,干净的工作区

好了我们对demo.txt 进行第四次内容的添加,`vim demo.txt` 后文件的内容

> [root@StrawberryJam Git]# vim demo.txt
>[root@StrawberryJam Git]# cat demo.txt
>this is first test
>这是第二次修改
>这是第三次修改
>这是第四次添加内容

我们在看一下git 的 status

> [root@StrawberryJam Git]# git status
> 位于分支 master
> 尚未暂存以备提交的变更:
> (使用 "git add <file>..." 更新要提交的内容)
> (使用 "git checkout -- <file>..." 丢弃工作区的改动)
> 修改: demo.txt
>修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

我们可以看到 使用 *“git checkout -- <file>..." 丢弃工作区的改动* 这个提示,那我们不妨试一试输入 `git checkout demo.txt`,然后再cat 一下文件

> [root@StrawberryJam Git]# git checkout demo.txt
>[root@StrawberryJam Git]# cat demo.txt
>this is first test
>这是第二次修改
>这是第三次修改

果然撤销了 ~~*我们的第四次添加的内容*~~ ,我们再看看git 的status

> [root@StrawberryJam Git]# git status
> 位于分支 master
> 无文件要提交,干净的工作区

到这里并没有什么大问题,因为我们修改文件后并没有对文件进行`add、 commit` 等操作,那么如果我们是在git add 之后想要撤销怎么办呢,我们重新写入 “这是第四次添加的内容”,并且执行了 `git add demo.txt` 命令

> [root@StrawberryJam Git]# cat demo.txt
>this is first test
>这是第二次修改
>这是第三次修改
>“这是第四次添加的内容”
>[root@StrawberryJam Git]# git add demo.txt

就在add 之后,我后悔了,我不想提交我想撤销怎么办,`git status` 告诉了我们答案

> [root@StrawberryJam Git]# git status
> 位于分支 master
> 要提交的变更:
> (使用 "git reset HEAD <file>..." 撤出暂存区)
> 修改: demo.txt
>[root@StrawberryJam Git]#

提示已经很明确了, *使用 "git reset HEAD <file>..." 撤出暂存区* 那我们不妨试一试

> [root@StrawberryJam Git]# git reset HEAD demo.txt
>重置后撤出暂存区的变更:
>M demo.txt

**注意**!!这样我们的 demo.txt 文件只是回到了 `git add` 之前的状态,并没有对文件内容做出撤回处理,先通过 cat 看一下文件再status一下文件状态

> [root@StrawberryJam Git]# cat demo.txt
>this is first test
>这是第二次修改
>这是第三次修改
>“这是第四次添加的内容”

>[root@StrawberryJam Git]# git status
> 位于分支 master
> 尚未暂存以备提交的变更:
> (使用 "git add <file>..." 更新要提交的内容)
> (使用 "git checkout -- <file>..." 丢弃工作区的改动)
> 修改: demo.txt
>修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

此时我们就可以再次使用 `git checkout demo.txt` 对文件内容作出撤回处理了

> [root@StrawberryJam Git]# git checkout demo.txt
>[root@StrawberryJam Git]# cat demo.txt
>this is first test
>这是第二次修改
>这是第三次修改
>[root@StrawberryJam Git]# git status
>位于分支 master
>无文件要提交,干净的工作区

Ok ~~ 那么如果我又add 了 又 commit了肿么办,那就直接 **回到“备份”** 参考上一节喽~

## 文件的删除
新建一个test.txt 文件并且写入内容,vim test.txt 创建并且打开 文件,写入

> 这是一个即将被Kill掉的文件
> ~
> ~
> ~
> ~

随后 git add 并且 commit 该文件

> [root@StrawberryJam Git]# git add test.txt
>[root@StrawberryJam Git]# git commit -m "bye bye"
>[master c2f3cdf] bye bye
> 1 file changed, 1 insertion(+)
> create mode 100644 test.txt

然后我们的删除命令 `rm test.txt`, 系统会问我们要不要删除文件,回复 y 好了

> [root@StrawberryJam Git]# rm test.txt
>rm:是否删除普通文件 "test.txt"?y

但是这里,删除的只是我们工作区的文件,也就是说 GIT 还有我们的备份的,只是我们当前的版本看不到了而已,那我们如何把这个“备份”也给Kill掉呢,`git status` 给出了答案

> [root@StrawberryJam Git]# git status
> 位于分支 master
> 尚未暂存以备提交的变更:
> (使用 "git add/rm <file>..." 更新要提交的内容)
> (使用 "git checkout -- <file>..." 丢弃工作区的改动)
> 删除: test.txt
>修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

告诉我们可以 *使用 "git add/rm <file>..." 更新要提交的内容* 那我们不妨用 rm 把test.txt从“备份”列表里删除,然后 commit 提交上去重新“备份”确认删除了

> [root@StrawberryJam Git]# git rm test.txt
>rm 'test.txt'
>[root@StrawberryJam Git]# git commit -m "It is gone"
>[master 815d827] It is gone
> 1 file changed, 1 deletion(-)
> delete mode 100644 test.txt

如果是一不下心删除错了文件怎么办呢? 上面的`git status` 还有另一个选项
*使用 "git checkout -- <file>..." 丢弃工作区的改动* 这样你就可以撤销你的`rm` 命令,当作什么都没发生 = .=

Git 命令实战入门 ,奶妈级教程的更多相关文章

  1. 30分钟Git命令“从入门到放弃”

    git 现在的火爆程度非同一般,它被广泛地用在大型开源项目中,但是初学者非常容易“从入门到放弃”,各种命令各种参数,天哪,宝宝要吓哭了.实际上新手并不需要了解所有命令的用途,学习是需要一个循序渐进的过 ...

  2. git命令实战之血泪记录

    注意: 本文章所写所有命令均在Git命令行窗口执行!非cmd窗口! 打开git命令行窗口步骤为:到项目根目录下执行bash命令行操作:右键点击Git Bash Here菜单,打开git命令窗口,不是c ...

  3. git 命令从入门到放弃

    o(︶︿︶)o  由于项目使用 git 作为版本控制工具,自己可以进行一些常用操作但是有时候还是会忘掉,导致每次遇到 git 命令的使用问题时就要再查一遍,效率就立马降下来了,所以今天就来一个从头到尾 ...

  4. nifi从入门到实战(保姆级教程)——身份认证

    上一篇我们搭建好了nifi的运行环境了 但是每次登陆那一串随机字符串的用户名和密码是不是让人很头疼,那是人类能记住的吗?当然不是!!!! 那么今天我们就来消灭这些难看又难记的字符串. windows( ...

  5. nifi从入门到实战(保姆级教程)——环境篇

    背景: 公司领导决定将各种基础数据的导入从代码中分离出来,用Apache Nifi替换.使开发者们更关注在业务上,而不用关心基础的由来. Apache Nifi对于整个团队都是一个全新的工具,之前大家 ...

  6. nifi从入门到实战(保姆级教程)——flow

    本文章首发于博客园,转载请标明出处 经过前两篇文章(环境篇,身份验证),我们已经有了nifi可以运行的基础,今天就来实现一个案例吧. 假设我们要从ftp上获取一个zip包,里面有两个csv文件,一个是 ...

  7. git命令行的操作实例教程

    Git 常用命令常用命令 创建新仓库 创建新文件夹,打开,然后执行 git init 1 以创建新的 git 仓库. 检出仓库 执行如下命令以创建一个本地仓库的克隆版本: git clone /pat ...

  8. Git命令行入门

    安装 下载与文档地址:https://git-scm.com/book/zh/v2 我使用的是linux系统,故使用命令行安装Git # apt-get install git 配置 # git co ...

  9. Git分支实战入门详细图解

    现在我们模拟一个简单的分支和合并案例,其中工作流可供真实项目借鉴. (1)在master开展工作 (2)为新的需求创建分支 (3)在新的分支上展开工作 这时,你接到一个电话,说项目有一个严重的问题需要 ...

随机推荐

  1. 项目页面集成ckeditor富文本编辑器

    步骤一.引入ckeditor.js (注:本实例以ThinkPHP3.2框架为载体,不熟悉ThinkPHP的朋友请自行补习,ckeditor文件代码内容也请去ckeditor官网自行下载) 作为程序员 ...

  2. Vue2.0组件的继承与扩展

    如果有需要源代码,请猛戳源代码 希望文章给大家些许帮助和启发,麻烦大家在GitHub上面点个赞!!!十分感谢 前言 本文将介绍vue2.0中的组件的继承与扩展,主要分享slot.mixins/exte ...

  3. Jessica's Reading Problem POJ - 3320

    Jessica's Reading Problem Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17562   Accep ...

  4. java并发编程基础概念

    本次内容主要讲进程和线程.CPU核心数和线程数.CPU时间片轮转机制.上下文切换,并行和并发的基本概念以及并发编程的好处和注意事项,为java并发编程打下扎实基础. 1.什么是进程和线程 1.1 进程 ...

  5. 认识Nginx

    无论你用浏览器还是APP访问多数网站,到达的第一站就是Nginx. 后来者居上的Nginx 千禧年前后,互联网业务迎来了高速发展,老牌的Web服务器都无法满足高性能.高可靠的市场需求. 一个开源的(遵 ...

  6. zabbix基本概述

    #zabbix简介 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案 #官网地址 #官方网站 http://www.zabbix.com #zabbix4.2 ...

  7. mysql 学习日记 悲观和乐观锁

    理解  悲观锁就是什么事情都是需要小心翼翼,生怕弄错了出大问题, 一般情况下 "增删改" 都是有事务在进行操作的,但是 "查" 是不需要事务操作的, 但是凡事没 ...

  8. Redis01——Redis究竟支持哪些数据结构

    Redis已经越来越多地应用到互联网技术中,而关于Redis的相关问题,也成为面试中必不可少的一部分,本文开始将会逐渐把我了解到的关于Redis的一些面试问题整理出来,供各位参考,如有不对之处,烦请指 ...

  9. SpringBoot+AOP构建多数据源的切换实践

    针对微服务架构中常用的设计模块,通常我们都会需要使用到druid作为我们的数据连接池,当架构发生扩展的时候 ,通常面对的数据存储服务器也会渐渐增加,从原本的单库架构逐渐扩展为复杂的多库架构. 当在业务 ...

  10. 源码分析 Sentinel 之 Dubbo 适配原理

    目录 1.源码分析 SentinelDubboConsumerFilter 2.源码分析 SentienlDubboProviderFilters 3.Sentienl Dubbo FallBack ...