罪恶的起源,git初识
git和svn的区别
- SVN、cvs集中式的版本控制系统
- Git是分布式版本控制系统
git安装
Linux 尝试输入git可查看是否安装,如果未安装按照提示安装
windows直接官网下桌面版
安装完成后,还需要最后一步设置,在命令行输入:
1 | $ git config --global user.name "Your Name" |
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址
注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
创建版本仓库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:
1 | $ mkdir learngit |
pwd命令用于显示当前目录
Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
第二步,通过git init命令把这个目录变成Git可以管理的仓库:
1 | $ git init |
当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏
如果没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
在当前目录中添加任意文件:readme.txt(示例而已)
将文件添加到仓库
1 | $ git add readme.txt |
将文件提交仓库中
1 | $ git commit -m "wrote a readme file" |
一些常用命令
修改了文件git status
查看状态
1 | $ git status |
git status
命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
git diff
查看具体修改的内容差异
1 | $ git diff readme.txt |
版本回退
git log
命令显示从最近到最远的提交日志
1 | $ git log |
git log --pretty=oneline
显示简略信息
1 | $ git log --pretty=oneline |
类似3628164…882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
回退上一个版本:
1 | git reset --hard HEAD^ |
回退上一个的上一个版本
1 | git reset --hard HEAD^^ |
版本多了就
1 | git reset --hard HEAD~100 |
通过commit id回退版本或回到最新版
1 | $ git reset --hard 3628164 |
版本号没必要写全,前几位就可以了,Git会自动去找。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向你回退的版本
现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
Git提供了一个命令
1 | git reflog |
用来记录你的每一次命令:
1 | $ git reflog |
这样可以找到某个版本的commit id了
工作区与暂存区
操作git的目录就是工作区
版本库:
在git init时,会在当前工作区目录下生成.git目录。这不属于工作区的,而属于Git版本库
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
撤销修改
git checkout -- file
可以丢弃工作区的修改:
一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
删除文件
从版本库中删除
1 | git rm file |
提交
远程仓库(github)
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。
如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
1 | $ ssh-keygen -t rsa -C "[email protected]" |
id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
为什么GitHub需要SSH Key呢?
因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送
添加远程仓库
1.在github上创建空仓库
2.关联本地仓库与远程仓库
1 | $ git remote add origin [email protected]:youname/learngit.git |
3.初次推送本地仓库的内容到远程仓库中
1 | git push -u origin master |
1 | $ git push -u origin master |
4.往后的每次推送$ git push origin master
SSH警告
第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:
1 | The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established. |
输入yes回车即可。
从远程仓库克隆
git clone
克隆一个本地库:
1 | $ git clone https://github.com/username/gitTest.git |
分支管理
分支作用:
假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:
每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长:
当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!
不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:
假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:
合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:
创建dev分支,然后切换到dev分支:
1 | $ git checkout -b dev |
git checkout
命令加上-b参数表示创建并切换,相当于以下两条命令:
1 | $ git branch dev |
用git branch
命令查看当前分支:
*号为当前分支
1 | $ git branch |
合并分支
git merge命令用于合并指定分支到当前分支。所以合并前先切换需要合并的分支之外的分支
1 | $ git merge dev |
Fast-forward 表示是快速合并
删除分支
1 | $ git branch -d dev |
小结
1 | Git鼓励大量使用分支: |
合并分支的冲突处理
合并分支时如果有冲突,在当前分支修改后提交,删除要合并的分支
本文标题:罪恶的起源,git初识
文章作者:AwesomeYang
发布时间:2017-09-02
最后更新:2024-05-25
原始链接:https://struy.cn/2017/09/02/git-0/
版权声明:未经允许禁止转载,请关注公众号联系作者