简介
工作区:工作能看见的目录
版本库:工作区中的隐藏目录.git
暂存区:版本库中的stage
HEAD:指向master(当前分支)的指针
git add //将文件修改添加到暂存区
git commit //将暂存区所有内容提交到当前分支
//git自动创建master分支
git clone克隆远程仓库:
1、HTTPS方式,直接git clone;2、SSH方式,需配置SSH KEY;
SSH KEY相关配置:
配置专属的SSH key,实现正常的身份认证,进行git操作
ssh-keygen -t rsa -C ****@qq.com//(注册github申请的邮箱,rsa是加密算法)
专属SSH key已生成:/users/用户名/.ssh/id_rsa.pub,复制内容至github的SSH key中
本地测试连接是否成功:
ssh -T git@github.com
查看版本
git --version
配置
配置信息
git config
git config --global user.name "lxh"
git config --global user.email "****@qq.com"
//--global:全局参数,只运行一次,之后在系统操作,git都使用该信息
检查配置
git config --list
//检查某一项配置:git config user.name
颜色配置
git config --global color.ui true//显示颜色
git忽略文件配置
//忽略某些特殊文件,不提交
在git工作区根目录下创建文件.gitignore,填入要忽略的文件名,一般不需要从头编辑,最后提交.gitignore
file.cpp
*.so
.*
!.gitignore//不忽略该文件
git add -f filename //强制添加被忽略文件
git check-ignore 文件//检查忽略规则
配置别名
git config --global alias.lxh status
//git status == git lxh
自定义git配置文件通常存放在.git/config
Git使用
初始化仓库
git init//使当前目录变成可被git管理的仓库
//.git,用来跟踪管理版本库
克隆现有仓库
git clone url [自定义仓库名可选] //默认每个文件每个版本
添加文件到暂存区
git add filename
提交暂存区内容到仓库
git commit -m "test"
//-m "..."备注说明
查看git仓库当前状态变化
git status
比较变动
git diff filename//查看相较于上一次暂存修改了什么内容
显示提交信息
git log
git log -1 //显示最后一次提交信息
//查看全部的commit记录
//--pretty=oneline 输出信息太多可添加,查看历史所有版本信息,只包含版本号和记录描述
git回退
//当前版本:HEAD
//上个版本:HEAD^
//上上个版本:HEAD^^
//往上n个版本:HEAD~n
git reset --hard HEAD^ //回退到上个版本
git重置
恢复到新版本,但找不到commit id
git reflog //记录每一次命令
git reset --hard (commit id)
重新提交
git commit --amend
//会将暂存区的文件提交,若自上次提交未作修改,提交不变,所修改的只是提交信息(会覆盖),只会显示一次提交
//eg:
git commit -m "test01"
git add a.txt
git commit --amend -m "test02"
取消暂存的文件
git reset HEAD filename......
//撤销暂存区的修改,重新放回工作区
撤销对文件的修改
git checkout -- filename......
//git会用最近提交的版本覆盖掉本地的文件
删除文件
git rm filename//从版本库删除文件
//并git commit
git commit -m "remove ...file"
Git分支
创建并切换分支
git checkout -b dev
//相当于
git branch dev
git checkout dev
查看当前分支
git branch//列出所有分支,当前分支前标有*
合并分支
git merge dev //合并指定分支到当前分支
git merge --no-ff -m "merge with no-ff" dev //--no-ff,禁用Fast forward模式,会生成一个新的commit
删除分支
git branch -d dev
git branch -D dev//强制删除
创建并切换分支
git switch -c dev
git switch dev//切换
隐藏当前工作区
git stash
//工作区会变干净,除非有没被git管理的文件
恢复工作区
git stash list //查看stash内容
//1、
git stash apply //恢复后stash内容并不删除,需要用git stash drop删除
//git stash apply stash@{0} 恢复指定的stash
//2、
git stash pop //恢复的同时删除stash内容
将指定的提交应用于其他分支
git cherry-pick commitid//复制特定的提交到当前分支,参数不一定是提交的哈希值,也可以是分支名,表示转移该分支的最新提交
//支持一次转移多个提交
//转移一系列连续提交
git cherry-pick A..B//不包含提交A,提交A必须早于提交B,包含提交A,A^..B
//cherry-pick选项
//-e,打开外部编辑器,编辑提交信息
//-n,只更新工作区与暂存区,不产生新提交
//-x,在提交信息末行追加信息,方便查询该提交是如何产生的
//-s,在提交信息末行追加签名
//-m parent-number,若原始提交为合并节点,cherry-pick默认失败,-m告诉git应采用哪个分支的变动,parent-number是从1开始的整数,代表原始提交的父分支编号
git cherry-pick -m 1 commitid
//cherry-pick采用提交来自编号1的父分支的变动,一般来说,1号父分支是接受变动的分支,2号父分支是作为变动来源的分支
//代码冲突,cherry-pick会停下
git cherry-pick --continue //修改冲突后让cherry-pick过程继续执行
git cherry-pick --abort //代码冲突后放弃合并,回到操作前
git cherry-pick --quit //代码冲突后,退出cherry-pick,不会回到操作前
添加一个远程仓库
git remote add name git://url
将远程代码抓取到本地
git fetch name
查看远程库的信息
git remote
//-v 显示更详细信息
推送分支
git push origin ma:dev
//本地分支ma,远程分支dev,:dev可省略,远程对应的分支
抓取分支
git pull //抓取最新的提交
建立本地分支与远程分支的链接
git branch --set-upstream-to=origin/dev dev
git checkout -b dev origin/dev //创建同时建立连接
git rebase //将分叉的提交历史整理成一条直线,看上去更直观
标签
//创建标签
git tag v1.0//默认标签在最新提交上
git tag v1.0 commitid
//-a标签名,-m指定说明文字
//查看标签
git tag //标签按字母排序
git show v1.0 //查看标签信息
//删除标签
git tag -d v1.0 //标签只存储在本地,不会自动推送到远程
//推送标签
git push origin v1.0
git push origin --tags //一次性推送所有未推送到远程的本地标签
//删除远程标签
//先删除本地,再远程
git push origin :refs/tags/name