workspace: 本地的工作目录。
index/stage:暂存区域,临时保存本地改动。
local repository: 本地仓库,只想最后一次提交HEAD。
remote repository:远程仓库。
对于Git,首先应该明白第一git是一种分布式版本控制系统,最先进的,所以,并不要一上来就想与远程仓库github关联,这样会对理解造成偏差。
初始化
GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
makdir 文件名//创建一个文件
git init //创建git管理 ls-a
git clone /path/to/repository //克隆到本地仓库git config --global user.email "you@example.com" //配置email
git config --global user.name "Name" //配置用户名
配置 git config --global user.email 和 git config --global user.name 是为了在你提交代码时标识你的身份。每次你提交代码到 Git 仓库时,Git 都会记录提交者的用户名和邮箱地址。
基本操作
git add <file> //文件添加 提交到暂存区
git add . // 所有文件添加
git commit -m "代码提交信息" //暂存区的文件提交
git commit --amend //与上次commit合并git push origin master //推送至master分支
git pull //更新本地仓库至最新改动
git fetch //抓取远程仓库更新git log //查看提交记录
git status //查看修改状态git diff//查看详细修改内容
git show//显示某次提交的内容
回退版本
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD指向改变。
git reset --hard HEAD^ //回退到上一个版本
git log //查看提交记录
git reset --hard 1094a//回退到指定的由git log 查看到1094a的版本
git reflog //查看命令历史,回到未来
HEAD指向的版本就是当前版本,
因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
撤销修改
git checkout -- readme.txt //丢弃工作区的修改
git reset HEAD <file> //把暂存区的修改撤销掉,重新放回工作区
删除文件
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
rm test.txt
git rm test.txt//从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
git commit
添加远程仓库
git remote add origin git@github.com:yourname/learngit.git//添加后,远程库的名字就是origin
git remote -v //查看当前关联的远程库
git remote rm origin//解除本地与远程库绑定
git push -u origin master //把本地库的所有内容推送到远程库上
git push origin master //把本地master分支的最新修改推送至GitHub
创建分支与合并
切换分支这个动作,用switch更科学。因此,最新版本的Git提供了新的git switch命令来切换分支
git branch dev //创建
git checkout dev //切换
git checkout -b dev //创建dev分支,然后切换到dev分支
git branch //查看当前分支 git branch命令会列出所有分支,当前分支前面会标一个*号。
//切换到当前分支之后,就可以在当前分支上添加,提交
git merge dev//切换到master,使用该命令 dev分支的工作成果合并到master分支上
git branch -d dev//删除dev分支
解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph命令可以看到分支合并图。
分支管理策略
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。下面我们实战一下--no-ff
方式的git merge
:
git merge --no-ff -m "merge with no-ff" dev //准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward
bug分支
https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136
标签管理
git tag v1.0//创建标签
git tag//查看所有标签
git tag v0.9 f52c633 //找到对应的commit id git tag -d v0.1//删除标签
git push origin <tagname> //推送某个标签到远程