Git使用

廖雪峰官方网站
git基本操作,一篇文章就够了!

一、打开git

在指定要作为仓库的文件下打开 Git Bash Here

二、确定用户信息

第一次使用git,配置用户信息。目的是确定本地仓库的使用者身份

配置用户名:git config --global user.name “your name”;
配置用户邮箱:git config --global user.email “youremail@github.com”;

三、创建git仓库

在git命令框输入一下命令回车 结果会出现一个.git文件

命令 : git init

四、查询当前工作区所有文件的状态

命令:git status


创建一个文件paper1.txt再查询当前工作区所有文件的状态

五、将文件提交到暂存区

命令 : git add 文件名

1、提交工作区所有文件到暂存区:git add ;
2、提交工作区中指定文件到暂存区:git add  file1  file2 ...;
3、提交工作区中某个文件夹中所有文件到暂存区:git add [dir];

提交后查询当前工作区所有文件的状态

我们再新创建两个.txt文件再将新建的文件也提交到暂存区,此时暂存区总共有三个文件

六、提交文件到本地版本库

命令:git commit -m “commit_info”;

1、将暂存区中的文件提交到本地仓库中,即打上新版本:git commit -m “commit_info”;
2、将所有已经使用git管理过的文件暂存后一并提交,跳过add到暂存区的过程:git commit -a -m “commit_info”;
3、提交文件时,发现漏掉几个文件,或者注释写错了,可以撤销上一次提交:git commit --amend;

针对于命令3:
git commit --amend 可以取消上一次提交,并且将暂存区的文件重新提交。也可以不修改内容,仅对描述进行修改。
使用上述命令后会进入vim编辑器中 刚进去时发现怎么也输入都没反应,是因为此时vim编辑器处于不可编辑状态,输入字母 c
可以进入编辑状态,这个时候就可以修改注释信息啦 ~

修改完之后按esc键退出编辑状态,再按大写ZZ就可以保存退出vim编辑器或者vim操作符中说的 :qw 可以保存并退出

进入编辑模式:

小写i :在光标所在行位置停止不动开始写入内容
大写I :在光标所在行行首开始写入内容
小写a :在光标所在行当前字符后开始写入内容
大写A :在光标所在行行尾开始写入内容
小写o :在光标所在行下一行开始写入内容
大写O :在光标所在行上一行开始写入内容

退出编辑模式:先按Esc 再输入下面语法 回车即可

:w :保存文本
:q :退出编辑模式
:w! :强制保存,在root用户下即使文本只读也可以强制保存
:q! :强制退出,所有改动不生效
:wq :保存并退出

七、修改文件

我们继续修改paper1.txt文件,改成如下内容:

Git is a distributed version control system.
Git is free software

运行git status命令看看结果

上面的命令输出告诉我们,paper1.txt被修改过了,但修改后还没有提交到暂存区,或者本地仓库。

八、查看修改的内容

git status 命令只能查看当前工作区文件的状态 只能知道文件paper1.txt被修改了,具体修改内容并不知道,要想知道在提交到暂存区之前修改的具体内容需要使用git diff命令

命令: git diff 文件名

可以从上面的命令输出看到,我们在第一行后添加了两行

+Git is a distributed version control system.
+Git is free software

知道了对paper1.txt作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步,第一步是git add:第二步git commit -m 最后查看当前工作区文件的状态 git status

Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的。

九、版本退回

版本1:wrote a readme file

Git is a version control system.
Git is free software.

版本2:add distributed

Git is a distributed version control system.
Git is free software.

版本3:append GPL

Git is a distributed version control system.
Git is free software distributed under the GPL.

1、显示日志

命令 git log

2、显示简洁日志

命令 git log --pretty=oneline

现在准备把readme.txt回退到上一个版本,也就是add distributed的那个版本。
注意:

在Git中,用HEAD表示当前版本,也就是最新的提交1094adb…(注意我的提交ID和你的肯定不一样),上一个版本就是 HEAD^ ,上上一个版本就是 HEAD^^ ,当然往上100个版本写100个^比较容易数不过来,所以写成 HEAD~100

3、回退上一版本

现在,我们要把当前版本append GPL回退到上一个版本add distributed,就可以使用git reset命令

命令:git reset

Git reset --hard HEAD^ 和 Git reset HEAD^ 的区别
即有没有–hard 有什么区别?
有–hard 文件是最新状态
没有–hard 文件是修改未 commit 的状态,即修改内容不会丢失

看看readme.txt的内容是不是版本add distributed

4、使用命令 cat 文件 来查看文件内容


发现我们由版本2回到了版本2
查看一下日志 发现记录中版本3的信息记录没了

十、版本回退后再回来

1、回退指定版本

再回到版本三怎么做,因为每个版本都有一个唯一的哈希标识码(commit id),我们只需要 “git reset 相应标识码” 即可回到相应的版本,只注意 版本标识码只要输入一部分保证唯一即可,git会自动补全

