GIT入门介绍

现在git已经成为当下最流行的版本管理系统,不管是从事的是开发还是运维或者是与之相关的工作岗位,了解一下git的强大之处是非常有必要的。本文为自己的学习笔记,借鉴与廖雪峰老师的git教程,(http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ )有不足之处大家可以互相交流。

GIT介绍

“Talk is cheap, Show me the code.” 说到git不得不提一下它的作者Linus-Linux神话的缔造者,虽然才过不惑之年,但已经两次改变了世界。咳咳...简单膜拜之后,开始进入我们的正题吧 ~

git是分布式版本控制系统,这种优于集中式系统的架构是它流行原因之一。与SVN的集中式版本管理不同的是,git可以让每个客户端保留一个完整的版本,所以当开发者在进行自己的工作时,不必联网,当自己的工作完成之后可以先提交到本地,等待有网络的情况下再提交到服务器。当然这只是git的一个优点,在分支管理方面,git的表现也是其它系统无法望其项背的。

安装部署GIT

GIT可以在我们常见的系统中安装,但是作为一名忠实的Linux爱好者,我更倾向于直接在Linux上进行安装。下面就简单的了解一下Linux安装方式.

这里使用的是CentOS7的系统作为示例:

[[email protected] ~]# uname  -a
Linux work 3.10.0-327.28.2.el7.x86_64 #1 SMP Wed Aug 3 11:11:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

查看系统是否安装git:

[[email protected] ~]# git
-bash: git: command not found

没有,那就装上吧:

[[email protected] ~]# yum install  -y git

由于是多人使用的版本控制系统,所以我们要标示上自己的个人账户:

[[email protected] ~]# git config --global user.name "trying"  # Your name
[[email protected] ~]# git config --global user.email "[email protected]" # Your Mail

创建本地git 仓库:

[[email protected] ~]# mkdir gitrepo   
[[email protected] ~]# cd gitrepo
[[email protected] gitrepo]# git init      # 初始化git仓库,会在此目录生成一个.git的目录
Initialized empty Git repository in /root/gitrepo/.git/

创建了本地的git 仓库会生成一个.git的目录,此目录中记录以后所有对代码的改动信息。值得注意的是,所有的版本控制系统只能追踪文本的改动信息,如代码,网页,txt文件等,对于视频,图片这种二进制的文件是无法追踪其具体的变化的。

提交一个文件到git 仓库

在创建了一个git 仓库之后,我们就可以尝试添加一个文件到我们的git仓库中了。

创建一个文件:

[[email protected] gitrepo]# echo "Welcome to gitrepo! " > readme.txt

添加一个文件到仓库:

[[email protected] gitrepo]# git add readme.txt # 可以一次添加多个文件,也分多次添加

将文件提交到仓库:

[[email protected] gitrepo]# git commit -m "my first git file"
[master (root-commit) 031cca7] my first git file
 1 file changed, 1 insertion(+)
 create mode 100644 readme.txt

执行了git commit之后,文件就提交到仓库了,-m 参数是对本此提交的一个说明,在实际的开发过程中,需要对每次提交的内容作说明,这样更加方便识别和管理。

当对文件再次改动:

[[email protected] gitrepo]# echo  "change it +1" >> readme.txt 
[[email protected] gitrepo]# cat readme.txt 
Welcome to gitrepo! 
change it +1

使用git status和git diff 命令可以时刻掌握文件修改的状态和内容:

[[email protected] gitrepo]# 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") # 提示需要add

[[email protected] gitrepo]# git diff   # 查看修改前后的内容,类似于linux的diff命令
diff --git a/readme.txt b/readme.txt
index 42c334d..238398e 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
 Welcome to gitrepo! 
+change it +1                   # 新添加的内容

然后在对修改的文件进行提交,同时查看git status 在这个过程中的变化:

[[email protected] gitrepo]# git add readme.txt 
[[email protected] gitrepo]# git status  # 执行add命令后,显示需要commit这个文件
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   readme.txt
#

[[email protected] gitrepo]# git commit -m "change +1"
[master 58a7726] change +1
 1 file changed, 1 insertion(+)
