如何优雅地使用git(一)

目录

Git的简介

什么是Git啊

git是目前世界上最先进的分布式版本控制系统,没有之一!

那什么是版本控制系统呢?它是一种在开开发过程中,确保由不同人所编辑的同一份档案(工程)都得到更新,他透过文档控制记录程序各个模块的改动,并为每次改动加以序列,并且编辑错误之后可以回溯到以前的版本的系统。

Git是怎么诞生的啊

万能的Linus在1991年创建了开源的Linux,从此Linux系统不断发展,然而Linux的不断发展是靠世界各地的Linux社区志愿者们的不懈努力,但是当初的版本控制系统要么就是不好用如SVN、CVS,要么商用收费,与Linux开源精神不符合。所以呢。。伟大Linus在2002年之前都是人工添加代码的。。醉了。Linux系统已经发展了十年了,代码库之大终于让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。然后呢2005年开发Samba的Andrew试图破解BitKeeper的协议,被BitMover公司发现了,于是BitMover公司怒了,收回Linux社区的免费使用权。这时候,这时候,伟大的Linus用了两个星期自己用C写了一个分布式版本控制系统,对,你没猜错,那就是Git。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub。

分布式与集中式

集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。集中式版本控制系统最大的毛病就是必须联网才能工作。那分布式版本控制系统与集中式版本控制系统有何不同呢?分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。双方之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
当然Git优势多多,以后使用中就会知道了。

Git的基本结构

不多说直接上图
这里写图片描述

Git的基本使用总结

首先,我们要坚决抛弃Windows,不要问为什么,除了娱乐不要用它就对了,以下均为在Linux中(本人使用Ubuntu 14.04,偶尔用Kali),土豪同学用Mac的。。细微差别自己解决。

安装并配置Git

当时我们可以用万能的apt啊:

sudo apt-get install git

如果是老一点的Debian或者Ubuntu,那就要(所以要及时更新源啊):

sudo apt-get install git-core

如果是其他的Linux呢那就源码安装吧,解压后:

./config
make
sudo make install

安装完成后初步设置一下子:

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

这里强烈建议大家去申请Gmail吧,人家Nessus都不认QQ邮箱的。
注意git config命令的- -global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
至此,恭喜你,成功安装了Git。

创建版本库

首先,选择一个合适的目录,作为自己的工作目录

root@firgavin-virtual-machine:~# mkdir learngit
root@firgavin-virtual-machine:~# cd learngit/
root@firgavin-virtual-machine:~/learngit# pwd
/root/learngit
root@firgavin-virtual-machine:~/learngit# git in
init       instaweb   
root@firgavin-virtual-machine:~/learngit# git init
初始化空的 Git 仓库于 /root/learngit/.git/

那么,一个新的Git仓库就建好了。切换进去查看一下:

root@firgavin-virtual-machine:~/learngit# ls -al
总用量 12
drwxr-xr-x 3 root root 4096  817 10:49 .
drwx------ 5 root root 4096  817 10:48 ..
drwxr-xr-x 7 root root 4096  817 10:49 .git

虽然是个空的仓库(empty Git repository),但是可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

基本操作啊

我们随便创建一个文件,当然是在当前目录下了:

root@firgavin-virtual-machine:~/learngit# vi readme.txt
root@firgavin-virtual-machine:~/learngit# cat readme.txt 
Git is a version control system.
Git is free software.

提交也是相当简单的啊,只需要两步(不查看状态的情况下)即可:

root@firgavin-virtual-machine:~/learngit# git add readme.txt 
root@firgavin-virtual-machine:~/learngit# git commit -m "wrote a readme file"
[master (根提交) 3b5aaff] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

这里呢,-m参数后面接的是本次提交说明,养成良好习惯每次都要写,而且要干练精简。
修改一下readme.txt如下:

root@firgavin-virtual-machine:~/learngit# vi readme.txt 
root@firgavin-virtual-machine:~/learngit# cat readme.txt 
Git is a distributed version control system.
Git is free software.

使用git status查看当前仓库的具体状态:

root@firgavin-virtual-machine:~/learngit# git status 
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改:         readme.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a"

显然我们修改了文件但是并没有提交,那么我们的文件还是处于工作区的,于是Git人性化地提示我们,到底是要提交呢,还是放弃提交呢。不好确定就看一下修改内容吧:

root@firgavin-virtual-machine:~/learngit# git diff
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.

很清晰的显示出改动的地方,不是么。
当然你确定修改的话就正常add然后commit,如果你要撤销修改的话,按照提示:

root@firgavin-virtual-machine:~/learngit# git checkout -- readme.txt
root@firgavin-virtual-machine:~/learngit# cat readme.txt 
Git is a version control system.
Git is free software.
root@firgavin-virtual-machine:~/learngit# 

