我对git的认识
Git是一个版本控制系统,最基本的功能就是实现文件迭代时防止历史修改记录的丢失。在此基础上形成了分布式文件管理体系,即多人共同远程操作等等这些功能。(Git是目前世界上最先进的分布式版本控制系统(没有之一)-摘自廖雪峰的git教程)
知道了git是做什么的,那么就可以开始为了达到预期的效果进行操作啦!
- 名词解释:
工作区:你能看到的,编辑<file>的地方,你随便改,只是在工作区改而已,没有add和commit的都不做数 暂存区:add以后commit之前文件版本存放的位置 版本库:commit以后,文件的位置
首先要在本地安装git:
安装之前,可以在cmd输入git回车,查看有没有安装git。
官网下载(https://git-scm.com/downloads)
国内镜像(https://pan.baidu.com/s/1kU5OCOB#list/path=%2Fpub%2Fgit)
两者没什么区别,就是官网的对网速有要求。
安装过程没什么可说的,一路回车。安装完成以后,在开始菜单里面找到git bash,然后弹出类似命令行窗口的东西,对git进行设置,进行自报家门。如下:
$ git –global user.name “Zhangziyi”
$ git –global user.email “15227974559@163.com”
(–global 参数的意思就是说,这台机器上所有的git仓库都会用这个name和email,不用再次设置了)自报家门以后就可以开始造作了!
首先建一个仓库,其实就是先找一个路径:$ cd f: //切换到需要的路径下 $ mkdir github //创建一个文件夹 $ cd github //切换到新创建的文件夹下 $ pwd //显示当前路径,确认路径跟自己预期的效果是一样的 $ git init //初始化git仓库,到这里,这个文件夹就可以被称为是本地的一个git仓库了 之后返回一句话: Initialized empty Git repository in /Users/michael/learngit/.git/ 翻译过来就是,你在这个路径下初始化了一个空的git仓库,并且多了一个隐藏文件.git
建仓以后就是一系列的操作:
$ git add #.xxx //把文件添加到仓库 $ git commit -m "提交的相关说明" //提交
到这里,本地一系列正常路子的操作就够用了,但是很显然,这是不够的,因为之前已经说明了,版本控制系统,版本呢?控制呢?下面就开始做这些事了!
版本回退:
$ git status //查看当前仓库的状态,比如说我修改了其中一个文件,但是没有提交,然后在下面就会告诉你的 //如果没有修改的话 nothing to commit, working tree clean $ git diff //查看当前文件你修改了什么东西, 即different $ git log //查看所有更改历史,清晰明了 //当然我看完廖雪峰的教程最后一章,把他修改了一下 $ git lg 就看到效果了 //修改方法 $ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" $ git log --pretty=oneline //后面加上参数以后,显示的内容不会像不带参数那么全,但是够用了 //里面会出现commi id 就是一个32位的字符串,这个很重要的! $ git reset --hard HEAD^ //往前翻一个版本 $ git reset --hard <commit id> //回退到指定版本 $ git reflog //记录你的每一次命令,让你知道昨晚喝多了以后到底做了什么不可告人的事情!到这里的话,版本回退,版本提交,记录以前所有的事情,都已经差不多搞定了。但是,我改了一些东西,后来想了想,还是不改了,但是里面修改了好多地方,我哪里记得清楚啊! $ git checkout --<file> //你的修改全部去掉,就好像是返回上一个版本的感觉,但是没commit,这个就不是一个版本,所以不能用git reset --hard命令了! $ cat <file> //查看这个文件里面的内容,仔细看看,嗯,确实改回来了! 但是我已经add到暂存区了,怎么办? $ git reset HEAD <file> //把暂存区的修改撤销掉然后再用 $ git checkout --<file>,齐活儿!在git里面删除文件,如果你直接把文件右键删除,git 里面肯定会报错。 $ git rm <file> //删除文件,然后需要commit一下,保证版本库的一致性!
当然,误删了可以用checkout返回一下,就可以了。
执行到这里的话呢,本地git就可以支持绝大部分的操作了。但是现在互联网时代,我在家里电脑上利用空闲时间也想继续完成我的项目,所以就得需要类似云端一样的功能来支持这个工作了,因为我毕竟不能直接拿个u盘随身带着,每次下班都得copy一下吧!所以git最厉害的一块就是远程仓库的使用。而且远程仓库最大的好处就是不用担心你的电脑被外星人劫持了,影响到你的文件。
下面就开始远程连接GitHub吧!首先呢要先满足两个要求: a、你有一个github账号,并且建了一个git仓库 b、本地已经建了一个git仓库,并且正常运行 然后东西齐全就可以开搞了! 1、$ ssh-keygen rsa -C "15227974559@163.com" //生成你的ssh key,在根目录(和仓库名同级目录)下会找到.ssh文件,里面有两个文件id_rsa是私钥,不能泄露,id_ssa.pub是公钥,可以随便给任何人 2、登录GitHub->设置->ssh Key,填写一个你喜欢的title,然后把公钥里面的东西,全部粘贴到key里面->点击类似确定的按钮,你就可以看到已经成功添加了 $ add remote origin git@github.com:pirplechildren/learngit //增加一个远程库origin,他的链接指向是... //当然git@...后面可以用GitHub上提示你的链接,直接copy过来就好了 //通过这个命令,你完全可以做到一个本地仓库同时对应多个远程仓库,但是你得记住哪个是哪个,别弄错了 $ git push -u origin master //同步线上和本地的内容就ok了 [红色字]对了,我在连接远程的时候,出现了一个 HttpRequestException encountered... 的错误,这是因为Github 禁用了TLS v1.0 and v1.1,必须更新Windows的git凭证管理器通过此网址https://github.com/Microsoft/Git-Credential-Manager-for-Windows/releases/ 下载一个,然后安装就完美解决了。 当然一般你接触一个新的项目或者进到新的公司,人家肯定已经把远程仓库给建好了,你需要做的只是把远程的克隆一份回来就可以操作了。为了实现这一个假设,现在GitHub上新建一个仓库并且勾选Initialize this repository with a README,他帮你初始化这个仓库的时候,会为你建一个README.md的文件。 然后 $ git clone git@github.com/purplechildren/newgitres.git(当然你可以复制过来地址) 就克隆好了,然后在重复原来的把自己ssh key放到github中,就可以提交并且修改啦! 创建与合并分支 这个功能主要是为了满足版本库里面的内容有一部分正在使用,但是修改的话会对使用造成影响。所以这个功能就横空出世了,你完全可以在一个分支里面进行修改提交等相关操作,对版本库里面的内容不会有影响。等全部改完了,然后直接合并到主线上,再把分支删除,就OK了。master就是主线,分支你可以自己命名。
$ git checkout -b dev //dev就是你要创建的新的分支并且进入该分支 //他等于 //$ git branch dev 创建 //$ git checkout dev 切入 //两步的合集 $ git branch //查看现在所有的分支,进行管理 $ git merge dev //进行把dev分支上的内容合并到当前分支上,所以你提交的时候要记得切回主线上 $ git -d branch dev //删除分支dev
补充:
1、删除文件或文件夹,以及重命名文件夹:$ git rm -rf 文件夹名然后提交,再同步到远程仓库