目录

    1. 基本概念

    • Workspace:工作区,工程文件
    • Index:暂存区,也叫待提交更新区,在提交进入 repo 之前,把所有的更新放在暂存区
    • Local Repository:本地仓库,存放在本地的版本库,HEAD 指向当前的开发分支
    • Remote Repository:远程仓库,远程服务器的版本库

    基本的 Git 工作流程如下:

    1. 在工作目录中修改某些文件
    2. 对修改后的文件进行快照,然后保存到暂存区,git add
    3. 提交更新,将保存在暂存区域的文件快照永久转储到本地 Git,git commit
    4. 更新到远程,将本地 Git 推送到远程,git push

    2. 初始化

    • 初始化一个新仓库
    $git init
    
    • 克隆一个仓库
    $git clone <git-base-url>
    
    • 查看仓库远程主机
    $git remote -v
    

    3. 分支

    • 列出全部分支
    $git branch
    
    * 不带参数,仅列出本地
    * `-a` 参数,列出本地和远程
    * `-r` 参数,仅列出远程
    
    • 切换分支
    git checkout <branch_name>
    
    • 拉取分支更新
    git pull
    
    *`-a`参数,拉取全部分支更新
    
    • 基于当前分支,创建本地分支
    $git branch <branch_name>
    
    • 基于远程分支,创建本地分支
    $git branch <branch_name> origin/<branch_name>
    
    • 切换分支
    $git checkout <branch_name>
    
    • 推送本地分支到远程
    $git push origin <branch_name>
    
    • 删除一个远程分支
    $git push origin --delete <branch_name>
    

    或者,推送一个空的本地分支到远程

    $git push origin :<branch_name>
    
    • 删除一个本地分支
    $git branch -D <branch_name>
    

    4. 版本

    # 查看命令历史,常用于帮助找回丢失掉的 commit
    git reflog  
    # 回退到具体某个版本              
    git reset --hard c7926e6 
    # 显示当前分支的版本历史
    git log
    # 显示commit历史,以及每次commit发生变更的文件
    git log --stat
    # 搜索提交历史,根据关键词
    git log -S [keyword]
    

    5. 提交

    • 新增代码
    git add *
    
    • 查看状态
    git status
    
    • 提交代码
    git commit -m "commit msg"
    
    • 丢弃某个文件
    $git checkout -- <file_name>
    
    • 丢弃全部文件修改
    $git checkout
    
    • 更新 master 到自己的分支分支
    $git checkout <branch_name>
    $git merge master
    
    • 从远程获取最新版 master 并 merge 到自己的分支
    $git pull origin master
    

    相当于先 fetch ,然后合并

    git fetch origin master:tmp
    git diff tmp 
    git merge tmp
    

    6. 标签

    # 查看全部标签
    git  tag
    # 切换标签
    git checkout <tag_name>
    # 新建标签
    git tag v1.0    #新建标签,默认位 HEAD
    git tag v1.0 c7926e6  #对指定的 commit id 打标签
    git tag -a v1.0 -m 'v1.0 r'   #新建带注释标签
    # 删除标签
    git tag -d <tag_name>
    # 删除远程标签
    git push origin :refs/tags/<tag_name>      
    

    7. 参考