[[email protected] gitrepo]# git status # 提交完成后,显示工作目录为空,没有需要提交的内容。
# On branch master
nothing to commit, working directory clean

版本控制与文件修改

当我们使用git 提交了多个版本,需要查看之前提交的版本信息,可以使用git log命令查看:

[[email protected] gitrepo]# git log 
commit c78d925cd2ce9836cd607089b958a48c8959b1d6
Author: trying <[email protected]>
Date:   Mon Dec 12 15:34:19 2016 +0800

    change +3    # 从近到远,依次显示提交的commit信息

commit 8d255bedddd881e4fa70b2c2e6e9b6b14e54f41b
Author: trying <[email protected]>
Date:   Tue Aug 9 01:02:08 2016 +0800

    change +2

commit 58a7726b7e0f7a05b6b8077578e4085b423956d1
Author: trying <[email protected]>
Date:   Tue Aug 9 00:41:55 2016 +0800

    change +1

commit 031cca7e6021aee8c8a4fba49790c59c53990a4f
Author: trying <[email protected]>
Date:   Tue Aug 9 00:08:34 2016 +0800

    my first git file

git log命令显示从最近到最远的提交日志,如果想简化输出可以使用 --pretty=oneline参数:

[[email protected] gitrepo]# git log  --pretty=oneline
c78d925cd2ce9836cd607089b958a48c8959b1d6 change +3
8d255bedddd881e4fa70b2c2e6e9b6b14e54f41b change +2
58a7726b7e0f7a05b6b8077578e4085b423956d1 change +1
031cca7e6021aee8c8a4fba49790c59c53990a4f my first git file

查看这些有什么用呢,哈哈,相信聪明的你已经发行了,这里输出的日志中都包含了一个ID,通过这个ID 我们就可以回退到我们想要的版本,如我们要回退到上一个版本,git reset:

[[email protected] gitrepo]# git reset --hard 8d255be
HEAD is now at 8d255be change +2
[[email protected] gitrepo]# cat readme.txt # 查看文件发现已经变回之前的内容
Welcome to gitrepo! 
change it +1
change +2

这里使用的是指定ID来回退到指点的版本,其实我们还有一个更加便捷的方法,可以使用HEAD^来回退:

[[email protected] gitrepo]# git reset --hard HEAD^ # HEAD^前一个版本 HEAD^^前两个版本
HEAD is now at 58a7726 change +1
[[email protected] gitrepo]# cat readme.txt 
Welcome to gitrepo! 
change it +1

这里用 “^” 来指定版本,几个“^”就表示回退几次,当然,如果回退的版本有点多可以使用HEAD~100,回退到100次版本前。

查看日志:

[[email protected] gitrepo]# git log --pretty=oneline
58a7726b7e0f7a05b6b8077578e4085b423956d1 change +1
031cca7e6021aee8c8a4fba49790c59c53990a4f my first git file

通过查看日志,我们发现我新编辑的更新没有了,如果ID也没记住,那岂不是回不到最新的内容了/(ㄒoㄒ)/~~ ,别担心git都帮我们想到了,使用git reflog:

[[email protected] gitrepo]# git reflog
58a7726 [email protected]{0}: reset: moving to HEAD^
8d255be [email protected]{1}: reset: moving to 8d255be
c78d925 [email protected]{2}: commit: change +3
8d255be [email protected]{3}: commit: change +2
58a7726 [email protected]{4}: commit: change +1
031cca7 [email protected]{5}: commit (initial): my first git file

发现了吧,我们所有的操作都被记录了,这里面就包含了每次操作的ID,这样,我们又可以找到我们最新的版本,“快进” 到未来:

[[email protected] gitrepo]# git reset --hard c78d925
HEAD is now at c78d925 change +3
[[email protected] gitrepo]# cat readme.txt 
Welcome to gitrepo! 
change it +1
change +2
change it 3

这样通过git reset --hard  和 git log,git reflog 命令我们可以让文件回到过去的任意状态。

GIT缓存区和工作区