命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。
以上情况使用于你修改了工作区想直接丢弃工作区的修改,如果你修改了并且添加到了暂存区那么就要:

root@firgavin-virtual-machine:~/learngit# git reset HEAD readme.txt
重置后取消暂存的变更:
M   readme.txt
root@firgavin-virtual-machine:~/learngit# git status 
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改:         readme.txt

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
root@firgavin-virtual-machine:~/learngit# 

这里需要优先使用git reset HEAD file取消暂存区的变更,查看状态发现变更此时位于工作区。
然后参考第一种git checkout – file就万事大吉。
如果不但将文件add了又commit了,那么久需要版本回退
首先查看下当前有多少个版本:

root@firgavin-virtual-machine:~/learngit# git log
commit 7613ea2dd2a3b5333fb637b9c31fc74c6d4fa0c8
Author: Xiaoming <3052355537@qq.com>
Date:   Wed Aug 17 11:40:34 2016 +0800

    di 1 ci ciu gai

commit 3b5aaff96463cad74ef7238a8324fc3298b7e748
Author: Xiaoming <3052355537@qq.com>
Date:   Wed Aug 17 11:02:04 2016 +0800

    wrote a readme file

或者使用一个更为简洁的命令来查看版本:

root@firgavin-virtual-machine:~/learngit# git log --pretty=oneline 
7613ea2dd2a3b5333fb637b9c31fc74c6d4fa0c8 di 1 ci ciu gai
3b5aaff96463cad74ef7238a8324fc3298b7e748 wrote a readme file

那么退回上一个版本只需要:

root@firgavin-virtual-machine:~/learngit# git reset --hard HEAD^
HEAD 现在位于 3b5aaff wrote a readme file
root@firgavin-virtual-machine:~/learngit# git log
commit 3b5aaff96463cad74ef7238a8324fc3298b7e748
Author: Xiaoming <3052355537@qq.com>
Date:   Wed Aug 17 11:02:04 2016 +0800

    wrote a readme file

好吧我操作失误又想回到刚才的版本怎么办,先用git reflog查看下commit ID然后调回即可:

root@firgavin-virtual-machine:~/learngit# git reflog 
3b5aaff HEAD@{0}: reset: moving to HEAD^
7613ea2 HEAD@{1}: commit: di 1 ci ciu gai
3b5aaff HEAD@{2}: commit (initial): wrote a readme file
root@firgavin-virtual-machine:~/learngit# git reset --hard 7613ea2
HEAD 现在位于 7613ea2 di 1 ci ciu gai
root@firgavin-virtual-machine:~/learngit# git log 
commit 7613ea2dd2a3b5333fb637b9c31fc74c6d4fa0c8
Author: Xiaoming <3052355537@qq.com>
Date:   Wed Aug 17 11:40:34 2016 +0800

    di 1 ci ciu gai

commit 3b5aaff96463cad74ef7238a8324fc3298b7e748
Author: Xiaoming <3052355537@qq.com>
Date:   Wed Aug 17 11:02:04 2016 +0800

    wrote a readme file

总结一下,git reset –hard HEAD^回到上个版本,git reset –hard commitID回到ID提交位置。
最后删除文件就十分简单明了了:

git rm filename
git commit -m "remove filename"

这样就可以将文件从版本库中删除了。万一从版本库中误删了可以:

git checkout -- filename

即可将文件恢复至最新版本。

以上是Git的基本应用,感谢廖老师的无私分享,从他那里学了不少东西,哈哈,话说廖老师的网站真心不错哦。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的影城管理系统,源码+数据库+论文答辩+毕业论文+视频演示 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多生活之中,随之就产生了“小徐影城管理系统”,这样就让小徐影城管理系统更加方便简单。 对于本小徐影城管理系统的设计来说,系统开发主要是采用java语言技术,在整个系统的设计中应用MySQL数据库来完成数据存储,具体根据小徐影城管理系统的现状来进行开发的,具体根据现实的需求来实现小徐影城管理系统网络化的管理,各类信息有序地进行存储,进入小徐影城管理系统页面之后,方可开始操作主控界面,主要功能包括管理员:首页、个人中心、用户管理、电影类型管理、放映厅管理、电影信息管理、购票统计管理、系统管理、订单管理,用户前台;首页、电影信息、电影资讯、个人中心、后台管理、在线客服等功能。 本论文主要讲述了小徐影城管理系统开发背景,该系统它主要是对需求分析和功能需求做了介绍,并且对系统做了详细的测试和总结。具体从业务流程、数据库设计和系统结构等多方面的问题。望能利用先进的计算机技术和网络技术来改变目前的小徐影城管理系统状况,提高管理效率。 关键词:小徐影城管理系统;Spring Boot框架,MySQL数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值