Git使用(二)版本库创建及文件修改
一、创建版本库
1、安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
$ git config --global core.autocrlf false //windows中的换行符为 CRLF, 而在Linux下的换行符为LF,可以使用此命令禁止自动转换
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。
注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
2、创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录(为了保证不出现问题,请保证目录名设置为英文):
$ cd d:
$ mkdir learngit
$ cd learngit
$ pwd
/d/learngit
3、通过 git init 把这个目录变成Git可以管理的仓库:
$ git init
Initialized empty Git repository in D:/learngit/.git/
4.瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),并且当前目录下多了一个.git的目录

注意:千万不要使用Windows自带的记事本编辑任何文本文件。会导致UTF-8编码的文件,出现乱码的问题。
5、现在我们编写一个readme.txt文件,一定要放到learngit目录下(子目录也行),内容如下:
Git is a version control system.
Git is free software.
6、用命令 git add 告诉Git,把文件添加到仓库:
git add readme.txt
执行上面的命令,没有任何显示,就说明添加成功。
7、用命令 git commit 告诉Git,把文件提交到仓库:
$ git commit -m "wirte a readme file"
[master (root-commit) 2ec6b08] wirte a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
注:-m 后面输入的是本次提交的说明,方便找到历史中的记录。
总结:
git init //初始化一个Git仓库
git add file.txt //添加文件,可以一个
git add file1.txt file2.txt //添加文件,可以多个
git commit -m "文字说明" //完成并注明文字说明
二、版本比较
1、我们已经提交过readme.txt文件了,现在我们继续修改readme.txt文件,改成
Git is a version control system.
Git is free software.
Git is good!
2、运行 git status 查看结果
$ git status
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")
会告诉我们哪个文件被修改过了。
3、git diff 查看差异性
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index d8036c1..24c6b62 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,3 @@
Git is a version control system.
-Git is free software.
\ No newline at end of file
+Git is free software.
+Git is good!
\ No newline at end of file
4、git add / git commit 确认哪些文件被修改过和文件内容的差异性之后,就可以放心的向仓库提交了。
$git add readme.txt //git add . 指提交目录下的所有文件
$git commit -m "modified readme.txt"
5、git status 看看仓库的当前状态
$ git status
On branch master
nothing to commit, working tree clean //说明工作目录是干净的
三、版本回退
1、git log 查看版本的历史记录,即可看到修改的过的历史记录,及历史说明。
$ git log
commit 167fb1efb4bf77266ec663eb6d2762118ea2071a (HEAD -> master)
Author: lion201314 <lion201314@vip.qq.com>
Date: Thu Jul 13 22:18:23 2017 +0800 readme.txt instruction commit 8f40beccceacb2ad6b25a0df26cc52737ed09744
Author: lion201314 <lion201314@vip.qq.com>
Date: Thu Jul 13 22:11:25 2017 +0800 modified readme.txt commit 2ec6b08c22375e9d3c651cd7b7eeaecb29b9f43d
Author: lion201314 <lion201314@vip.qq.com>
Date: Thu Jul 13 21:46:29 2017 +0800 wirte a readme file
注:参数:--pretty=oneline 可以将每条记录只显示一行
$ git log --pretty=oneline
167fb1efb4bf77266ec663eb6d2762118ea2071a (HEAD -> master) readme.txt instruction
8f40beccceacb2ad6b25a0df26cc52737ed09744 modified readme.txt
2ec6b08c22375e9d3c651cd7b7eeaecb29b9f43d wirte a readme file
2、使用 git reset 将版本回退到上一个版本“modified readme.txt”
$ git reset --hard HEAD^ //回退到上一个版本
HEAD is now at 8f40bec modified readme.txt
当然git也可以自定义回到固定的版本,只要append GPL的commit id 就可以了。比如上面的案例的commit id 就是8f40bec
$ git reset --hard 8f40bec //等同于上面的方法
HEAD is now at 8f40bec modified readme.txt
注:
HEAD指向那个版本号,当前定位就在哪里。
3、当然说明一下,你可以通过 git reflog 找到对应的commit id,终于可以不担心commit id找不到了。
四、现在来解析一下git的工作区和暂存区
learngit 为工作区
.git 为Git的版本库
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

