[原]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. 远程仓库 ...
随机推荐
- Fragment管理工具类
Fragment相关→FragmentUtils.java→Demo addFragment : 新增fragment removeFragment : 移除fragment replaceFragm ...
- Android中利用C++处理Bitmap对象
相信有些Android&图像算法开发者和我一样,遇到过这样的状况:要对Bitmap对象做一些密集计算(例如逐像素的滤波),但是在java层写循环代码来逐像素操作明显是不现实的,因为Java代码 ...
- ASP.NET js控制treeview中的checkbox实现单选功能
ASP.NET js控制treeview中的checkbox实现单选功能 function OnTreeNodeChecked() { var element = window.event.srcEl ...
- Visual Studio快捷键大全
快捷键的使用可以简化大家的操作,在一定程度上提高工作的效率,下文中将为大家介绍一些VS中经常用到的快捷键,希望对大家有用. 方法/步骤 关于解决方案和项目 用于快速跳转 用于代码的文本编辑 ...
- ABBYY FineReader利用模式提高OCR质量
提高OCR质量,除了可以使用ABBYY FineReader 12OCR文字识别软件解决纸质文档的复杂结构未出现在电子文档中,或者未正确检测到区域的问题(详见如何提高ABBYY FineReader ...
- MLE、MAP、贝叶斯三种估计框架
三个不同的估计框架. MLE最大似然估计:根据训练数据,选取最优模型,预测.观测值D,training data:先验为P(θ). MAP最大后验估计:后验概率. Bayesian贝叶斯估计:综合模型 ...
- Nginx 反向代理解决favicon404错误问题
# set site favicon location /favicon.ico { root html; } OR location = /favicon.ico { log_not_found o ...
- 临时解决Apache服务器假死的参数配置
<IfModule mpm_prefork_module> StartServers MinSpareServers MaxSpareServers MaxClients MaxReque ...
- MySQL的sql_mode解析与设置,sql文件导入报错解决
在往MySQL数据库中插入一组数据时,出错了!数据库无情了给我报了个错误:ERROR 1365(22012):Division by 0:意思是说:你不可以往数据库中插入一个 除数为0的运算的结果.于 ...
- MTK 时区修改
1.修改packages/apps/Settings/res/xml-xx-xx/timezones.xml (xx-xx表示不同的语言和区域),添加下面的内容: <!-- timezo ...