####
1.git add之后没有commit就进行了版本穿梭,于是add的没了
解决办法:git fsck --lost-found,之后在.git/lost-found/other中找到
2.新建分支修改内容后返回主分支发现内容也变了
解决办法:其实主分支内容并没有改变,因为新建分支的修改没有提交,只需返回新建分支后提交,返回返回主分支就可以发现并没有更改。
####
git
git是一个免费的,开源的分布式版本控制系统,可以快速高效地处理从小型到大型地各种项目
####
版本控制
记录文件内容变化,记录文件修改的历史记录
由个人开发过渡到团队协作,多副本,所以需要适用版本控制工具
####
集中式版本控制和集中式版本控制的区别
集中式:文件存储在一个中央服务器中,需要时下载,修改之后推送到服务器中,相当于图书馆借书
优点:每个人可以看到其他人在做什么,管理员也可以控制每个人的权限,管理一个集中化的系统
缺点:中央服务器单点故障,需要联网才能工作,局域网还好速度快,如果在互联网中,需要很长的时间
分布式:没有中央服务器,每个人的电脑中都有一个版本,不需要联网,一个人的丢失了,再复制一个就好了
也有一个中央服务器,未来交换大家的修改,没有它一样干活,只是交换不方便
####
版本控制工具
集中式版本控制系统:svn
分布式版本控制系统:git
####
代码托管中心
代码托管中心式基于网络服务器的远程代码仓库,一般称为远程库
####
git
工作区:写代码修改代码的文件夹部分
暂存区:git add后你的代码就会以快照的方式存储到暂存区也就是.git文件夹内,快照可以理解为代码的备份,但是这个备份不是简单的复制粘贴,而是会根据你的文件差异进行处理压缩。可以理解为用来记录你的代码以及进行更改的地方。
本地仓库:git commit最终提交更改,实际就是把暂存区的内容提交到本地仓库中,commit暂存区的内容依旧保留
管理修改、暂存、提交
为什么要暂存
暂存可以理解为草稿纸,在修改完成后适用git commit把修改添加到仓库,git会帮我们生成版本号用来进行版本的最终控制
####
git常用命令
git config --global user.name 设置用户签名
git config --global user.email 设置用户签名 签名的作用就是为了区分不同的操作者,在每个版本的提交信息中都可以看到
git init 初始化本地库
git status 查看本地库状态
git add 文件名 添加到暂存区
git commit -m "日志信息" 文件名 提交到本地库
git reflog 查看历史记录
git log 查看完整信息(包含用户签名,可以看到是谁更改的)
git reset --hard 版本号 版本穿梭
####
分支
在版本控制中,同时推进多个任务,为每个任务可以创建每个任务的分支,适用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发的时候不会影响主线分支的运行,对于初学者来说,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层是指针的引用)
好处:同时推进多个功能的开发,提高效率。如果在开发中有一个分支失败,不会对其他分支有任何影响,失败的分支删除重新开始就好
命令:
git branch 分支名 创建分支
git branch -v 查看分支
git checkout 分支名 切换分支
git merge 分支名 把指定的分支合并到当前分支上
####
分支冲突
从主分支新建了一个分支,之后各自修改了主分支和新建分支并进行了提交,这时两个分支中都有新提交的内容就会产生分支冲突。
解决办法:
1.在主分支中打开文件,手动删除合并
2.git add
3.git commit -m "日志" (注意不要写文件名,不然会报错)
4.成功
####
git pull和git clone的区别
git clone:是一个从无到有的过程,克隆的是整个库
git pull:是将更新的分支merge的过程 fetch+merge
####
团队内合作和跨团队合作
####
github
git remote 别名 远程库连接 创建别名,不然链接太长
git remote -v 查看别名
git push 别名 分支 把本地库的分支推送上去
git pull 别名 分支 拉起远程库的分支
git clone 链接 克隆项目 (1.拉取代码2.初始化本地库3.创建别名“默认别名是origin”)