[原]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. 远程仓库 ...
随机推荐
- Vue中计算属性与class,style绑定
var vm=new Vue({ el:'#app', data:{ a:2, }, computed:{ //这里的b是计算属性:默认getter b:{ get:function(){ retur ...
- Yii2.0 to(), toRoute(), current()区别用法
[Url::current] - 现在测试本地路径(http://daxia.dc.weixin.com/mobile/hmConnections/user/verify-user) a: //获取当 ...
- Junit结合Spring对Dao层进行单元测试
关于单元测试,上一次就简单的概念和Mock基础做了,参考:http://60.174.249.204:8888/in/modules/article/view.article.php/74 实际开发过 ...
- 第一篇 一步一步看透C++
毕业快一年半了,这些时候,都是在底层方面做的一些工作,虽然内核的C也实现了C++中的一些抽象机制,面向对象,继承,多态,封装等等,但是,想着大学里面,电子类的学习,都是偏向底层的,有过C++的 ...
- 在PHP中使用curl_init函数的说明
$ch = curl_init(); $c_url = 'http://www.baidu.com'; $c_url_data = "product_&type=".$ty ...
- 查询SQL阻塞语句
SELECT SPID=p.spid, DBName = convert(CHAR(),d.name), ProgramName = program_name, LoginName = convert ...
- phpcms v9模板制作常用代码集合(转)
phpcms v9模板制作常用代码集合(个人收藏) 1.截取调用标题长度 {str_cut($r[title],36,'')} 2.格式化时间 调用格式化时间 2011-05-06 11:22:33 ...
- sublime text--你所不知道的12个秘密
转自:http://blog.csdn.net/laokdidiao/article/details/51429404 package control安装: 第一种方法是在控制台中复制粘贴代码按回车, ...
- Explore Basic Behavior of the TurtleBot ---3
原创博文:转载请标明出处(周学伟):http://www.cnblogs.com/zxouxuewei/tag/ Introduction 此示例帮助您使用turtlebot的自主性. 驱动机器人向前 ...
- Spring父容器与子容器
在使用spring+springMVC的web工程中,我们一般会在web.xml中做如下配置: <context-param> <param-name>contextConfi ...