最近看了git教程,这里整理一下git的相关命令。
//基本操作方面
git init //将所在文件夹初始化为仓库
//仓库中的文件需要经过add和commit才能提交到仓库
git add <filename>
git commit -m "some information" //-m是注释信息,提交成功的话,会输出some information
git status //显示仓库当前的状态
//日志方面
git log //像是从最近到最远的提交日志
git log --pretty=oneline //简略显示提交日志
git log --graph //查看具体的分支提交信息
git log --graph --pretty=oneline --abbrev-commit //简略显示分支的提交日志
//回到指定版本
git reset --hard HEAD^ //回到前一个版本
git reset --hard HEAD^^ //回到前2个版本
git reset --hard HEAD~n //回到前n个版本
git reset --hard id //回到指定id的版本。首先这里的id所对应的记录必须存在,其次
//这里的id可以是真实存在的id的前一部分(不必写全,只要能区分出来就行)
git reflog //显示出每一次执行的命令
//撤销和删除
git checkout -- <filename> //把<filename>文件在工作区的修改全部撤销,这里有两种情况
//1. 文件自修改后还没有放到暂存区,现在撤销修改就回到和版本库一模一样的状态。
//2. 文件已经添加到暂存区,又做了修改,现在撤销就回到添加到暂存区后的状态。
git reset HEAD <filename> //把add到暂存区中的文件撤销掉
rm <filename> //删除某个文件
//如果误删,想要恢复
git checkout -- <filename>
//确认删除 这时候也可以不用rm 直接git rm
git rm <filename>
git commit -m "some info"
//远程仓库 这里还需要做一个无密登录,就是将自己设备的公钥放到远程仓库的指定地方
//将本地仓库关联到远程仓库。其次,origin是远程仓库名(可以自己取一个),后面是自己的账号。
add origin git@github.com:michaelliao/learngit.git
//第一次将本地仓库内容提交到远程仓库中
git push -u origin maseter
//由于远程仓库是空的,第一次推送master分支时,加上了-u参数,git不但会把本地的master分支内容推送到远程新的master分支。
//还会把本地分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push origin master //将本地的master分支上的内容推送到远程仓库中
//clone仓库 也支持https
git clone git@github.com:michaelliao/gitskills.git
git clone https://github.com/ToBeAGoodProgrammer/gitforclone
git remote //查看远程仓库信息 添加-v可以看到详细信息
git checkout -b branch-name origin/branch-name //在本地创建与远程分支对应的分支
git pull //下载当前分支最新的提交。如果推送失败,可以下载最新分支,进行编辑然后再次推送
//如果上面的命令显示no tracking information,则说明本地分支和远程分支的联接关系没有创建,需要使用以下命令
git branch --set-upstream-to=origin/dev dev //将本地仓库的dev与本地的dev联接
//分支
git checkout -b dev //创建分支并切换到这个分支
//下面两个命令相当于上面的命令
git branch dev //创建分支
git checkout dev //切换到这个分支
git branch //列出所有分支,有*表示当前分支
git merge dev //合并指定分支(dev)到当前分支
git branch -d dev //删除分支(-d) -D 是强力删除
git log --graph //查看分支合并图
//Fast-forward 快进模式,也就是直接把master指向dev的当前提交。
//git merge dev就是快进模式,在这种模式下,删除分支后会丢失分支信息。
//如果强制禁用fast forward模式,git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
git merge --no-ff -m "merge with no-ff" dev //-m是因为生成了一个新的commit
//这时候,git log --graph 可以看到分支的信息
git stash //将当前的工作现场存储起来,等以后恢复现场后继续工作,现在git status查看工作区就是干净的
//恢复工作现场有2种方式
git stash apply //这种方式stash内容并不删除,需要通过git stash drop来删除
git stash pop //恢复的同时把stash内容也删除了
git rebase //把分叉的提交历史整理成一条直线,看上去更直观,缺点就是本地的分叉提交已经被修改过了
//标签管理
//切换到需要打标签的分支上
git tag v1.0 //为该分支打上一个v1.0的标签
git tag //显示当前已有标签
//如果想要为过去某个commit操作打上标签,可以先找到该操作的id
git log --pretty=oneline --abbrev-commit
//然后
git tag v0.9 <id>
git show v0.9 //查看标签v0.9的信息
git tag -a v0.1 -m "version 0.1 released" 1094adb //创建带有说明的标签,用-a指定标签名,-m指定说明文字。
//标签总是和某个commit挂钩,如果这个commit既出现在master分支,又出现在dev分支
//那么在这两个分支上都可以看到这个标签
git tag -d v0.1 //删除标签,这个标签还没有传输到远程仓库
git push origin v1.0 //推送指定标签到远程仓库
git push origin --tags //一次性推送全部尚未推送到远程的本地标签
//删除远程仓库的标签
git tag -d v0.9
git push origin :refs/tags/v0.9
//配置别名
git config --global alias.st status //这时候git status==> git st
//配置文件
//配置git的时候,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用
//每个仓库的git配置都放在.git/config文件中
//当前用户的git配置文件放在用户目录下的一个隐藏文件.gitconfig中