我不会用*官方*的语言告诉你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. kafka知识整理

    title: kafka知识整理 date: 2019-06-18 10:59:46 categories: MQ tags: kafka --- 转载自:https://www.cnblogs.co ...

  2. Android Base64图片无法长按保存 问题解决

    踩了一个巨坑. 目前微信ios/android 均能长按保存src=base64的图片  (微信android x5 专门解决了这个问题); 但是android其他App没有针对解决这个系统问题(姑且 ...

  3. RestTemplate 负载均衡原理

    RestTemplate 是通过拦截器改变请求的URI的方式来指定服务器的,此处将通过一个自定义LoadBalanced的方式来进行说明 1.导入jar包 <parent> <gro ...

  4. seo搜索优化教程13-SEO搜索引擎站点收录

    为了使大家更方便的了解及学习网络营销推广.seo搜索优化,星辉科技强势推出seo搜索优化教程.此为seo教程第13课 想要用户能够在搜索引擎中通过关键词搜索到您的页面信息,首先要做的是让搜索引擎收录您 ...

  5. linux命令行界面如何安装图形化界面

    linux命令行界面如何安装图形化界面 目录 问题描述 解决方案 安装包 测试是否安装成功 如何卸载图形化界面 遭遇问题 问题描述 当我们在安装Linux系统时,我们一开始可能安装的是非图形界面的系统 ...

  6. 【tomcat系列】配置tomcat远程访问

    当程序部署在tomcat上后,需要监测tomcat的性能和监测tomcat的各项指标,如内存使用情况,cpu使用情况,jvm实际情况等,对于这些指标的监控,tomcat提供了访问入口,然而tomcat ...

  7. JVM01——JVM内存区域的构成

    从本文开始将为各位带来JVM方面的知识点,关注我的公众号「Java面典」了解更多Java相关知识点. JVM内存主要分为三部分线程私有(Thread Local).线程共享(Thread Shared ...

  8. Silence主题 美观清爽的cnblog第三方主题

    为什么推荐? 才开通cnblog,但苦于官方主题都不是很好看,翻找Github的时候发现了这个项目Silence 这是预览地址 官方展示图片 安装中的坑 不显示公共模块.博文目录.博文签名.博文赞赏. ...

  9. 基于Redis未授权访问的挖矿蠕虫分析

    0x01 攻击方式 利用的是通用漏洞入侵服务器并获得相关权限,从而植入挖矿程序再进行隐藏. 通过对脚本的分析,发现黑客主要是利用 Redis未授权访问漏洞进行入侵.脚本里有个python函数. imp ...

  10. vscode在执行 npm任务的时候,会先执行package的name@version 然后命令名 加 当前路径,问题是我的引入路径e是小写的,会导致调试错误,解决方案:没找到,先手书吧

    vscode在执行 npm任务的时候,会先执行package的name@version 然后命令名 加 当前路径,问题是我的引入路径e是小写的,会导致调试错误,解决方案:没找到 Executing t ...