一、git基本概念
1.1三大工作区
- 工作目录:指你项目所在的目录,即执行git init的目录;
- 暂存区:存放SHA1码与工作目录文件名对应的地方,所在目录为./git/index/;
- 本地版本库:管理代码的,所在目录为./git/objects
以下是三个工作区的关系图
1.2对象类型
- blob:存储文件数据,通常是一个文件,内容为二进制;git show sha1 查看内容;
- tree:类似一个目录,用来管理tree和blob 表示目录树的内容、内容之间的层次目录关系;
- commit:指向一个tree,标记项目某个特定时间点状态;
- tag:用来标记某一个提交(commit)
1.3文件状态
- 未被追踪(untraked):指该文件还未纳入git的管理当中,需要用git add file_name把它纳入管理
- 被追踪(tracked):指该文件已经在git的管理中
二、git常用命令
2.1.初始化配置
#设置默认的用户名和邮箱
git config --global user.name name
git config --global user.email name
2.2.基础命令
git init #可以cd到一个目录下,初始化git项目
git add file_name #将文件加入暂存区,让git进行管理
git mv old_file_name new_file_name #修改工作目录和暂存区的文件名称
git rm file_name #删除工作目录和暂存区的文件名称
git commit -m '提交' #将暂存区的文件提交到本地版本库中
git log #查看提交记录,顺序按照最近时间排序
git tag -a -m "add v1.2" v.2 #创建tag
git status #查看状态
2.3.分支管理命令
#1.创建分支
git branch branch_name #创建分支,以当前分支上最近提交的为基础创建出新的分支
git branch branch_name branch_name_1 #以branch_name_1 最近提交的为基础创建出新的分支
#2.查看分支
git branch -a #查看本地和远程的所有分支
git checkout branch_name #检出分支
#3.删除分支
git branch -d branch_name
#4.创建并检出分支
git checkout -b branch_name
#5.合并分支
git checkout branch_1
git merge other_branch #把other_branch合并到branch_1上
#6.撤销合并
git reset --hard HEAD #用于还未提交,把工作目录和暂存区都还原到git merge命令之前,
#注意,如果工作区中有新的代码未提交会被覆盖
git reset --hard ORIG_HEAD #用于merge已经结束
2.4.比较内容的差异命令
git diff #显示工作目录与暂存区的之间的差异
git diff commit的SHA1码 # 显示工作区和给定提交间的差异
git diff --cached commit的SHA1码 #显示暂存区和给定变更的差异,默认HEAD
git diff commit的SHA1码 commit的SHA1码 #任意两个提交间的差异
2.5.更改提交命令(慎用)
git reset --soft commit的SHA1码 #将HEAD引用指向给定的提交
git reset --mixed commit的SHA1码 #将暂存区和工作目录恢复到指定的提交
git reset --hard commit的SHA1码 #将版本库的HEAD引用,暂存区和工作目录恢复到指定的提交
git cherry-pick commit的SHA1码 # 将版本库中的一个分支特定的提交引入到一个不同分支中
git commit -amend #修正最近一次提交
2.6.变基提交
git rebase 目标分支 源分支 #把源分支向前移植到目标分支
git rebase --abort #中止操作
git rebase -i 分支名~3
squash # 把多个提交合并成一个
2.7.保存当前工作进度
git stash save "save thr process"
git stash pop #将当前工作目录和暂存区还原最近一次的save操作的内容
git stash drop #应用之后,从栈中删除保存的内容
git stash apply #不删除栈中的元素
git stash list #列出栈中当前保存的内容
2.8.远程仓库
git clone #克隆网站上的版本库副本
git clone -b #克隆网站上的版本库指定分支的副本
git pull #同步远程信息
git push #提交本地数据到远程
git fetch #从远程抓取对象及相关元数据
git remote add origin repository #添加远程版本库
git remote rm #删除远程分支和本地跟踪远程跟踪分支
git branch -r -d origin/test #从本地库删除一个远程跟踪分支
git checkout --track origin_branch_name #从远程切分支
git checkout -b barnch_name --track origin_branch_name#自定义从远程切分支的名称
git push origin branch_name #远程创建新分支