[原]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. 远程仓库 ...
随机推荐
- 利用neon技术对矩阵旋转进行加速
一般的矩阵旋转操作都是对矩阵中的元素逐个操作,假设矩阵大小为m*n,那么时间复杂度就是o(mn).如果使用了arm公司提供的neon加速技术,则可以并行的读取多个元素,对多个元素进行操作,虽然时间复杂 ...
- 64位系统web项目导出excel问题分析及解决方法汇总
最近在web项目中做了一个导出Excel功能.在导出的时候报错:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败. 一 ...
- php的MCRYPT_RIJNDAEL_256 和mcrypt_encrypt 用法
<?php $key = "miyao";//密钥 $string="jiami";//需要加密的字符 $d = new d(); //加密 $crypt ...
- .NET 4并行编程入门之Task的取消[转]
原文:http://www.cnblogs.com/Leo_wl/archive/2010/06/01/1749596.html前言:因为Task是.NET 4并行编程最为核心的一个类,也我们在是在并 ...
- jQuery实现自动调用和触发某个事件的方法
1.比如我们通过jquery定义了一个点击事件,我们如何自动触发他: $(function(){ $('#button').click(function(){ alert('butto ...
- Unable to resolve target 'android-9'
右键项目文件--->properties--->android 选择对应版本 保存 如还不生效 打开项目文件project.properties ,修改 target=android-1 ...
- 【QT】Cannot find file: untitled.pro,项目路径不要包含中文。
Cannot find file: D:\文件及下载相关\文档\untitled\untitled.pro. 17:01:45: 进程"D:\Englishpath\QT5.9.3\5.9. ...
- 虚拟机安装linux系统无法上网的解决方法
原文:https://www.jb51.net/article/118267.htm 周末闲来无事,用虚拟机安装了centos6.5系统,安装成功后发现不能连接网络,然后我就一脸蒙蔽了,无奈之下,只能 ...
- 5 -- Hibernate的基本用法 --1 ORM和Hibernate
目前流行的编程语言,如Java.C#等,它们都是面向对象的编程语言,而目前铸就的数据库产品,例如Oracle.DB2等,依然是关系数据库等.编程语言和底层数据库的发展不协调,催生出了ORM框架.ORM ...
- 九度 1552 座位问题(递推DP)
题目描述: 计算机学院的男生和女生共n个人要坐成一排玩游戏,因为计算机的女生都非常害羞,男生又很主动,所以活动的组织者要求在任何时候,一个女生的左边或者右边至少有一个女生,即每个女生均不会只与男生相邻 ...