git是什么以及它的特点
首先,git是最先进的分布式版本控制系统
版本就是不同的代码,新版本旧版本就是说用新的代码来替代旧的代码
git的特点
- 对非线性开发模式的强力支持
- 完全分布式
- 有能力高效管理类似Linux内核一样的超大项目(速度和数据量)
集中式和分布式的区别:
- 集中式控制系统版本库是集中存放在中央服务器的,工作需要从中央服务器取得最新版本,干完活后再推送到中央服务器,其工作时需要联网。
- 分布式版本控制系统没有“中央服务器”每个人的电脑都是一个完整的版本库
git中基本的一些概念
- 工作区:就是你能在电脑里看到的目录;
- 暂存区:英文叫stage,或index。一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫做索引;
- 版本库:工作区有一个隐藏的.git,这个不算工作区,而是Git的版本库;
git的基本操作
-
创建版本库(git init)
- 用git init在目录中创建新的Git仓库,会在目录生成一个.git的隐藏文件夹,它是Git用来跟踪管理版本库的
-
添加到暂存区(git add)
- git add可以将文件添加到暂存区,作为下次提交的 (部分或全部内容)
- git add 文件名
- git add .表示添加当前项目的所有文件(包括文件内 容修改以及新文件)
- git add -u将修该的文件提交到暂存区,add-u不会 提交新文件(u --update)
- git add -A 是上面两个方法的合集(A --all)
-
查看状态(git status)
- git status 用于查看项目的当前状态,git status -s加-s参数表示查看的是简要信息,“AM"状态表示这个文件在我们将它添加到缓存之后又有改动
-
查看改动(git diff)
- 显示已写入缓存与以修改但尚未写入缓存的改动
- git diff用来查看git stdtus的结果的详细信息
- git diff --cached 查看以缓存的改动
- git diff HEAD 查看以缓存的与为缓存的所有改动
- git diff --stat 显示摘要而非整个diff
-
向仓库提交代码(git commit)
- git commit会将缓存区内容添加到仓库中
- git commit -m “first commit” (-m选项可以提供提交注释,引号里面的是对提交内容的注释)
- git commit -a (-a选项允许跳过git add这一步)
-
取消以缓存的内容(git reset HEAD)
- HEAD 指向的版本是当前版本
- 执行git reset HEAD 会取消之前git add添加
-
删除文件(git rm)
- git rm 文件名/文件
- 如果删除之前修改过并已经放在暂存区域的话,则必须要用强制删除选项 -f
- 如果把文件从暂存区域移出,但仍然希望保留在当前工作目录中(从跟踪清单中删除),可使用 --cached选项
- 当不小心删错时,可以使用"git checkout – 文件”命令将误删文件恢复到最新版本
- 可以使用-r参数进行递归删除,即如果后面跟是一个目录作为参数,则会递归删除整个目录中的所有目录和文件
-
移动/重命名(gitmv)移动或重命名一个文件,目录。软链接
远程仓库
- 添加远程仓库
- 在github上创建一个在线仓库
- git remote add origin"https://github.com/yintianyan/库名.git"(将本地已有仓库与远程仓库关联)
- git push -u origin master(由于远程仓库是空的,第一次推送master分支时,加上-u参数)
- 克隆操作(git clone)
- 使用git clone 拷贝一个Git仓库到本地,让自己能够查看该项目,或进行修改
- git clone ‘url地址’
- 更新数据(git fetch、git pull)
- git fetch从远程获取最新版本到本地,不会自动更新merge
- git pull从远程获取最新版本到本地并merge到本地
git的分支管理
git branch 分支名 (创建新分支名)
git checkout 分支名(切换分支命令)
git merge 合并分支命令
git branch (列出分支基本命令)
git branch -d 分支名(删除分支)
可以使用"git checkout-b分支名"来创建新分支并立即切换到该分支下
- 解决冲突
- 当两个分支中对同一行代码作出修改时,就会提示有合并冲突,必须手动解决,使用“git
status”也可以告诉我们存在冲突文件和文件名,使用“git log”也可以看到合并的情况 - 通常合并分支时会用到Fast forward模式,这样删除分支后,也会丢掉一些分支信息
- 合并时可以使用”–no-ff“参数强制禁用Fastforward模式,这样git合并时会生成一个新的commit,然后可以在历史分支看出分支信息
- git merge --no-ff
- 当两个分支中对同一行代码作出修改时,就会提示有合并冲突,必须手动解决,使用“git
- 分支策略
- master分支非常稳定,仅用于开发新版本,平时不要直接在上面开发;平时可以和团队成员在dev上开发
- 查看远程库信息(git remote)
- 远程仓库的默认名字是origin
- git remote -v (-v参数可以显示更详细的信息)
- 推送分支(git push)
- git push origin master(会推送master分支),如果要推送其他分支如”dev“可使用git push origin dev来推送
- 多人协作
- 使用git pull看有没有人远程提交代码,有的话将其合并到本地
- 如果合并有冲突就解决冲突,并在本地提交
- 没有冲突或者解决冲突后再用git push origin “分支名” 推送就会成功
回退与撤销
- 撤销修改(git checkout – file)
- 会把该文件在工作区的修改全部撤销,即回退到git commit或git add时的状态
- 命令中的“–”很重要,不然git checkout就是切换分支了
- git log(历史记录)
- “–pretty=oneline”参数会精简显示,里面会有一串commit id(用十六进制表示)
- git reset (版本回退)会把当前版本回退到上一个版本
- 在Git中,用HEAD表示当前版本,上一个版本就是HEAD,上上个版本就是HEAD^,往上一百个版本会写成HEAD~100
- 版本回退后,当前的这个版本是不会被删除的,只是HEAD的指向变了
- 如果回退失误,就需要找到之前版本的commit id
- git reflog命令会记录你的每一次操作,用来找到commit id
- 然后用“git reset --hard ‘commit id’“切换到指定版本