[原]git的使用(一)---建立本地仓库、add和commit、status和git diff、版本回退使用git reset
在window下已经安装了git的环境
1.建立本地仓库
mkdir test #建立test目录
cd test #进入目录
git init #创建好了本地git仓库,会发现在test目录中多了一个.git目录,并且这个目录是隐藏的
示例:
$ git init
Initialized empty Git repository in F:/git-repo/test/.git/
init前
init后
2.提交文件到中转站和仓库(add和commit)
使用Notepad++创建一个文本文件readme.txt
(记得把Notepad++的默认编码设置为UTF-8 without BOM)不能使用记事本等其他工具创建
readme.txt文件位于test目录中
readme.txt文件内容为:
Git is a version control system.
Git is free software.
[提交到中转站]在路径为test目录中执行命令
$ git add readme.txt #告诉git 将readme.txt文件添加到仓库等等提交(也可以认为添加到了仓库中转站)没有任何输出表示正确添加到中转站
[提交到仓库]在路径为test目录中执行命令
$ git commit -m "wrote a readme file" #告诉git 将刚才放置在中转站的提交到仓库 并给这个提交动作附上一个标签
[master (root-commit) 51af5b3] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
注意:注意:注意:
为什么提交要用add和commit 因为可以add多个文件到中转站,一次commit就可以将中转站中的文件提交到仓库。
比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
------------------------------------------------------add时遇到的warning-----------------------------------------
$ git add file1.txt
warning: LF will be replaced by CRLF in test.txt.
The file will have its original line endings in your working directory.
------------------------------------------------------需要了解的概念-----------------------------------------
LF是linux下的换行符,而CRLF是enter + 换行
当创建文档的时候使用的环境是windows,而git运行环境在linux环境
-------------------------------------------------------解决这个warning--------------------------------------
git config --global core.autocrlf false
----------------------------------------------------------end--------------------------------------------------
3.git status和git diff
一般步骤为,检查init的git仓库的文件是否有修改 git status
如果有修改就查看修改的地方是不是正确的 git diff
如果修改正确的就提交的中转站 git add <file>
不清楚是否正确提交到中转站 git status
如果正确就再提交到仓库确保代码正常 git commit <file> -m "string"
$ git status #查看init仓库所有文件的状态,即
查看当前文件test目录中的所有文件的状态(未修改/修改/更新)包括中转站中的文件状态
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: readme.txt # 红色表示此文件被修改 no changes added to commit (use "git add" and/or "git commit -a")
$ git diff readme.txt #查看被修改的文件,修改了哪些东西
diff --git a/readme.txt b/readme.txt #比较修改前和修改后的文件
index d8036c1..53d4271
--- a/readme.txt
+++ b/readme.txt #在readme.txt中做了增加操作
@@ -, +, @@
-Git is a version control system.
-Git is free software.
\ No newline at end of file
+Git is a distributed version control system.
+Git is free software.
$ git add readme.txt #检查修改无误后提交到中转站
$ git status #确认各个文件的状态和中转站里的文件
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage) modified: readme.txt
$ git commit readme.txt -m "add distributed " #将中转站里的文件提交到.git仓库
[master ] add distributed
file changed, insertions(+), deletions(-)
最后,相当于所有的修改都已经提交到了git仓库里面
$ git status #查看整个Test目录的结果
On branch master
nothing to commit, working directory clean #已经clean了
4.git的快照commit
从之前的改动到现在已经提交了三个版本的readme.txt到.git仓库
版本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.
查看git的快照commit,需要使用git log:
类似每次快照都要产生log文件,需要用git log来查看快照,git log是按照最新到最旧来显示。
如下:
################################
【需要了解的概念】:Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交3628164...882e1e0
(注意我的提交ID和你的肯定不一样),
上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
################################ $ git log
commit f78cd0925b2bc2883d7ed4de49b1a851367ae56d #这一串数字代表快照的id号,由SHA1产生
Author: userlhb <lhb@lhb.com>
Date: Sat Mar :: +0800 #最新的commit快照 也叫做HEAD快照 append GPL commit 96829291d720b3b84d0ab2a5aad89b0af97a1394
Author: userlhb <lhb@lhb.com>
Date: Sat Mar :: + add distributed #这是HEAD快照的前一个快照 用HEAD^表示 commit 51af5b36b85c52e86b6140d3a73b5e22cd3f78da
Author: userlhb <lhb@lhb.com>
Date: Sat Mar :: +0800 #最旧的commit快照 wrote a readme file #这是HEAD快照的前前一个快照 用HEAD^^表示,问题来了?如果前前一百个,怎么表示? HEAD~100
或者显示为一行,添加--pretty=oneline
$ git log --pretty=oneline
f78cd0925b2bc2883d7ed4de49b1a851367ae56d append GPL
96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed
51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file
5.git中实现版本回退使用git reset
先看下面两幅图两分钟:
--------------------------------------------------------------------------------------------
图一 表示当前在append GPL这个版本上
-----------------------------------------------------------------------------------------------------
图二 表示当前在wrote a readme file这个版本上。
[看图说明]
git reset 可以控制指针 HEAD 在不同的快照直接切换,如果需要切换到上一个快照用git reset --hard HEAD^
git reset 和 git commit <file> -m "string" 的动作会被记录到git reflog中,使用git reflog可以查看记录
git log 查看所有提交到版本库中的快照(版本)
---------------------------------------------------------------------------------------------------
[实践出真知]
看图一,理解回退。
回退到中间那个版本add disributed
$ git log --pretty=oneline #列出.git仓库中的所有版本号
f78cd0925b2bc2883d7ed4de49b1a851367ae56d append GPL
96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed
51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file $ git reset --hard HEAD^ #回退到前一个版本add distributed
Unstaged changes after reset:
M readme.txt $ git log --pretty=oneline #查看是否回退到add distributed,不能查看之前的版本。
96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed
51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file
有没有发现什么?对,回退到add distributed后,不能查看之前的版本。要是又要回退到最开始那个版本怎么办呢?
看图二,理解回退到仓库中最新的那个版本:因为 git reflog 能记录 git reset和git commit <file> -m "string"的动作,所以可以
使用git reflog来查看每个动作的id号,然后通过id号回退到最新的那个版本append GPL
[实践出真知]
$ git reflog #罗列出所有的HEAD动作
HEAD@{}: reset: moving to HEAD^
f78cd09 HEAD@{}: commit: append GPL #append GPL 的id是 f78cd09
HEAD@{}: commit: add distributed
51af5b3 HEAD@{}: commit (initial): wrote a readme file $ git reset --hard f78cd09 #移动HEAD指针到 f78cd09 即 append GPL $ git log --pretty=oneline #查看是否切换到append GPL 这个版本
f78cd0925b2bc2883d7ed4de49b1a851367ae56d append GPL
96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed
51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file
接下一篇:git的使用(二)
参考git教程:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
[原]git的使用(一)---建立本地仓库、add和commit、status和git diff、版本回退使用git reset的更多相关文章
- 如何使用Git建立本地仓库并上传代码到GitHub
使用Git建立本地仓库并上传代码到GitHub 工具/原料 电脑安装git客户端.注册github账号并登陆 方法/步骤 到本地项目文件夹右键选择git bash here 输入个人信 ...
- maven建立本地仓库
maven 建立本地仓库 博客分类: java,maven,nexus 前面我讲到为什么要使用 Maven, Maven 的安装,以及 如何与 IDE 集成等,前面的介绍可以认为是一个 Hello ...
- gitlab 建立本地仓库
1.首先在gitlib上进行注册 注册与登录 为了用户的隐私,我们的私人 GitLab 平台关闭了自主注册.申请 GitLab 账号请联系工作站管理员:liuhaoyang@pku.edu.cn 初次 ...
- Git 学习(三)本地仓库操作——git add & commit
Git 学习(三)本地仓库操作——git add & commit Git 和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念.这在上文已有提及,本文具体说明什么是工作区及暂存区,以及 ...
- Git学习-安装与创建本地仓库
前言 以前公司进行项目的版本管理都是用svn,最近公司推荐用git,把svn给关闭了.没办法,拿来主义.网上一番猛操作,勉强也能用了,给自己做个笔记. git安装 因为我用的是windos系统,在Wi ...
- git学习(一):建立本地仓库和基本命令
前沿 最近一直在做目标跟踪,开始一直是通过文件按日期命名的方式来区分版本的,实在是太麻烦了,现在下定决心学习一下git命令 基本概念 集中式:有一台中央服务器,每个人把需要改的部分拿回去改完再送回来 ...
- Git创建一个自己的本地仓库
如果我们要把一个项目加入到Git的版本管理中,可以在项目所在的目录用git init命令建立一个空的本地仓库,然后再用git add命令把它们都加入到Git本地仓库的暂存区(stage or inde ...
- git用法小结(1)--建立远程仓库
最近一直在学习使用git来管理自己的程序,总是今天东学一点,明天西凑一点,到用的时候,总是有些茫然不知所措. 在博客园里看见一篇老好的文章,教我们做笔记啦,但是做完笔记还是要记得总结哦! 来吧,让我们 ...
- 1、git基础介绍及远程/本地仓库、分支
1. Git基础介绍 基于Git进行开发时,首先需要将远程仓库代码clone到本地,即为本地仓库.后续大部分时间都是基于本地仓库上的分支进行编码,最后将本地仓库的代码合入远程仓库. 1.1. 远程仓库 ...
随机推荐
- PHP中全局变量的使用global和$GLOBALS[]
From: http://blog.csdn.net/happyqyt/article/details/7219889 用PHP开发项目,不可避免的会使用到全局变量,比如一些网站的配置信息,全站通用, ...
- 精挑细选 8款HTML5/jQuery应用助网站走向高上大
在WEB3.0的时代,我们的网站不仅要实现实用价值,更要为用户设计优秀的用户体验.jQuery是一个不错的JS框架,结合目前最新的HTML5技术,我们可以将自己的网站脱胎换骨,立马走向高上大,至少在前 ...
- PHP内置函数生成随机数的方法汇总
PHP内部生成随机数的方法相比其他方法简单,不需要额外配置,是生成随机数的首选方案. 1 rand函数 rand() 函数可以不加任何参数,就可以生成随机整数.如果要设置随机数范围,可以在函数中设置 ...
- Blender下各种坐标系
转载:https://jingyan.baidu.com/article/ed2a5d1f8f018309f7be1779.html 打开blender创建一个立方体. 切换到“自身”坐标系,旋转 ...
- SQLSERVER 2008 技术内幕 T-SQL查询 笔记1: SQL 执行顺序
与大多数语言一样,SQL语言也有一个执行顺序,只是在大多数编程语言中,代码是按照编写顺序来处理的,而在SQL中则不是,下图为SQL 执行顺序. () ) [ ALL | DISTINCT ] () [ ...
- 按键精灵如何批量复制文本,再往excel里面一次性粘贴?
原帖地址 http://zhidao.baidu.com/link?url=M2A9E1JF7wAzjtxMQG9uiW_PvP39HVlfwn6zDMzk9m6U05JA37SrgDcrVXg_c9 ...
- Linux系统下wetty安装和使用说明
1. Wetty简介 Wetty是使用Node.js和websockets开发的一个开源Web-based SSH.关于Web-based SSH的更多资料请参考https://en.wikipedi ...
- 小程序实现textarea随输入的文字行数变化高度自动增加
参考链接:https://blog.csdn.net/liuwengai/article/details/78987957 该实现方法是根据上面的链接改编为小程序的实现,代码如下: wxml: < ...
- JSP输出当前日期
如何在网页中动态交互,输出当前日期? <%@ page language="java" import="java.util.*" contentType= ...
- Thinkphp 模板中使用自定义函数的方法
1.number_format {$number|number_format=2} 千分位,保留两位小数 2.round {$number|round=2} 四舍五入保留两位小数