如何优雅地使用git(一)

    xiaoxiao2026-10-06  1

    目录

    目录Git的简介 什么是Git啊Git是怎么诞生的啊分布式与集中式Git的基本结构 Git的基本使用总结 安装并配置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 8月 17 10:49 . drwx------ 5 root root 4096 8月 17 10:48 .. drwxr-xr-x 7 root root 4096 8月 17 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的基本应用,感谢廖老师的无私分享,从他那里学了不少东西,哈哈,话说廖老师的网站真心不错哦。

    转载请注明原文地址: https://ju.6miu.com/read-1312677.html
    最新回复(0)