实际上我们可以根据版本标识码(commit id)进入到任何一个版本中。

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:

然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。

2、显示命令历史记录

当不知道版本的(commit id)时怎么办? 我们需要利用命令git reflog找到(commit id)
Git提供了一个命令git reflog用来记录你的每一次命令:

命令:git reflog


然后 找到了版本3的commit id 的信息为53d0f。

十一、工作区与暂存区

1、工作区(Working Directory)

工作区:本地电脑存放项目文件的地方,比如learngit文件夹

2、版本库(Repository)

版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

3、暂存区

暂存区:Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区

还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

4、理解add和commit 过程

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

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

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

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
假设工作区只有 readme.txt一个文件 此时结构如下

先对readme.txt做个修改,加上一行内容:

Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage

然后,在工作区新增一个LICENSE文本文件(内容随便写)。

先用git status查看一下状态:

Git非常清楚地告诉我们,readme.txt被修改了,而LICENSE还从来没有被添加过,所以它的状态是Untracked。

现在,使用两次命令git add,把readme.txt和LICENSE都添加后,用git status再查看一下:


所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支

十二、commit提交的内容是暂存区的所有内容

查看readme.txt的内容

添加一行“Git tracks changes.”再查看

将修改后的readme.txt用git add添加到暂存区

再修改一次readme.txt,将“Git tracks changes.”改为“Git tracks changes of files.”再查看:

将修改后的readme.txt用git commit直接提交到本地版本库

提交后,再看看状态:

结果发现第二次的修改没有被提交,为什么?原因如下

我们回顾一下操作过程:
第一次修改 -> git add -> 第二次修改 -> git commit
你看,我们前面讲了,Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

提交后,用git diff HEAD – readme.txt命令可以查看工作区和版本库里面最新版本的区别:

命令: git diff HEAD – 文件名(或路径“–”前后有空格)


可见,工作区与版本库里面最新版本是有区别的,第二次修改确实没有被提交
那怎么提交第二次修改呢?

你可以继续git add再git commit,也可以别着急提交第一次修改,先git add第二次修改,再git commit,就相当于把两次修改合并后一块提交了:
第一次修改 -> git add -> 第二次修改 -> git add -> git commit

小结:Git跟踪并管理的是修改,而非文件。
什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。每次修改,如果不用git add到暂存区,那就不会加入到commit中。

十三、丢弃或撤销修改

1、撤销工作区的修改

当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令 git checkout – file

命令:git checkout – file。

命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。 总之,就是让这个文件回到最近一次git
commit或git add时的状态

情况1

原始–>修改–>修改–>git checkout 结果为
原始

readme.txt 原内容

修改 添加一行“The first case…”但没有git add 到暂存区

使用命令 git checkout – file 撤回

情况2

原始–>修改–>git add–>修改–>git add -->修改–>修改–>git checkout 结果为
原始–>修改–>git add–>修改–>git add

readme.txt 原内容

添加一行“1111111111111111111111111111”并git add到暂存区

添加一行“2222222222222222222222222222”并git add到暂存区
添加一行“3333333333333333333333333333” 不git add到暂存区

添加一行“4444444444444444444444444444” 不git add到暂存区


使用 git chechout – file 撤回

小结: 命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。 总之,就是让这个文件回到最近一次git
commit或git add时的状态
git checkout – file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

情况3

原始–>修改–>git add–>修改–>git add -->修改–>修改–>git checkout 结果为
原始

readme.txt原文

添加一行“1111111111111111111111111111”并git add到暂存区
添加一行“2222222222222222222222222222”并git add到暂存区
添加一行“3333333333333333333333333333” 不git add到暂存区
添加一行“4444444444444444444444444444” 不git add到暂存区


查看状态

用命令git reset HEAD 可以把暂存区的修改撤销掉(unstage),重新放回工作区:

命令:git reset HEAD

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

再用git status查看一下,现在暂存区是干净的,工作区有修改:

最后使用命令git checkout – file丢弃工作区的修改

最终回到了初始状态。

总结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout – file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,使用版本回退,不过前提是没有推送到远程库。

十四、删除和恢复删除文件

首先 工作区有5个文件 注意 已经全部丢提交到本地版本库中了

1、删除工作区文件

使用命令 rm paper3.txt 删除工作区文件paper3.txt

命令:rm 文件名(路径)


删除工作区文件paper3.txt文件后,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了

现在有两个选择,一是确实要从版本库中删除该文件,二是不想删除了,想从版本库中恢复刚刚删除的文件

2、情况1 确认删除工作区文件并提交删除

现在有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit,文件就从版本库中被删除了。

命令:git rm 文件名(路径)

2、情况2 想从版本库中恢复刚刚删除的文件

因为刚刚已经从版本库中删除了paper3.txt 现在已经无法从版本库中恢复了。要想恢复只能回退到上一个版本,这里不回退了。用paper2.txt演示。