在使用git add 命令的时候,实际上是将我们的编辑的文件提交到GIT的缓存区,然后再使用git commit 命令将文件从缓存区提交到本地仓库,如果不执行git add 添加文件,那么缓存区就不会记录此文件,后面再次更改文件内容时就不会在执行git commit时提交。 如果对文件进行了git add 之后,再次对文件修改,需要重新执行git add 添加此文件,最后执行git commit 的时候,会记录最后一次git add 的文件更改。

撤销工作区修改内容:

有时会出现这样一种情况,在我们的工作区(git仓库目录)修改了大量文件,但是最后你发现文件全部都改错了! 是的,遇到这种尴尬的情况应该怎么办呢,回退到上一版本?显然这样不科学,尤其是本地没有上一版本的时候,其实不必担心,此时执行git status就能获得提示:

[[email protected] gitrepo]# 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")

提示告诉我们要撤销工作目录改变的文件可以使用git checkout -- <file>:

[[email protected] gitrepo]# git checkout -- readme.txt  #一条命令即可

撤销暂存区修改内容:

比上面更加尴尬的一种情况是,不仅修改了工作区的内容,而且还将错误的内容使用git add 提交到了暂存区,这时候怎么办呢,让我们再看看git status 说什么吧:

[[email protected] gitrepo]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   readme.txt
#

提示我们使用git  reset HEAD <file>来从暂存区撤销,试一下效果:

[[email protected] gitrepo]# git reset HEAD readme.txt 
Unstaged changes after reset:
M       readme.txt

[[email protected] gitrepo]# git status # 查看撤销后的状态,回到了git add之前的情况
# 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")

然后在再使用上面的命令,撤销工作区的更改:

[[email protected] gitrepo]# git  checkout -- readme.txt 
[[email protected] gitrepo]# git status
# On branch master
nothing to commit, working directory clean

这样,所有的更改都已经撤销了。

如果不幸执行了commit命令,可以通过版本回滚版本来回到之前的状态,但是如果已经推送到远程仓库,那就呵呵了。如果改动直接上线,可以通过持续集成服务器,可以快速恢复,不过此时或多或少会影响到线上的业务。

删除文件

如果我们想删除本地版本库中的文件,可以直接执行下面两条命令:

[[email protected] gitrepo]# rm -f aa.txt        # 删除本地文件
[[email protected] gitrepo]# git rm aa.txt       # 删除版本库文件,并且commit提交
rm ‘aa.txt‘
[[email protected] gitrepo]# git commit -m "del aa.txt"
[master 59f04b4] del aa.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 aa.txt

使用git rm <file> 和 git commit 来删除版本库中的文件。

但是如果本地文件不小心删除错了,只要我们版本库中提交过就可以快速恢复:

[[email protected] gitrepo]# git checkout -- readme.txt
[[email protected] gitrepo]# rm -f readme.txt 
[[email protected] gitrepo]# ll
total 0
[[email protected] gitrepo]# 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:    readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

[[email protected] gitrepo]# git checkout -- readme.txt
[[email protected] gitrepo]# ll
total 4
-rw-r--r--. 1 root root 69 Dec 12 18:36 readme.txt  # 文件又回来了!
时间: 2024-10-11 12:06:59

GIT入门介绍的相关文章

Git入门介绍读后感

本章是Git使用的入门介绍.Git是linux之父linus编写的Git进行代码管理的.Git在各方面都有与其他同类的源代码管理软件.在学习android及linux内核.驱动开发的过程中都会涉及大量的源代码,因此本章中涉及到的Git的基本使用都是我们开发android系统是必要的准备条件. 使用Git之前应该先安装Git,安装时需要输入如下命令: # apt-get install git # apt-get install git-doc git-svn git-emall git-gui

简单的git入门介绍及常用操作

集中式版本控制系统采用中央服务器上存储的所有文件和实现团队协作.但是CVCS主要缺点是中央服务器的单点故障,即故障.不幸的是,如果中央服务器宕机一小时,然后在该时段没有人可以合作.即使在最坏的情况下,如果中央服务器的磁盘被损坏,并没有采取适当的备份,那么将失去整个项目的历史. DVCS客户不仅检出的最新快照目录,但他们也完全反映资源库.如果SEVER停机,然后从任何客户端库可以复制回服务器,以恢复它.每个结账是完整的版本库备份. Git不会依赖中央服务器,这就是为什么可以执行许多操作,当处于脱机