五、撤销修改和删除文件
1、撤销修改:git checkout -- readme.txt
$git checkout -- readme.txt
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
命令:git checkout -- file //没有--就变成切换分支的命令。
小结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
六、删除文件
1、添加,并提交两个文件 test1.txt test2.txt
$ git add test1.txt test2.txt
$ git commit -m "add test file"
2、现在用 rm test1.txt 删除文件
$ rm test1.txt
3、查看状态
$ git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) deleted: test1.txt no changes added to commit (use "git add" and/or "git commit -a")
4、
场景一:删除错误的情况,需要恢复数据 git checkout -- test1.txt
场景二:正常删除,需要删除版本库中信息 git rm test1.txt
Git使用(二)版本库创建及文件修改的更多相关文章
- Git 学习(二)版本库创建
Git 版本库创建 什么是版本库(repository)? 可理解为文件仓库.由Git管理每个文件的新增.修改及删除,但这个仓库可以追溯历史.可还原至任意历史节点. 版本库创建 创建一个版本库非常简单 ...
- Git创建版本库和添加文件
创建版本库: 首先新建一个目录,然后通过 $ git init命令把这个目录变成Git可管理的仓库,例如: 在"C:\AmyPersonal\AmyGit"路径下新建文件夹Git1 ...
- Git版本库创建(包含文件权限设置 Linux环境下)
确保git服务已安装成功,如果没有安装git服务查看:Git源码安装 Linux指定安装目录 1.创建git用户,并设置密码.并禁止git用户通过shell登录服务器(注意如果需要安装gitolite ...
- Git教程--Git安装和版本库的创建
Git的诞生 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了. Linus虽然创建了Linux,但Linux的壮大是靠全世界热 ...
- Git 的版本库创建和修改
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...
- 5.Git版本库创建
1.什么是版本库呢? 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何 ...
- GIt学习第一天之安装和版本库创建
搬运自 ‘廖雪峰的官方网站’ 1.git安装 官网下载地址:https://git-scm.com/download/win 百度网盘下载地址:https://pan.baidu.com/s/1k ...
- 【原创】Git删除暂存区或版本库中的文件
0 基础 我们知道Git有三大区(工作区.暂存区.版本库)以及几个状态(untracked.unstaged.uncommited),下面只是简述下Git的大概工作流程,详细的可以参见本博客的 ...
- Git入门——本地版本库操作
作为一个一直用SVN的家伙,深深地感到了自己在版本控制工具上的落伍.... 首先必须强调的是: Git与Github不是一回事. Git是目前世界上最先进的分布式版本控制系统,于2005年被linux ...
随机推荐
- 11个rsync使用实例
rsync表示 remote sync,其用于在本地或与远程主机间进行文件或目录备份.相比较scp等工具,rsync有以下优点: 速度:除首次全拷贝外,其他时候实现增量拷贝,加快传输速度 安全:传输数 ...
- 【0809 | Day 12】可变长参数/函数的对象/函数的嵌套/名称空间与作用域
可变长参数 一.形参 位置形参 默认形参 二.实参 位置实参 关键字实参 三.可变长参数之* def func(name,pwd,*args): print('name:',name,'pwd:',p ...
- JWT+Interceptor实现无状态登录和鉴权
无状态登录原理 先提一下啥是有状态登录 单台tomcat的情况下:编码的流程如下 前端提交表单里用户的输入的账号密码 后台接受,查数据库, 在数据库中找到用户的信息后,把用户的信息存放到session ...
- Sqlserver 查询把多行内容拼成一个字符串
当使用:SELECT ','+Id FROM dbo.Test FOR XML PATH('')); //这样读取的数据虽然是1,2,3,4,但是仍然是xml格式,所以当数据超过2033时候,用sql ...
- 谨慎 mongodb 关于数字操作可能导致类型及精度变化
1.问题描述 最近有一个需求,更新Mongo数据库中 原料 集合的某字段价格,更新后,程序报错了,说长度过长了,需要Truncation. 主要错误信息如下: FormatException: An ...
- 05 requests模块进阶
1. 基于requests模块的代理IP操作 - 爬虫中为什么需要使用代理 一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可 ...
- 流程控制之while循坏
流程控制之while循坏 一.语法 循环就是一个重复的过程,我们人需要重复干一个活,人岂不是要累死啊,而且还是那么-..的枯燥乏味,向我这样要的小年轻,不骚里骚气的行吗?那岂不是白白流浪了这么多年头, ...
- RSA加密的java实现
首先科普一波: RSA的1024位是指公钥及私钥分别是1024bit,也就是1024/8=128 Bytes RSA算法密钥长度的选择是安全性和程序性能平衡的结果,密钥长度越长,安全性越好,加密解密所 ...
- 【Windows Of CCPC HDU - 6708】【打表,找规律】
题意分析 HDU - 6708 题意:给出一个整数k,要求你输出一个长和宽均为2^k^ 的符合要求的矩阵.比如k等于1时输出 \[ \begin{matrix} C & C \\ P & ...
- 关于python的特殊方法
最近在阅读<流畅的python>这本书,在第一章中作者就提到了几个python中的特殊方法,代码入下: class FrenchDuck: ranks = [str(n) for n in ...