先删除paper2.txt,查看状态

如何恢复呢?因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

命令: git checkout – 被删除的文件的文件名(路径)

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
注意: 从来没有被添加到版本库就被删除的文件,是无法恢复的!

小结

命令git rm用于删除一个文件。如果这个文件之前已经被提交到版本库,那么你在工作区永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

Git学习(一)本地操作相关推荐

  1. git笔记(本地操作教程)

    git笔记(本地操作教程) git笔记(团队协作教程,GitHub操作) git笔记(IDEA 集成 Git) git笔记(IDEA 集成 GitHub) 自建代码托管平台-GitLab 官网地址: ...

  2. 【git学习】本地关联远程仓库

    目录 一.本地仓库关联远程仓库(新建仓库) 二.拉取远程分支到本地(已有远程仓库) 一.本地仓库关联远程仓库(新建仓库) 本地新建工程,然后关联远程git仓库并向远程仓库提交代码. 1.本地新建工程, ...

  3. git id 切分支 按_Git分支本地操作详解

    原文链接:http://www.jianshu.com/p/c05231e6a65a 引言 在上一节中我们对Git的常用本地操作的命令进行详解,而本节要讲解的是Git的分支, 在讲解之前补充两点概念性 ...

  4. 【git学习笔记(一)】Git基础

    前言:这段时间,打算学习一下git的操作,了解一下原理,而不是仅仅局限于一些基础的操作,特在此记录一下. 2.1Git基础–获取Git仓库 目的:能够配置并初始化一个仓库(repository).开始 ...

  5. git的学习笔记(一):git本地操作

    1.Git介绍 Git是一个开源的分布式版本控制软件,用以有效.高速的处理从很小到非常大的项目版本管理. Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发. Git ...

  6. Git - 学习/实践 - 以及相关操作

    1.环境 win10 64位 专业版 默认, 已安装git.[git bash]所有操作均在git bash 中. 2.使用 1. 文档阅读/查阅 https://git-scm.com/docsht ...

  7. 【Git学习】3步将GitHub上的项目clone到本地

    环境:Windows 下载安装Git 下载包可以从官网下载,嫌速度慢可以在软件管家下载.下载后安装,一直点击next就可以了,选择editor的时候我选择的是visual studio code,如果 ...

  8. git add . 之后 想执行回滚操作(git add 到本地仓库的代码回滚到没有add 之前的操作)

    git add 到本地仓库的代码回滚到没有add 之前的操作 ,如果git 非常熟悉临时忘记了命令 回滚单个文件的命令:git restore --staged  xx文件名 回滚所有add 的文件直 ...

  9. python002 一 eg: Python 入门技巧__环境搭建__git使用、git本地操作、 自建gitlab服务器

    一,环境准备(准备python开发环境) 官网地址: http://www.python.org 进去之后点击导航栏的Downloads,也可以鼠标放到Downloads上弹出菜单选择Source c ...

  10. git reset后本地拉取_Git学习笔记

    git工作区和本地仓库 创建本地版本库 mkdir learnGitcd learnGitgit init 添加到暂存区 touch learn.mdopen learn.mdgit add lear ...

最新文章

  1. 1063 Set Similarity
  2. 【深度学习入门到精通系列】遗传算法 (Genetic Algorithm)
  3. gatekeeper学习概述
  4. idea构建springboot项目右边没有maven_写给新手看的 Spring Boot 入门学习指南
  5. linux管理进程和计划任务,Linux进程和计划任务管理
  6. bootstrap 模态框日期控件datepicker被遮住问题的解决
  7. HFS 2.3x 远程命令执行(抓鸡黑客末日)
  8. 几种常用的PID控制算法
  9. Linux下七种文件类型、文件属性及其查看方法
  10. 开源工具TestDisk数据恢复方法
  11. 《学习 Go 语言》学习心得
  12. 【转】写给自学者的入门指南
  13. 个人网络信息安全管理方法分享
  14. C语言的从零开始和我自己的心路历程
  15. 概率论:均值、方差与协方差矩阵
  16. 在命令行下快速进入某一级目录
  17. 最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官
  18. 对java的粗浅理解
  19. 反射机制-Reflected
  20. 数据挖掘在金融行业十大应用

热门文章

  1. bzoj 1645: [Usaco2007 Open]City Horizon 城市地平线(线段树扫描线)
  2. Prewitt滤波器的实现,对比Prewitt滤波器和Sobel滤波器提取图像边缘的效果
  3. postman使用教程,接口自动化测试
  4. 通过helm在k8s上部署spark(伪集群版)
  5. 十八.搭建Nginx服务器、配置网页认证、基于域名的虚拟主机、ssl虚拟主机
  6. Autorelease Pool
  7. 一次失败的做题经历(HDU2112)
  8. go15---select
  9. asp.net 导出word文档
  10. [转载] python 字符串包含某个字符_python字符串