Git学习(一)本地操作
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学习(一)本地操作相关推荐
- git笔记(本地操作教程)
git笔记(本地操作教程) git笔记(团队协作教程,GitHub操作) git笔记(IDEA 集成 Git) git笔记(IDEA 集成 GitHub) 自建代码托管平台-GitLab 官网地址: ...
- 【git学习】本地关联远程仓库
目录 一.本地仓库关联远程仓库(新建仓库) 二.拉取远程分支到本地(已有远程仓库) 一.本地仓库关联远程仓库(新建仓库) 本地新建工程,然后关联远程git仓库并向远程仓库提交代码. 1.本地新建工程, ...
- git id 切分支 按_Git分支本地操作详解
原文链接:http://www.jianshu.com/p/c05231e6a65a 引言 在上一节中我们对Git的常用本地操作的命令进行详解,而本节要讲解的是Git的分支, 在讲解之前补充两点概念性 ...
- 【git学习笔记(一)】Git基础
前言:这段时间,打算学习一下git的操作,了解一下原理,而不是仅仅局限于一些基础的操作,特在此记录一下. 2.1Git基础–获取Git仓库 目的:能够配置并初始化一个仓库(repository).开始 ...
- git的学习笔记(一):git本地操作
1.Git介绍 Git是一个开源的分布式版本控制软件,用以有效.高速的处理从很小到非常大的项目版本管理. Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发. Git ...
- Git - 学习/实践 - 以及相关操作
1.环境 win10 64位 专业版 默认, 已安装git.[git bash]所有操作均在git bash 中. 2.使用 1. 文档阅读/查阅 https://git-scm.com/docsht ...
- 【Git学习】3步将GitHub上的项目clone到本地
环境:Windows 下载安装Git 下载包可以从官网下载,嫌速度慢可以在软件管家下载.下载后安装,一直点击next就可以了,选择editor的时候我选择的是visual studio code,如果 ...
- git add . 之后 想执行回滚操作(git add 到本地仓库的代码回滚到没有add 之前的操作)
git add 到本地仓库的代码回滚到没有add 之前的操作 ,如果git 非常熟悉临时忘记了命令 回滚单个文件的命令:git restore --staged xx文件名 回滚所有add 的文件直 ...
- python002 一 eg: Python 入门技巧__环境搭建__git使用、git本地操作、 自建gitlab服务器
一,环境准备(准备python开发环境) 官网地址: http://www.python.org 进去之后点击导航栏的Downloads,也可以鼠标放到Downloads上弹出菜单选择Source c ...
- git reset后本地拉取_Git学习笔记
git工作区和本地仓库 创建本地版本库 mkdir learnGitcd learnGitgit init 添加到暂存区 touch learn.mdopen learn.mdgit add lear ...
最新文章
- 1063 Set Similarity
- 【深度学习入门到精通系列】遗传算法 (Genetic Algorithm)
- gatekeeper学习概述
- idea构建springboot项目右边没有maven_写给新手看的 Spring Boot 入门学习指南
- linux管理进程和计划任务,Linux进程和计划任务管理
- bootstrap 模态框日期控件datepicker被遮住问题的解决
- HFS 2.3x 远程命令执行(抓鸡黑客末日)
- 几种常用的PID控制算法
- Linux下七种文件类型、文件属性及其查看方法
- 开源工具TestDisk数据恢复方法
- 《学习 Go 语言》学习心得
- 【转】写给自学者的入门指南
- 个人网络信息安全管理方法分享
- C语言的从零开始和我自己的心路历程
- 概率论:均值、方差与协方差矩阵
- 在命令行下快速进入某一级目录
- 最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官
- 对java的粗浅理解
- 反射机制-Reflected
- 数据挖掘在金融行业十大应用
热门文章
- bzoj 1645: [Usaco2007 Open]City Horizon 城市地平线(线段树扫描线)
- Prewitt滤波器的实现,对比Prewitt滤波器和Sobel滤波器提取图像边缘的效果
- postman使用教程,接口自动化测试
- 通过helm在k8s上部署spark(伪集群版)
- 十八.搭建Nginx服务器、配置网页认证、基于域名的虚拟主机、ssl虚拟主机
- Autorelease Pool
- 一次失败的做题经历(HDU2112)
- go15---select
- asp.net 导出word文档
- [转载] python 字符串包含某个字符_python字符串