赞
踩
Git(读音为/gɪt/。)是一个开源的分布式版本控制系统
,可以有效、高速地处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
git通常在编程中会用到,并且git支持分布式部署,可以有效、高速的处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone)
,在本地机器上拷贝一个完整的Git仓库。
下面我们可以举一个通俗易懂的例子:
比如当你在本地写好某一个编程文档时,发现有些地方需要修改或者删除,有的人可能会直接在当前文件中直接修改,有的人会复制一份在上面修改,然后删除没用的文件。但是当你发现还是原来的文件好或者另外的版本好时,就可能手足无措了。
此时使用git工具,就是聪明之举了。我们可以在本地建一个版本库,每当我们需要修改时,就可以把之前的版本提交并标明此版的特点。这样文件夹里就只有一个编程文档了。当你需要哪个版本时,只要在版本库中恢复一下就可以了。
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,目录里所有文件都被Git管理起来,每个文件的修改,删除,Git都会跟踪,以便任何时候都可以追踪历史或者在将来某一时刻可以还原修改。其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理。
版本控制最主要的功能就是追踪文件的变更
,必要时还可以回退到以前的版本。它将什么时候、什么人更改了文件的什么内容等信息忠实地了已录下来。每一次文件的改变,文件的版本号都将增加。
除了记录版本变更外,版本控制的另一个重要功能是并行开发。软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。并行开发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效地解决。
已提交(committed):已提交表示数据已经安全的保存在本地数据库中。
已修改(modified) :已修改表示修改了文件,但还没保存到数据库中。
已暂存(staged) :已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
如果 Git 目录中保存着的特定版本文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。
Git 仓库、工作目录以及暂存区域:
Git仓库目录(远程目录):是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
工作目录 :是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区域 :是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作`‘索引’’,不过一般说法还是叫暂存区域。
三个区域关系:工作区是我们能看到的区域,我们在工作区修改增加代码;完成编辑后,我们用git add 将工作区文件添加到暂存区;然后利用git commit 提交文件到我们自己的分支。
在工作目录中修改文件。
暂存文件,将文件的快照放入暂存区域。
提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
命令 | 含义 |
---|---|
git clone [url] (自定义仓库名) | 克隆现有的仓库 |
git init | 初始化本地仓库 |
git add [filename] | 将文件filename添加到缓存区 |
git commit -m “add filename” | 将文件filename提交到本地仓库,如果想要提交信息记录更详细则不要加-m |
git status | 详细显示有变更的文件 |
git status -s | 简单显示有变更的文件 |
git checkout – file1 | 把file1文件在工作区的修改全部撤销 |
git reset HEAD file | 把暂存区的修改撤销掉,重新放回工作区 |
git reset --hard | 回溯到指定状态,只要提供目标时间点的哈希值 |
git reflog | 查看仓库的操作日志,可找到哈希值 |
git log | 查看详细修改记录 |
git log --pretty=oneline | 更简洁的显示修改历史 |
git log --graph | 以图表形式查看修改的日志分支 |
git rm file1 | 删除file1文件 |
git status -s 以精简的方式显示文件状态。
git status 输出的命令很详细,但有些繁琐。
如果用 git status -s 或 git status --short 命令,会得到更为紧凑的格式输出。
使用 git status -s 或 git status --short 命令查看文件状态时出现的符号含义:
符号 | 含义 |
---|---|
?? | 新添加的未跟踪文件 |
A | 新添加到暂存区中的文件 |
右边M | 该文件被修改了但是还没放入暂存区 |
左边M | 该文件被修改了并放入了暂存区 |
AM | 该文件添加到了暂存区,又被修改之后未加入暂存区 |
MM | 在修改后添加到暂存区,又被修改之后未加入暂存区 |
你可以继续git add再git commit,也可以别着急提交第一次修改,先git add第二次修改,再git commit,就相当于把两次修改合并后一块提交了:
第一次修改 -> git add -> 第二次修改 -> git add -> git commit
每次修改,如果不add到暂存区,那就不会加入到commit中。
实验环境:
虚拟机 | ip | 版本 |
---|---|---|
server1 | 172.25.1.1 | rhel7.5 |
yum install git -y
git --version #查看 git 的版本
git init
命令创建仓库mkdir demo #创建目录
cd demo/
git init #将demo目录初始化为git本地仓库
l. #查看当前目录中隐藏文件
l.查看到的隐藏目录.git
,这个子目录中含有初始化Git仓库的所有必须文件,是git仓库的骨干。
下面的操作均在Git仓库demo目录下。
git add
命令添加到缓存区touch file1
git status -s #显示文件状态
git add file1
git status -s
git commit -m "add file1"
命令git commit,可以一次提交很多文件,-m后面输入的是本次提交的说明,如果不使用-m,会出现编辑器来让你写自己的注释信息。
上图出现的报错提醒,提示需要设置账户信息
git config --global user.name "liuyan"
git config --global user.email liuyan@example.com
设置的账户信息可以在root用户根目录下的隐藏文件.gitconfig 中查看
添加完账户后重新提交文本
git status -s
echo redhat > file1 #更改当前工作区的文件内容
git status -s #查看状态,发现其状态为右边M
git add file1 #将file1文件添加到暂存区
git status -s #查看到其状态为左边M
git commit -m "update file1" #提交到版本仓库
git status -s #查看不到状态
在Git中,每当你文件修改完成时,就可以“保存一个快照”,这个快照在Git中被称为commit
。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作。
git log
命令查看文件更改日志记录git log
日志简化输出方式:
git log --pretty=oneline
git reflog
git reflog -p #可查看日志变更
对已经提交到本地仓库一的文件进行再次修改后撤销修改的方法:
【1】修改后还在当前目录(工作区)里,未提交到暂存区:
git checkout -- file1
总结:
命令git checkout – readme.txt意思就是,把file1文件在工作区的修改全部撤销,这里有两种情况:
一种是file1自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是file1已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
【2】修改后git add
提交到了暂存区:
git reset HEAD file1 #撤销暂存区(unstage)的修改,重新放回工作区
git checkout -- file1 #撤销工作区的修改
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
【3】修改后git commit
提交到了版崩仓库:
回退到上一版: git reset --hard HEAD^
回退到倒数第二版: git rest --hard HEAD^^
回退到commit id为xxxxxxx的版本(指定回退版本号) : git rest --hard xxxxxxx
在Git中,用HEAD表示当前版本,上一个版本就是HEAD^ ,上上一个版本就是HEAD^ ^ ,当然往上100个版本写100个^太麻烦,所以写成HEAD~100。
git reset 和 git reset --hard区别:
使用命令git rm
删除一个文件。
git rm 文件名
删除之后,本地目录下已经删除的文件夹就不再存在了,为了能将版崩仓库的相应文件也删除掉,我们要把这次操作提交到上去。
git commit -m "rm file1"
如果git rm 误删了,版本库里还有文件,可以很轻松地把误删的文件恢复到最新版本:
git checkout -- file1
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
注意:如果一个文件已经提交到版本库,那么永远不用担心误删,但是只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。