Git
定义
开源 分布式 版本控制工具(SVN为集中式)
分为: 本地仓库与远程仓库
功能
- 代码备份
- 版本控制
- 协同开发
- 代码追溯
场景
团队协同开发项目
原理
工作目录working tree -->暂存区 index --> 本地仓库repository -->暂存区–> 远程仓库remote repository
使用
Git GUI 图形化
工具
TortoiseGit
IDEA
SmartGit
SourceTree
Git BUSH 命令行
基本命令
git
查看git信息
git init
初始化 创建repository
git add <file>
将文件的修改提交到暂存区 index
git commit -m "描述信息"
将暂存区的文件提交到本地仓库的master分支(系统自动创建的第一个分支)
如果不add到缓存区,是无法提交的
git status
查看文件当前状态, 是否add 或 commit
git log --pretty=oneline
查看提交日志
git reset --hard HEAD^
回到上个版本 HEAD表示当前版本,每一个^表示版本 HEAD~100 上100个版本 HEAD~3
git reset --hard 版本号
回到指定版本
git reflog
所有分支的操作记录,包括被删除的commit记录
记录每一条命令,可以查看到版本号
git diff HEAD -- <file>
查看当前工作区文件与仓库中最新文件的差异
git checkout -- <file>
丢弃工作区的修改(用仓库中的文件替换工作区文件)
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和仓库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次 commit 或 add 时的状态
git reset HEAD <file>
撤销暂存区的修改
删除
1. git rm <file>
2. git commit -m "描述信息"
删除文件
远程仓库
- 用户名密码连接(使用Https协议地址)
- 每次和远程通信都需要输入用户名和密码
- SSH免密连接(使用SSH协议地址)
- 一次性在双方服务器上配置公私密钥之后双方的通信分别使用公钥或私钥加密传输, 保障数据的安全性, 无须每次密码的校验
#设置本地默认远程仓库信息
$ git config --global user.name "username"
$ git config --global user.email "email"
#查看是否已有公钥
$ cd ~/.sh
#没有则创建私钥 非对称加密算法rsa
$ ssh-keygen -t rsa -C "eamil"
#私钥id_rsa 公钥id_rsa.pub
#复制到id_rsa.pub中内容到平台对应设置中
GitHub
git remote add 自定义远程别名 git@github.com:用户名/仓库名.git
(本地仓库名需和远程一致)
本地关联到远程
git push -u 远程别名 分支名
第一次提交,与远程仓库关联
git push [远程别名 分支名]
提交到远程仓库
git push --set-upstream origin 分支名
添加远程分支
git clone 地址
克隆远程仓库到本地, 下载所有文件 (全量)
git pull 远程名 分支名
(增量)更新, 从远程抓取分支,如果有冲突,要先处理冲突。
码云 提供免费私有库
$ ssh -T git@gitee.com #查看添加SSH是否成功
#其他操作与github相同
分支
创建新的分支,相当于在主分支master上新建了新的分支,并将HEAD指向新的分支,以后的操作就在该分支上进行。
合并时就把master指向当前分支的最新版本,同时HEAD指向master。
git checkout -b <name>
创建并切换到分支 <name>
相当于 git branch <name> 和 git checkout <name> 两条命令
git branch
查看当前分支
git checkout <name>
切换回master分支
git merge --no-ff -m "描述信息" <name>
合并分支
git branch -d <name>
删除分支
git branch -D <name>
删除一个没有合并过的分支
git log --graph
查看分支合并图
# 修改bug
git stash
临时存储当前分支的工作情况
git stash list
查看所有的stash
git stash apply stash名
恢复指定的stash
git stash drop
删除stash
git stash pop
恢复并删除
git cherry-pick 提交名
复制特定的提交到当前分支
# 新版本(实测1.8.3不支持)2.27.0支持
git switch -c <name>
创建并切换
git switch <name>
切换
多人协作开发
git remote -v
查看远程库信息
本地新建的分支如果不推送到远程,对其他人就是不可见的
git push 远程别名 branch-name
从本地推送分支, 如果推送失败,先用git pull抓取远程的新提交
git checkout -b branch-name origin/branch-name
在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致;
git branch --set-upstream branch-name origin/branch-name
建立本地分支和远程分支的关联