git常用命令:
进入新项目文件夹后:
git init 初始化,建立本地git版本库
git add . 将当前目录文件添加到暂存区
git status 查看git当前状态
git commit -m "" 将暂存区文件提交到git版本库,并添加版本信息
git log 查看当前版本之前的历史版本
git log --pretty=oneline 单行显示历史版本的版本号和版本信息(--pretty=oneline)
git log --pretty=oneline --abbrev-commit 单行查看提交历史,且简写版本号(--abbrev-commit)
git log --graph --pretty=oneline --abbrev-commit 查看分支合并历史(--graph)
git reflog 查看所有历史版本
git reset --hard <commit> 回滚到对应版本,版本号也可写:HEAD:当前版本,HEAD^:上一版本,HEAD^^:上上版本
get reset HEAD <filename> 撤销暂存区修改
git diff <filename> 对比工作区和最新版文件的不同
git diff <commit> -- <filename> 对比工作区和指定版本文件的不同
git checkout -- <filename> 直接丢弃工作区的修改,回到暂存区(优先)或者版本库的状态
git rm <filename> 在执行 rm 文件名 之后再执行此条语句,从版本库中删除文件,之后要还要进行git commit操作才能生效
git revert <commit> 撤销commit,reset --hard只对当前分支有效,且再次merge其他分支时仍然会带入reset之后的内容。当commit是merge类型时要格外注意,再次merge之前的分支前要先revert之前的revert,详见http://blog.psjay.com/posts/git-revert-merge-commit/
stash相关常用命令:
git stash 将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
git stash list 查看“某个地方”存储的所有记录
git stash clear 清空“某个地方”
git stash pop 将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
git stash apply {序号} 或者 编号 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)
git stash drop 编号,删除指定编号的记录
branch相关常用命令:
git branch <branch> 创建分支
git checkout <branch> 切换分支
git checkout -b <branch> 创建并切换到新分支
git checkout - 切换到上一个分支
git branch -m <branch> 重命名分支
git branch 查看所有分支
git branch -d <branch> 删除分支
git merge <branch> 将指定分支合并到当前分支
标签(eg:v1.0)相关常用命令:(标签不是按时间顺序列出,而是按字母排序的;创建的标签都只存储在本地,不会自动推送到远程)
git tag <tagname> 默认标签是打在最新提交的commit上
git tag 查看所有标签
git tag <tagname> <commit> 为指定版本打标签
git show <tagname> 查看标签信息
git tag -a <tagname> -m "" <commit> 创建有说明文字的标签,-a指定标签名,-m指定说明文字
git tag -d <tagname> 删除本地标签
git push origin <tagname> 推送某个标签到远程
git push origin --tags 一次性推送全部尚未推送到远程的本地标签
git push origin :refs/tags/<tagname> 在删除本地标签之后执行此命令,删除远程标签
远程相关常用命令:
Git支持多种协议,默认的git://使用ssh(配置公钥),但也可以使用https(配置用户名密码)等其他协议。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。通过ssh支持的原生git协议速度最快。
git remote add origin https://github.com/WuPeiqi/pondo.git 为地址起一个别名origin
git remote add origin git@github.com:michaelliao/learngit.git # ssh格式
git clone git@github.com:michaelliao/gitskills.git 克隆一个远程库到本地
git push -u origin master 第一次将本地master分支内容以及版本信息推送到远程仓库,并把本地的master分支和远程的分支(别名为origin)关联起来
git push origin master 将本地master分支内容以及版本信息推送到远程分支
git branch dev origin/dev 创建dev分支且和远程dev分支同步
git checkout -b branch-name origin/branch-name 在本地创建和远程分支对应的分支
git branch --set-upstream branch-name origin/branch-name 建立本地分支和远程分支的关联
git pull origin dev 从远程仓库获取dev分支最新内容,并合并到本地,等同于fetch+merge
git fetch origin dev 从远程仓库获取dev分支最新内容到版本库
git merge origin/dev 将版本库的分支内容合并到工作区(注意:fetch远程分支后,在本地merge的分支名为origin/dev)
git merge --no-ff -m "merge with no-ff" dev 禁用Fast forward,保留分支合并信息(--no-ff)
git remote 查看远程库信息
git remote -v 查看远程库详细信息
git remote rm origin 删除已有的远程库别名
一个本地库同时关联两个远程库:(别名冲突时先删除再重新定义)
先关联GitHub的远程库:
git remote add github git@github.com:michaelliao/learngit.git
再关联码云的远程库:
git remote add gitee git@gitee.com:liaoxuefeng/learngit.git
如果要推送到GitHub,使用命令:
git push github master
如果要推送到码云,使用命令:
git push gitee master
其他常用命令:
git version 查看git版本
ssh-keygen -t rsa -C "youremail@xxx.com" 创建密钥(用户主目录/.ssh/id_rsa.pub)
git config --global color.ui true 显示颜色
创建.gitignore并写入要忽略的文件:*.idea/* *.pyc(通常在github有提供已写好的.gitignore)
git add -f App.class 强制添加文件(属于被忽略类型)
git check-ignore -v App.class 检查忽略文件的相应规则
配置别名:
eg: git config --global alias.st status 相当于st等于status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD' 执行git unstage xxx等于git reset HEAD xxx
git config --global alias.last 'log -1' 配置一个git last,让其显示最后一次提交信息
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 显示合并树,版本号(简写),版本信息,提交时间,提交人
Git的配置文件有三个:
系统配置: /private/etc/gitconfig
用户配置: ~/.gitconfig (用户主目录下.gitconfig)
项目配置:.git/config