天天看點

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)