在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的更多相关文章

  1. 如何使用Git建立本地仓库并上传代码到GitHub

    使用Git建立本地仓库并上传代码到GitHub 工具/原料   电脑安装git客户端.注册github账号并登陆 方法/步骤     到本地项目文件夹右键选择git bash here   输入个人信 ...

  2. maven建立本地仓库

    maven 建立本地仓库 博客分类: java,maven,nexus   前面我讲到为什么要使用 Maven, Maven 的安装,以及 如何与 IDE 集成等,前面的介绍可以认为是一个 Hello ...

  3. gitlab 建立本地仓库

    1.首先在gitlib上进行注册 注册与登录 为了用户的隐私,我们的私人 GitLab 平台关闭了自主注册.申请 GitLab 账号请联系工作站管理员:liuhaoyang@pku.edu.cn 初次 ...

  4. Git 学习(三)本地仓库操作——git add & commit

    Git 学习(三)本地仓库操作——git add & commit Git 和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念.这在上文已有提及,本文具体说明什么是工作区及暂存区,以及 ...

  5. Git学习-安装与创建本地仓库

    前言 以前公司进行项目的版本管理都是用svn,最近公司推荐用git,把svn给关闭了.没办法,拿来主义.网上一番猛操作,勉强也能用了,给自己做个笔记. git安装 因为我用的是windos系统,在Wi ...

  6. git学习(一):建立本地仓库和基本命令

    前沿 最近一直在做目标跟踪,开始一直是通过文件按日期命名的方式来区分版本的,实在是太麻烦了,现在下定决心学习一下git命令 基本概念 集中式:有一台中央服务器,每个人把需要改的部分拿回去改完再送回来 ...

  7. Git创建一个自己的本地仓库

    如果我们要把一个项目加入到Git的版本管理中,可以在项目所在的目录用git init命令建立一个空的本地仓库,然后再用git add命令把它们都加入到Git本地仓库的暂存区(stage or inde ...

  8. git用法小结(1)--建立远程仓库

    最近一直在学习使用git来管理自己的程序,总是今天东学一点,明天西凑一点,到用的时候,总是有些茫然不知所措. 在博客园里看见一篇老好的文章,教我们做笔记啦,但是做完笔记还是要记得总结哦! 来吧,让我们 ...

  9. 1、git基础介绍及远程/本地仓库、分支

    1. Git基础介绍 基于Git进行开发时,首先需要将远程仓库代码clone到本地,即为本地仓库.后续大部分时间都是基于本地仓库上的分支进行编码,最后将本地仓库的代码合入远程仓库. 1.1. 远程仓库 ...

随机推荐

  1. Vue中计算属性与class,style绑定

    var vm=new Vue({ el:'#app', data:{ a:2, }, computed:{ //这里的b是计算属性:默认getter b:{ get:function(){ retur ...

  2. Yii2.0 to(), toRoute(), current()区别用法

    [Url::current] - 现在测试本地路径(http://daxia.dc.weixin.com/mobile/hmConnections/user/verify-user) a: //获取当 ...

  3. Junit结合Spring对Dao层进行单元测试

    关于单元测试,上一次就简单的概念和Mock基础做了,参考:http://60.174.249.204:8888/in/modules/article/view.article.php/74 实际开发过 ...

  4. 第一篇 一步一步看透C++

        毕业快一年半了,这些时候,都是在底层方面做的一些工作,虽然内核的C也实现了C++中的一些抽象机制,面向对象,继承,多态,封装等等,但是,想着大学里面,电子类的学习,都是偏向底层的,有过C++的 ...

  5. 在PHP中使用curl_init函数的说明

    $ch = curl_init(); $c_url = 'http://www.baidu.com'; $c_url_data = "product_&type=".$ty ...

  6. 查询SQL阻塞语句

    SELECT SPID=p.spid, DBName = convert(CHAR(),d.name), ProgramName = program_name, LoginName = convert ...

  7. phpcms v9模板制作常用代码集合(转)

    phpcms v9模板制作常用代码集合(个人收藏) 1.截取调用标题长度 {str_cut($r[title],36,'')} 2.格式化时间 调用格式化时间 2011-05-06 11:22:33 ...

  8. sublime text--你所不知道的12个秘密

    转自:http://blog.csdn.net/laokdidiao/article/details/51429404 package control安装: 第一种方法是在控制台中复制粘贴代码按回车, ...

  9. Explore Basic Behavior of the TurtleBot ---3

    原创博文:转载请标明出处(周学伟):http://www.cnblogs.com/zxouxuewei/tag/ Introduction 此示例帮助您使用turtlebot的自主性. 驱动机器人向前 ...

  10. Spring父容器与子容器

    在使用spring+springMVC的web工程中,我们一般会在web.xml中做如下配置: <context-param> <param-name>contextConfi ...