新手学习Git之在本地使用Git
每个开发人员应该都会一个版本管理工具,在Git和SVN中,我选择以Git,以下是我的一些心得
什么是 Git
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
一、Git安装
1)、linux下安装:
Ubuntu Linux,通过一条sudo apt-get install git就可以直接完成Git的安装,非常简单。
2)、windows下安装:
在Git官网 下载,然后全部选默认,一直点next就可以
2.首次使用的一些设置
1)、设置用户名和邮箱,用来区分用户(注:在windows中,安装完成后在开始菜单中有个Git Bash,点击这个就可以打开Git,里边是写Git的命令的)
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
2)、创建版本库
创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:
$ mkdir learngit
$ cd learngit
$ pwd
D:/JavaWorkSoftware/git/learngit
注:最后这个pwd是用来查看当前目录,如果你使用Windows系统,请确保目录名(包括父目录)不包含中文。
3)、通过git init命令把这个目录变成Git可以管理的仓库:
$ git init
Initialized empty Git repository in D:/JavaWorkSoftware/git/learngit/.git/
好了,你的Git就算是安装完成了。然后就开始使用吧。
4)、我们写一个文件到仓库中
创建一个example.txt
This is an example file,
This is creat in Git.
(2).添加文件进去,用git add命令
$ git add example.txt
warning: LF will be replaced by CRLF in example.txt.
The file will have its original line endings in your working directory
这个命令一般是不会有任何提示的,但是我出现了如上提示。
意思大概是:LF(换行,Line Feed)将会被CRLF(回车换行,CarriageReturn)替代
该文件将在工作目录中具有其原始行尾。
报这个警告时是由于文件夹远程不存在,但是不影响提交。我们再执行一次就好。
(3).提交git commit
$ git commit -m "first example file"
[master (root-commit) 0cecffa] first example file
1 file changed, 2 insertions(+)
create mode 100644 example.txt
这个commit命令的参数 -m 是必不可少的,就是为了添加本次提交文件的日志,相当于做一个标记,以便于我们在版本控制时用到。
tips:在git中只有存纯文本文件,如.txt .java .md 不能存其他文件,同时,这些纯文本文件要是UTF-8编码
二、版本控制
以本地仓库为例,讲解版本控制
1)、我们先讲几个概念
工作区和暂存区
工作区(Working Directory),就是是在我们电脑上能看到的文件目录,这里我的那个/learngit就是一个工作区,在工作区中有很多的分支。
分支(Branching),顾名思义,就是类似于树叶的分支。我们将整个工作区比作主树干,分支的概念就更好地理解了。我们现在就是在Git的主分支(master)上操作,后边会讲到分支管理。
我们之前用mkdir learngit 命令创建的那个就是一个工作区,在工作区中有一个隐藏目录.git,这个就是Git的版本库(Repository)。
暂存区,就是我们当前正在操作的目录,但是内容还没有保存在工作区中
2)、Git下修改文件
我们把在Git下操作文件和如何把大象装进冰箱中做类比(这是我本人很喜欢的一个学习方法):
(1).我们修改当前工作区下的 example.txt 文件 (准备大象,肯定有人会问,不用准备冰箱吗?哈哈,Git就是这个冰箱了).
This is an example file,
This is creat in Git.
This is third line.
(2).每二步肯定就是将大象装进冰箱,我们用git add命令
但在把大象装进冰箱前,我们先学习几个小命令
git status 查看当前git 的状态
$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: example.txt
no changes added to commit (use "git add" and/or "git commit -a")
修改了example.txt 文件
已经修改,但是这个修改没有提交到时工作区,提示你用git add 或git commit
另一个命令就是 git diff用来查看修改前后两个文件的不同,这个就不做演示了。
还有一个git checkout -- [文件名] ,撤销修改,也就是说这个时候我们突然不想把大象装进冰箱了,我们只需要撤销就好了。
$git checkout -- example.txt
这个命令执行完毕后不会有任何提示。 我们接着用git status 查看下我们的git状态,就是说我们的这个git没有任何要commit的文件
$ git status
On branch master
nothing to commit, working tree clean
(3).好了,学完这几个小插曲后,我们继续我们的大象装进冰箱(修改库中文件)的最后一步,就是关闭冰箱门(git commit -m)。
我们刚刚执行了撤销修改的操作,我们要重新来一次。
This is an example file,
This is creat in Git.
This is third line.
$git add example.txt
$git commit -m "add third line"
3)、版本更换:真正的在多个版本之前切换
为了文件测试,我们多修改几次这个文件,也就是多做几个版本(此操作略,无非就是vim——add——commit)。
在你修改了好几个版本之后,我们用git log命令来查看当前工作区(其实就是分支)状态.
$ git log
commit 7b0b4f5c4c9ffc053db65ed0d7835ae62a27e0b6 (HEAD -> master)
Author: Lyn4ever <Lyn4ever29@163.com>
Date: Fri Jun 7 00:23:54 2019 +0800
add fourth line
commit 11b13721088ea653042af7986e0d5b1f1b29a9e9
Author: Lyn4ever <Lyn4ever29@163.com>
Date: Fri Jun 7 00:16:12 2019 +0800
add third line
commit 0cecffad8b547533728d2c1a9bef581c6c01f359
Author: Lyn4ever <Lyn4ever29@163.com>
Date: Thu Jun 6 23:45:24 2019 +0800
first example file
这个很容易看明白的,就是现在有三个版本,这是一个倒序排序,也就是说,当前这个文件的版本就是最上边的这个。commit 后边跟着的那个就是版本号,紧接着两行是作者和时间,再下边就是我们在commit -m 时写的日志了。(注意:你的文件id 肯定和我的不一样,在测试时要以你的为准)
修改版本的命令是git reset --hard commit_id,我们就来试一试。
先确保当前git中没有未commit的文件,然后查看文件内容
$ git status
On branch master
nothing to commit, working tree clean
$ cat example.txt
This is an example file,
This is creat in Git.
this is third line.
this is forth line.
好了,我们就返回日志为"add third line"这个版本,其版本id为:11b13721088ea653042af7986e0d5b1f1b29a9e9
$git reset --hard 11b13721088ea653042af7986e0d5b1f1b29a9e9
HEAD is now at 11b1372 add third line
看提示,很明显,就是经成功了。我们再看一个
$ git status
On branch master
nothing to commit, working tree clean
$ cat example.txt
This is an example file,
This is creat in Git.
this is third line.
每次要写这个id是不是很麻烦呢,我们可以只用前7个字符,但是还有一个更简单的方法,就是用HEAD^来代替。HEAD 表示当前版本,往前几个版本,就写几个^。上一个版本就是HEAD^,上上一个就是HEAD^^
这时,我们再看一个我们的git log
$ git log
commit 11b13721088ea653042af7986e0d5b1f1b29a9e9 (HEAD -> master)
Author: Lyn4ever <Lyn4ever29@163.com>
Date: Fri Jun 7 00:16:12 2019 +0800
add third line
commit 0cecffad8b547533728d2c1a9bef581c6c01f359
Author: Lyn4ever <Lyn4ever29@163.com>
Date: Thu Jun 6 23:45:24 2019 +0800
first example file
发现这个里边只有两个了,我想回到add fourth line 那个版本,也是用同样的方法,但是我找不到commit-id 怎么办?不急,git这么强大的功能不会让我们失望的。我们可以用git reflog查看git版本控制的操作历史
$ git reflog
11b1372 (HEAD -> master) HEAD@{0}: reset: moving to 11b13721088ea653042af7986e0d5b1f1b29a9e9
7b0b4f5 HEAD@{1}: commit: add fourth line
11b1372 (HEAD -> master) HEAD@{2}: commit: add third line
0cecffa HEAD@{3}: commit (initial): first example file
这时,我们找到了之前add fourth line 版本的id,就可以了。
$git reset --hard 7b0b4f5
就这样好了。git log 又发现了三个版本
$ git log
commit 7b0b4f5c4c9ffc053db65ed0d7835ae62a27e0b6 (HEAD -> master)
Author: Lyn4ever <Lyn4ever29@163.com>
Date: Fri Jun 7 00:23:54 2019 +0800
add fourth line
commit 11b13721088ea653042af7986e0d5b1f1b29a9e9
Author: Lyn4ever <Lyn4ever29@163.com>
Date: Fri Jun 7 00:16:12 2019 +0800
add third line
commit 0cecffad8b547533728d2c1a9bef581c6c01f359
Author: Lyn4ever <Lyn4ever29@163.com>
Date: Thu Jun 6 23:45:24 2019 +0800
first example file
4)、删除文件
删除文件,其实就是另一种修改操作,和修改是一样的,先用rm file来删除,然后用git commit来提交到工作空间中。
$rm example.txt
然后我我们看一下状态
$ 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: example.txt
no changes added to commit (use "git add" and/or "git commit -a")
发现是deleted ,但是没有commit。也就是已经把大象从冰箱中取出来了,但是没有关冰箱门。所以我们关闭冰箱门
先从库中删除
$ git rm example.txt
rm 'example.txt'
然后提交
git commit -m "delete example"
然后,想查看这个文件,发现不在了。
$ cat example.txt
cat: example.txt: No such file or directory
最后,我们用之前的版本回退回去。
$ git reset --hard 7b0b4f5
HEAD is now at 7b0b4f5 add fourth line
$ cat example.txt
This is an example file,
This is creat in Git.
this is third line.
this is forth line.
tips: 删除文件同样也是修改操作,也可以在rm file后,但还没有git rm 和git commit到git库中前,可以使用git checkout -- fileaname 撤销
新手学习Git之在本地使用Git的更多相关文章
- 使用git 将自己的本地文件git到github上面的完整过程
1. 首先在github网站上新建一个仓库,复制仓库地址(HTTP形式或者SSH形式,后者利用SSH,在最后一步push 的时候可以不用输入用户名和密码). 2. 在本地某个你想要的(文件夹)目录 ...
- git操作之四:git branch(本地仓库)
前面,介绍了git init/add/commit/restore/reset等git命令,今天介绍下git branch,这个命令是和分支相关的.首先要理解什么是分支,简单来说在协作开发中,每个人开 ...
- Git(2) - git安装、本地仓库与远程仓库使用详细指南
git版本控制工具 下载地址:https://www.git-scm.com/download/win选择对应版本的工具,下载后是一个exe执行文件: 常用git命令 命令 作用 git init(在 ...
- Git版本管理:Windows下Git配置与使用指南
简要介绍:Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. 一.安装 软件:msysGit-fullinstall-1.8.1.2 打开之后设置安装路径,默认为 ...
- Git版本管理:Windows下Git配置与使用指南 Gitlab
简要介绍:Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. 一.安装 软件:msysGit-fullinstall-1.8.1.2 打开之后设置安装路径,默认为 ...
- 有关git的使用,和git的一些提交冲突。
git 的一些基本用法 git init :初始化文件(创建文件夹). git add . :监控工作区的状态树(将被修改的文件提交到暂存区) git status :未跟踪状态(Untracked) ...
- git 学习使用总结一(本地操作)
通过几天的学习,熟悉了 git 的一些常用命令,要用熟练和操作更复杂的功能还必须继续学习.不过 git 作为工具,它是用来提高我们的工作效率的工具,系统的学习之后可以暂且放放,等到以后实际项目中用到了 ...
- Git 学习(三)本地仓库操作——git add & commit
Git 学习(三)本地仓库操作——git add & commit Git 和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念.这在上文已有提及,本文具体说明什么是工作区及暂存区,以及 ...
- Git学习(2)-使用Git 代码将本地文件提交到 GitHub
上次随笔写到git的安装和运用命令窗口创建本地版本库,这次主要讲一下用git代码将本地文件提交到GitHub上. 前提是有一个GitHub账号. 1.创建一个新的版本库,进入到你本地项目的根目录下(我 ...
随机推荐
- Linux网络问题排错
前言 作为一名软件工程师,Linux相关的知识是一个不可或缺的技能点,而网络问题往往是初学者接触Linux时最先碰到的一只拦路虎,本篇博客将系统的讲解一个解决Linux网络问题的通用方法论,一个科学的 ...
- vim文件时,误用了ctrl+z命令,该怎么办?
linux中,当正在使用vim命令编辑文件,退出时,如果误使用了 ctrl+z ,当前目录中会多一个隐藏文件. 比如我正在编辑 t.txt 文件时,误以为我之前使用的是 tail 命令,直接使用 ct ...
- java性能使用
1.慎用异常 j写在for循环外面 2.使用局部变量 局部变量在栈(stack)里面,速度快;全局变量在堆(heap)里面 int a =0; public static int ta =0; 3.位 ...
- .netcore CAP2.6 快速入门
CAP介绍: CAP是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案.可以解决跨服务器的数据一致性问题.一个简单的列子,如:订单系统创建订单后需要通知邮件通知用户下单成功,解决 ...
- Leetcode之二分法专题-744. 寻找比目标字母大的最小字母(Find Smallest Letter Greater Than Target)
Leetcode之二分法专题-744. 寻找比目标字母大的最小字母(Find Smallest Letter Greater Than Target) 给定一个只包含小写字母的有序数组letters ...
- 安装Python及各种包/库——没有网络的电脑上
我们做项目时可能会遇到,一些电脑只能联内网或者无法联网,这种情况怎样在电脑上安装Python及各种第三方包/库呢? 1.首先,在有网络的电脑上在python官网下载好python安装包,地址:http ...
- mysql8.0版本下命令行mysqld –skip-grant-tables 失效,无法登陆的问题
1.管理员权限登陆cmd,不会使用管理员登陆的请搜索cmd,搜索结果右键. 2.命令行输入:net stop mysql;然后提示.服务停止中 --> 服务已停止,如出现其他错误请百度. 这只是 ...
- 容器的进程与namespace、rootfs
一:容器是什么 容器的本质是一种特殊的进程. 在linux容器中有三个重要的概念:Namespace.Cgroups.rootfs. Namespace做隔离,让进程只能看到Namespace中的世界 ...
- 朋友聚会,下馆子要到哪家饭馆?——单样本T检验帮你找到答案
聚会时,五花八门的饭馆让人眼花缭乱,应该到哪家店吃呢?除了美味的食物,良好的服务态度也是好饭馆的必备品质,如何判断一家饭馆的服务态度如何?此时可以用单样本T检验来找答案~ 让顾客对A饭馆的服务态度 ...
- c#搭建jenkins自动构建环境
这边我使用的是参数化构建过程,文笔比较差劲,就直接上干货了 1.定义构造参数 2.设置jenkins工作空间目录,在此定义了版本号和工作目录构建参数 3.配置svn 4.构建触发器,用于轮询查看svn ...