git是什么
分布式版本控制系统
两个关键:词分布式、版本控制
版本控制:就是一个代码维护工具
分布式:就是一个集群的概念,一台电脑的性能不管是内存还是cpu终归是有上限的
分布式就是扩展这个上限的,把数据存放在10台电脑里,我们不用管数据存放在哪台
电脑里,就把集群当前一台电脑来用
分布式好处:1.让一个集群对外展现就好像一台电脑一样
2.分布式的扩容性非常强,比如:要是性能达到瓶颈了,增加电脑就好了
什么是版本库
版本库又叫仓库,就是一个目录,目录里所有文件都可以被git管理起来,每个文件的修改、删除、GIT都能跟踪,以便任何时刻都有一个追踪历史,或者将来某个时刻可以还原。
创建版本库
创建一个空目录,进入空目录,使用git init命令把这个目录变成GIT可以管理的仓库
如下图:.git是隐藏目录,说明test是个仓库
把文件添加到仓库
git add 文件名 添加到仓库里
git commit -m '注释信息' 提交到仓库里
仓库介绍
创建的目录test ,在经过git init之后变成仓库,里面会有.git隐藏目录
其实test目录分为两个区域,工作区和版本库
工作区:打开test目录我们肉眼能看到的就是工作区
.git目录是Git的版本库
里面有3个组成部分
1.暂存区(state)
2.自动创建的分支(master)
3.指向master的指针(HEAD)
通过git add 命令其实是将文件添加到state区域
通过git commit命令将文件提交到master分支上
时光穿梭机
git status 掌握仓库现状
出现以下提示 :
1.nothing to commit,working tree clean ,
没有可提交的,工作区域是干净的,工作区域和分支上的代码是一致的,就是说工作区里面没有新内容
2. 有提示
changes not staged for commit:( use git add to update what will be commited )
说明工作区与版本库代码不一致,工作区有更新的内容 use git add to update what will be commited 说明工作区与版本库代码不一致,工作区有更新的内容
需要做git add 、git commit
3. 上面的做完git add后,再通过git status命令查看
提示:changes to be committed:(use reset HEAD。。。)说明文件进入了暂存区
还没有到分支上
接着我们把文件从暂存区提交到分支上 git commit -m ‘xxx’
再git status查看状态,此时会提示:nothing to commit,working tree clean
git diff 该命令可以查看修改的内容,如下图:红色的版本库的内容,下面绿色的是工作区的内容
git log 可以查看所有的提交日志
git log --pretty=oneline 可以查看所有的提交日志(简单化)
git reset --hard HEAD^ 回到上一个版本
应用:没有bug再提交,有bug再回退到上一个版本
git reset --hard HEAD^^ 回到上上个版本
git reset --hard HEAD~100 回到上100个版本
git reset --hard 具体版本号 回退到具体版本(常用)
备注:
目前有3个本版
1.先回到第二个版本,通过git log 只会看到第二个与第一个版本,看不到第三个版本,如过要回到第三个版本有2种方法
1.可通过git reset --hard 具体版本号返回
2. git reflog 该命令记录每一次命令
git reset --hard 命令id号 回到具体版本,如下图
git checkout -- 文件名 代码撤销(回到最近的commit的代码)
在Windows上安装Git
1.从Git官网直接下载安装程序,然后按默认选项安装即可
2.安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出
一个类似命令行窗口的东西,就说明Git安装成功!
3.安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
为什么要配置上面的2条命令?
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
绑定用户名和邮箱
远程仓库
本地仓库和github远程仓库如何同步?
一、创建SSH Key
1. 找到.ssh目录,看看有没有id_rsa和id_rsa.pub(密钥、公钥),没有则执行以下命令
ssh-keygen -t rsa –C “youremail@example.com github上注册的邮箱
二、登录github,打开” settings”中的SSH Keys页面,然后点击“Add SSH Key”,填上任意title,在Key文本框里黏贴id_rsa.pub文件的内容。
如何添加远程库?
1.先创建一个githuab仓库,空的,我们可以用这个仓库克隆一个新仓库,还可以把已存在的
本地仓库与之关联,然后把本地仓库的内容上传到github仓库上
2.在本地仓库下运行命令:
添加一个新的远程 Git 仓库:
git remote add origin https://github.com/tugenhua0707/testgit.git
把本地仓库当前分支内容推送到远程仓库上
git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
从现在起,只要本地作了提交,就可以通过如下命令:
git push origin master
把本地master分支的最新修改推送到github上了,现在你就拥有了真正的分布式版本库了。
如何从远程库克隆
先有本地库,后有远程库时候,如何关联远程库?
假如远程库有新的内容了,我想克隆到本地来 如何克隆呢?
1.在github上创建一个远程库
2.通过git clone克隆一个本地库
创建与合并分支
每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支,HEAD指向的就是当前分支
git checkout -b dev 创建dev分支别切切换到dev
git branch 查看所有分支
cat doc.txt 看一下dev分支上的内容
在doc.txt中再添加一行数字7777到doc.txt
cat doc.txt 看一下内容:有7777
现在dev分支工作已完成,现在我们切换到主分支master上,
git checkout master
继续查看doc.txt内容如下
cat doc.txt 发现没有777内容
现在我们可以把dev分支上的内容合并到分支master上了,
可以在master分支上,使用如下命令 git merge dev
git merge命令用于合并指定分支到当前分支上
合并完成后,我们可以接着删除dev分支了,操作如下:
git branch –d dev
总结创建与合并分支命令如下:
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout –b name
合并某分支到当前分支:git merge name
删除分支:git branch –d name
如何解决冲突?
冲突产生:
master分支上有不同于功能分支上的内容的时候区合并就会产生冲突
解决:
在功能分支上填上和主干上一样的代码,再去提交
分支管理策略
通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff来禁用”Fast forward”模式。首先我们来做demo演示下:
创建一个dev分支。
修改readme.txt内容。
添加到暂存区。
切换回主分支(master)。
合并dev分支,使用命令 git merge –no-ff -m “注释” dev
查看历史记录
分支策略:首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。
Git基本常用命令如下:
mkdir: XX (创建一个空目录 XX指目录名)
pwd: 显示当前目录的路径。
git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
git add XX 把xx文件添加到暂存区去。
git commit –m “XX” 提交文件 –m 后面的是注释。
git status 查看仓库状态
git diff XX 查看XX文件修改了那些内容
git log 查看历史记录
git reset --hard HEAD^ 或者 git reset --hard HEAD~ 回退到上一个版本
(如果想回退到100个版本,使用git reset –hard HEAD~100 )
cat XX 查看XX文件内容
git reflog 查看历史记录的版本号id
git checkout -- XX 把XX文件在工作区的修改全部撤销。
git rm XX 删除XX文件
git remote add origin https://github.com/tugenhua0707/testgit 关联一个远程库
git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库
git clone https://github.com/tugenhua0707/testgit 从远程库中克隆
git checkout –b dev 创建dev分支 并切换到dev分支上
git branch 查看当前所有的分支
git checkout master 切换回master分支
git merge dev 在当前的分支上合并dev分支
git branch –d dev 删除dev分支
git branch name 创建分支
git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作
git stash list 查看所有被隐藏的文件列表
git stash apply 恢复被隐藏的文件,但是内容不删除
git stash drop 删除文件
git stash pop 恢复文件的同时 也删除文件
git remote 查看远程库的信息
git remote –v 查看远程库的详细信息
git push origin master Git会把master分支推送到远程库对应的远程分支上
多人协作工作模式一般是这样的
首先,可以试图用git push origin branch-name推送自己的修改.
如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并。
如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch-name推送。