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