「这是我参与11月更文挑战的第一天,活动详情查看:2021最后一次更文挑战」
本教程实用性超强,边学边练,一点也不觉得枯燥。而且,你所学的Git命令是“充分且必要”的,掌握了这些东西,你就可以通过Git轻松地完成你的工作。
1、Git简介
Git是目前世界上最先进的分布式版本控制系统(没有之一,不接受反驳)。
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
2、SVN集中式 VS Git分布式
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
在Windows上安装Git:
在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
在Mac OS X上安装Git:
如果你正在使用Mac做开发,有两种安装Git的方法。
一是安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:brew.sh/。
第二种方法更简单,也是推荐的方法,就是直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。
安装完成后,还需要最后一步设置,因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址,在命令行输入:
git config --global user.email "email@qq.com"
1、创建版本库:
什么是版本库?版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。
首先,选择一个合适的地方,创建一个空目录:
pwd 命令是用于显示当前的目录。
第二步,通过git init命令把这个目录变成Git可以管理的仓库:
这时候你当前demogit目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的,没事千万不要手贱乱改这个目录里面的文件,否则,会把git仓库给破坏了。
2、把文件添加到版本库:
首先一定要在demogit目录下新建(包括子目录也行),其他文件不行,否则git找不到这个文件:
我们新建一个demo.txt文件,内容如下:Git demo
把一个文件放到Git仓库
git add demo.txt // 将文件添加入暂存区
git commit -m "首次提交" // 将文件提交到仓库
git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的demo.txt文件);1 insertions:插入了一行内容(demo.txt有一行内容)。
git status // 查看文件是否还有未提交
文件demo.txt继续添加内容:2222
上面的命令告诉我们 demo.txt文件已被修改,但是未被提交的修改。
接下来我想看下demo.txt文件到底改了什么内容,如何查看呢?可以使用如下命令:
如上可以看到,demo.txt文件内容从一行git demo改成 二行 添加了一行222内容。
知道了对demo.txt文件做了什么修改后,我们可以放心的提交到仓库了,提交修改和提交文件是一样的2步(第一步是git add 第二步是:git commit)。
我们已经学会了对文件修改提交,如果我们想看历史记录呢?
如果嫌上面显示的信息太多的话,我们可以使用命令 git log --pretty=oneline 演示如下:
3、版本回退
我想把当前的版本回退到上一个版本,要使用什么命令呢?可以使用如下2种命令,第一种是:git reset --hard HEAD^ 那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset --hard HEAD~100 即可。未回退之前的demo.txt内容如下:
再来查看下 demo.txt内容如下:通过命令cat demo.txt查看
可以看到,内容已经回退到上一个版本了。我们可以继续使用git log 来查看下历史记录信息,如下:
我们看到版本已经回退到了“首次提交”。
假如我们又后悔了呢,想找回“第二次提交”的内容呢?
1、可以用git reflog命令获取版本号,然后git reset --hard 版本号来恢复,可以看到 目前已经是最新的版本了。
4、理解工作区与暂存区的区别?
工作区:就是你在电脑上看到的目录,比如目录下demogit里的文件(.git隐藏目录版本库除外)。或者以后需要再新建的目录文件等等都属于工作区范畴。
版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。
我们前面说过使用Git提交文件到版本库有两步:
第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。
第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上。
我们继续使用demo来演示下:
我们在demo.txt再添加一行内容为333,接着在目录下新建一个文件为test.txt 内容为test,我们先用命令 git status来查看下状态,如下:
demo.txt被修改了,而test.txt还从来没有被添加过,所以它的状态是Untracked。
现在我们先使用git add 命令把2个文件都添加到暂存区中,再使用git status来查看下状态,如下:
接着我们可以使用git commit一次性提交到分支上,如下:
5、撤销修改和删除文件操作
添加新内容444,发现添加有误,你可以删掉最后一行,手动把文件恢复到上一个版本的状态。
如果用git status查看一下:你可以发现,Git会告诉你,git checkout -- file可以丢弃工作区的修改:
命令git checkout -- demo.txt意思就是,把demo.txt文件在工作区的修改全部撤销;
现在,看看readme.txt的文件内容,文件内容果然复原了。
添加了内容444,还git add到了暂存区
用命令git reset HEAD 可以把暂存区的修改撤销掉(unstage),重新放回工作区:
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
再用git status查看一下,现在暂存区是干净的,工作区有修改:
然后git checkout -- demo.txt删除工作区内容
删除文件:
假如我现在版本库demogit目录添加一个文件test.txt,然后提交。如下:
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:
这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了: