天天看点

Git常用指令前述版本管理分支管理标签管理命令简写

前述

  • 个人博客来源: Git常用指令
  • Keylala在线工具
  • 程序员导航

版本管理

  • 查看文件变化

    git diff README.md

  • 提交日志

    git log

    git log
    commit 9fdc041e35d50cb4d2d0776cdbbb26e7e27d8c28
    Author: alex <[email protected]>
    Date:   Fri Oct 26 17:55:07 2018 +0800
    
        修改菜单前缀和前缀值
    
    commit 4fe2f7ec6c6c5d37b740c71c23170ddd7c462c4b
    Author: alex <[email protected]>
    Date:   Fri Oct 26 17:22:15 2018 +0800
    
        菜单前缀和前缀值
    
    commit 8f9791beb1e5d44f02eaa79030b737e332e713a0
    Author: alex <[email protected]>
    Date:   Fri Oct 26 17:02:04 2018 +0800
    
        dev
               
  • 如果日志信息太多麻烦可以用

    git log --pretty=oneline

    9fdc041e35d50cb4d2d0776cdbbb26e7e27d8c28 修改菜单前缀和前缀值
    4fe2f7ec6c6c5d37b740c71c23170ddd7c462c4b 菜单前缀和前缀值
    8f9791beb1e5d44f02eaa79030b737e332e713a0 dev
    0d2b0f1d35d7a48affe813568ee17e0b6454292e 制定计划
               
  • 操作记录

    git reflog

    ae32f2a (HEAD -> dev, origin/dev) [email protected]{0}: reset: moving to HEAD^
    449fe7d [email protected]{1}: commit: dev
    ae32f2a (HEAD -> dev, origin/dev) [email protected]{2}: commit: dev
               
  • 版本回退

    git reset

    • 当前版本是

      HEAD

      ,上一个版本是

      HEAD^

      ,上上版本是

      HEAD^^

      ,数量多的时候,比如第一百个版本也可以写为

      HEAD~100

    • 通过

      git reflog | log

      可以知道

      commit id

      ,执行

      git reset {commit id}

      回退到指定版本
  • 文件撤销

    git checkout --file

    • 让指定文件回到最近一次

      git commit

      git add

      时的状态

分支管理

  • 创建分支

    git branch

    • 比如新建用于开发的分支,而

      master

      做为稳定分支,

      git branch dev

  • 切换分支

    git checkout

    • 切换为

      dev

      分支

      git branch dev

    • 切换为

      master

      分支

      git branch master

  • 合并分支

    git merge

    • 该命令为合并指定分支到当前分支
    • 先切换到

      master

      分支,

      git checkout master

    • 合并

      dev

      到当前分支,

      git merge dev

    • 本次合并,会有一个提示

      Fast-forward

      ,即把

      master

      的指针指向了

      dev

      ,但并不是每次合并都能

      Fast-forward

      ,特别是多人开发有很多分支的时候,后文会讲到
    • Fast-forward

      合并方式看不出曾经做过合并,因此要带参数

      --no-ff

      ,这样普通模式的合并可以使用

      git log

      查看到合并记录
  • 删除分支

    git branch -d

    • 加入某一分支是为了解决某一问题而创建的,那么修复之后就可以删除该分支了
    • 删除

      dev

      分支,

      git branch -d dev

    • 如果

      dev

      分支没有合并,会删除失败,并被通知该分支还没有全部合并,不可以删除
    • 可以使用

      git branch -D dev

      来强制删除该分支
  • 解决冲突
    • 如果两个分支同时修改了一个文件的同一个地方,那么,合并分支的就是就会产生冲突,需要修复冲突之后再提交
    • 可以使用

      git status

      查看冲突的文件
    • 打开文件有类似以下的内容
      <<<<<<< HEAD
      {master 分支修改的内容}
      =======
      {dev 分支修改的内容}
      >>>>>>> dev
                 
    • 和同事确认之后,修改为以下内容,并提交
      {dev 分支修改的内容}
                 
    • 强势删除他人提交的内容会让你成为不受欢迎的人
    • git log

      命令也可以看到分支的合并情况
  • BUG分支
    • 当我们正在

      dev

      上做开发,但这个时候有一个紧急修复的

      bug

      ,而这个时候

      dev

      工作还未完成,我们需要从一个

      clean

      的分支上创建新的分支,一种方式是从稳定的

      master

      分支上创建新分支,另一种就是用

      git stash

      命令将

      dev

      尚未提交的内容存储到别的地方,造成一个工作区域

      clean

      的假象
    • 如果是从

      master

      分支创建出来的,那么只要合并回去就好,但这个时候

      master

      dev

      分支就有点麻烦了,可能会造成合并冲突
    • 如果是从

      dev

      分支创建出来的,我们需要把之前存储到别的地方的内容还原回来
    • 首先可以使用

      git stash list

      查看存储的内容
      [email protected]{0}: WIP on dev: f52c633 add merge
                 
    • 然后有两种方法恢复内容,一个是先用

      git stash apply

      恢复工作区域,但还要用

      git stash drop

      来删除

      stash

      存储的内容。另一种方式就是用

      git stash pop

      ,恢复的同时也把存储的内容删除了
    • 如果有多次的

      stash

      ,用

      git stash lis

      查看之后,也可以恢复指定的

      stash

      git stash apply [email protected]{0}
                 
  • 分支策略
    • master

      做为稳定版本,一般不直接用于开发,习惯上新建

      dev

      分支,大家从

      dev

      分支上拉取版本,开发完成后推送给

      dev

    • 当发现问题的时候,比如提了一个

      issue

      id

      54

      ,那么我们可以创建一个分支

      issue-54

      用于修复该问题,合并分之后删除分支

      issue-54

    • 当有新特性要开发的时候,可以新建特性分支,比如

      feature-md

      分支,加入对

      Markdown

      的支持,完成之后再删除该分支

标签管理

  • 我们可以在某个正式版本发布的时候打一个标签,比如

    v1.0

    v1.2

    ,这样以后有需要的之后可以直接取出该版本,如果是直接从

    master

    分支取出,则需要知道

    commit id

    ,这是一个

    hash

    值,一长串字母和数字,没有版本号那么只管方便
  • 创建标签
    • 一般我们选择在稳定的

      master

      打新标签
    • 使用

      git tag v1.0

      创建了名为

      v1.0

      的标签
    • 如果我们想对历史上的某个

      commit id

      分支打标签,可以先执行

      git log --pretty=oneline --abbrev-commit

      找到

      commit id

      ,然后执行

      git tag v0.9 {commit id}

      打新标签
  • 查看标签

    git tag

    • 标签是不是按照打标签的先后顺序列出的,而是按照字母顺序排列的
  • 查看详情

    git show

    • git show v1.0

  • 取出标签版本

    git checkout

    • 取出

      v1.0

      版本:

      git checkout v1.0

  • 推送标签
    • 标签只存储在本地,不会自动推送到远程
    • 推送某个标签:

      git push origin v1.0

    • 推送所有尚未推送到远程的标签:

      git push origin --tags

  • 删除标签
    • 删除只存在本地的标签:

      git tag -d v1.0

    • 删除在远程存在的标签: 先删除本地标签,再删除远程标签

      git push origin :refs/tags/v1.0

命令简写

  • 可以自行编写简写命令
    git config --global alias.co checkout
    git config --global alias.ci commit
    git config --global alias.br branch
    git config --global alias.st status
    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"
               
    • 加上

      --global

      对当前用户有效,否则只对当前仓库有效
  • https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)