【Git入门之十四】Git GUI

[Git入门之十四]Git GUI - JackyStudio - 博客频道 - CSDN.NET 文章都快写完了,Git GUI才浮出水面,很多人要骂我,这么方便的东西怎么不早拿出来. 当然命令行和图形界面各有千秋,个人觉得命令行更能让人清楚的掌握整个项目的代码线.当然萝卜青菜各有所爱,Windows,Linux也是一样.喜欢什么客官您挑.本文只做简单介绍. 1.Git GUI有什么? 霸气测漏的右键菜单和可视化管理界面. 2.初始化仓库 新建一个文件夹叫JackyGUI,右键点击Git In

Git入门(三)——没有版本控制意识的程序员不是一个好的程序员

之前所讲的都是"自娱自乐",自己管理自己的项目.本篇主要是Git入门的尾声,也是最为精华的一部分,即利用Git进行版本控制,进行"团队协作开发",也会介绍分支合并以及合并冲突时常见的处理方法. 五.团队协作流程 1. 基本流程 (1) 创建一个分支 当你在开发一个项目的时候,一般在同一时刻你会同时展开多个想法,其中一些比较成熟了,另一些还是很初级的.有了分支就可以很好地来进行管理了.当你在项目中创建一个分支的时候,你可能就是正在搭建一个可以尝试新想法的环境.你在新分

git入门-分支

原地址:http://codingnow.cn/git/228.html1. git分支简介 使用分支可以让你从开发主线上分离开来,然后在新的分支上解决特定问题,同时不会影响主线.像其它的一些版本控制系统,创建分支需要创建整个源代码目录的副本.而Git 的分支是很轻量级的,因为Git保存的不是文件差异,而是一系列文件快照.在Git提交时,会保存一个commit对象,该对象包含一个指向暂存内容快照的指针,Git 会先计算每一个子目录的校验和( SHA-1 哈希字串),然后在 Git 仓库中将这些目

Git 入门 ---- Git 常用命令

本文作为  Git 入门 ---- Git 与 SVN 区别 的续篇,继续介绍 Git 的入门知识 四. Git 安装 OS X 版本: Mac 一般自带不需要安装 Windos 版本: https://git-for-windows.github.io/ Linux 版本: Linux 一般也是自带无需安装 五. 创建新仓库 创建新文件夹,cd 到文件夹,执行命令: git init  用来创建新 git 仓库 六. 提交文件进仓库 在新建好 git 仓库的文件夹里加入 readme.txt

Git使用介绍

对Git使用的一些基础介绍. 常用术语 首先让我们来对Git使用遇到的一些常用术语有个认识. 集中式:有一台专门的服务器作为版本库,其他人要上传更新代码都得先经过它才能进行. 分布式:每个人的电脑都有一个自己的版本库,不需联网就能本地进行代码版本管理. 工作区(Workspace):项目实际存放的目录. 仓库区(Repository):项目下的.git目录,一个本地的版本管理仓库. 暂存区(Index/Stage):一个缓存区用于保存临时的改动,.git目录下有个index用来记录这些信息. H

码云配合git入门命令总结学习

目录 码云配合git入门命令总结学习 基本设置 基本命令总结学习 准备工作以及基本思路 基本命令 码云搭建仓库步骤 准备前工作 具体操作方法 远程仓库基本命令 标签相关命令 所有命令总结 基本命令总结说明 远程库有关的命令说明 标签相关命令 容易混淆的命令 码云配合git入门命令总结学习 基本设置 设置用户名及email: git config --global user.name "Your Name" git config --global user.email "[em

【Git入门之四】操作项目

[Git入门之四]操作项目 - JackyStudio - 博客频道 - CSDN.NET 1.查看操作日记 <git log>用于查看操作日记详情.因为Git是分布式的,采用SHA1这样的版本号可有效的防止版本冲突. [cpp]?view plaincopy ? #查看操作日记,底下那串长长的数据就是SHA1?ID,表示当前版本号?? $Snbsp;git?log?? commit?aea0365712908805bc28540b4db9fd2f15360a8b?? Author:?Jack