Git 基礎操做梳理

前言

關於代碼倉庫,在幾年前,可能你們使用的仍是 SVN 比較多,可是最近幾年,GIt 開始更加流行起來,與 SVN 相比,Git 是一個分佈式版本控制系統,它在本地也有一個倉庫,在不須要聯網的狀況下也能夠進行代碼提交的工做,只是不能 push 到遠程,他的主要特色以下:git

  • 更快的速度
  • 對非線性開發模式的強力支持(容許上千個並行開發的分支)
  • 有能力高效管理相似 Linux 內核同樣的超大規模項目(速度和數據量)
  • 使用簡單而且方便(最重要!)

雖然不少 IDE 已經集成了圖形化的操做界面,例如 Android Studio 和 IDEA 等,還有專門的 Git 圖形化工具 SourceTree,可是對於想更深刻使用 Git 的咱們來講,很是有必要掌握一些經常使用底層的 Git 命令,使用這些命令,和圖形 IDE 一塊兒使用,很是的高效。github

詳細命令

Git 的操做命令衆多,這裏記錄了平常開發中 95% 常用的命令。緩存

  1. $ git --config安全

    這個是對 Git 進行配置的命令,專門用來配置和讀取相應的工做環境變量,正式由於這些變量,決定了 Git 在工做時候的工做方式和行爲,分爲系統級配置、用戶級配置、項目級配置,根據配置的等級,這些變量存放在三個不一樣位置位置:bash

    • /etc/gitconfig :使用 --system 選項,由於是在系統級別目錄下的,存儲的配置信息對全部用戶都有效。
    • ~/.gitconfig : 使用 --global 選項,在用戶目錄下,只對當前用戶有效
    • .git/gitconfig :使用 --local 選項,只對當前項目有效,

    這三個的優先級是依次增高的,對於相同的配置信息,後者的配置會覆蓋前者。服務器

    常見的配置信息有, 用來配置 git 提交時候的用戶名和郵箱app

    // 配置用戶名
    $ git config --global user.name "zhulei" 
    // 配置郵箱
    $ git config --global user.email zhuleineuq@gmail.com
    // 修改這個項目的git信息,很經常使用
    $ git config --local user.name "zhulei"
    $ git config --local user.email zhuleineuq@gmail.com
    複製代碼

    有時候咱們要檢查已有項目的配置信息,可使用以下命令:分佈式

    $ git config --list 
    // 顯示這個項目的 git 信息
    $ git config --local --list  
    // 顯示用戶的 git 信息
    $ git config --global --list  
    複製代碼

    若是出現每次 git pull 或者 git push 都要輸入帳號和密碼,能夠用下面命令在本地保存密碼:ide

    $ git config credential.helper store
    複製代碼
  2. $ git --init工具

    若是一個項目不是 Git 工程,可使用這個命令把這個項目初始化,變成 GIt 工程

    $ git init  // 初始化倉庫
    $ git add *.c // 向git中添加文件
    複製代碼
  3. $ git clone

    例如在遠程已經有一個 git項目,咱們想把它拷貝到本地,可使用這個命令, 例如 github 上面,一個項目的地址是 https://github.com/tangyxgit/FFmpegVideo.git

    // 代碼拷貝到本地
    $ git clone https://github.com/tangyxgit/FFmpegVideo.git
    // 拷貝的同時改一個名字
    $ git clone https://github.com/tangyxgit/FFmpegVideo.git MyFFmpegVideo
    複製代碼
  4. $ git status

    檢查文件的狀態

  5. $ git commit

    提交代碼,後面 -m 指此次提交包含的信息

    $ git commit -m 'message'
    複製代碼
  6. $ git log

    查看提交記錄

  7. $ git remote

    操做遠程倉庫

    // 只能夠看到倉庫的名字
    $ git remote 
    // 能夠查看到倉庫的名字和對應的地址
    $ git remote -v  
    
    // 遠程倉庫的重命名
    $ git remote rename pb paul 
    // 遠程倉庫的刪除
    $ git remote rm paul  
    // 添加遠程倉庫
    $ git remote add origin git://github.com/paulboone/ticgit.git
    複製代碼
  8. $ git fetch [remote-name]

    從遠程倉庫中拉取數據,若是本地沒有該分支,則直接拉下來,若是是本地已經存在的分支,例如origin,則是把最新的代碼拉下來,可是這個時候並不合併處理

  9. $ git pull

    git pull 命令自動抓取數據下來,而後將遠端分支自動合併到本地倉庫中當前分支

  10. $ git push

    推送數據到遠程倉庫

    遠程分支:咱們用 (遠程倉庫名)/(分支名) 這樣的形式表示遠程分支。好比咱們想看看上次同 origin 倉庫通信時 master 分支的樣子,就應該查看 origin/master 分支

    在推送前,可使用 $ git remote -v 能夠查看到倉庫的名字和對應的地址

    // 推送到 地址是 origin 的 master 分支
    $ git push origin master
    // 將本地代碼強制推到遠程,也就是用本地代碼覆蓋遠程, 本地回退,而後也想服務端同步本地回退,能夠用這個
    $ git push -f  origin master
    複製代碼
  11. $ git branch

    操做分支

    // 建立新的分支
    $ git branch testing 
    
    // 刪除分支
    $ git branch -d hotfix 
    
    // 查看本地分支,注意看分支前面有 * 字符的,表示當前所在的分支
    $ git branch
    // 查看全部遠程分支名字
    $ git branch -r  
    // 查看全部分支名字,包括本地分支
    $ git branch -a 
    複製代碼
  12. $ git checkout

    切換分支

    // 切換分支
    $ git checkout testing
    // 建立分支並切換
    $ git checkout -b iss53 
    // 跟蹤遠程分支:在經過跟蹤遠程分支建立的本地分支裏,能夠直接使用 git pull 和 git push來進行拉和推的操做
    $ git checkout --track
    複製代碼
  13. $ git merge

    合併分支

    $ git merge hotfix
    // 中斷 merge
    $ git merge --abort
    複製代碼
  14. $ git rebase

    分支的衍合

    把一個分支中的修改整合到另外一個分支的辦法有兩種:merge 和 rebase.有了 rebase 命令,就能夠把在一個分支裏提交的改變移到另外一個分支裏重放一遍。

    // 找到兩個分支的共同點,把當前分支在共同點以後的變化,在master當前所在位置從新執行一遍
    $ git rebase master 
    // 這個命令比較複雜,由於當前是在 client 內,因此是取出 client 分支,找出 client 分支和 server 分支的共同祖先以後的變化,而後把它們在 master 上重演一遍
    $ git rebase --onto master server client 
    複製代碼
  15. $ git reset

    先使用 git log 查看序號

    // 直接回滾到這個節點,不保留更改
    $ git reset --hard f13210f0cdcc1fd27009d953edc0a23f65e6f2a9  
    // 回滾到這個節點,保留修改,通常是從新提交代碼使用
    $ git reset --soft f13210f0cdcc1fd27009d953edc0a23f65e6f2a9 
    複製代碼
  16. $ git tag

    $ git tag  // 顯示當前分支全部的 tag
    $ git tag -l '2.0.*'  // 對結果進行模糊匹配過濾
    $ git tag 2.0.8  // 打一個簡單tag
    $ git tag -a 2.0.8 -m 'tag message'  // 帶 Message 的tag
    $ git show 2.0.7  // 顯示這個 tag 的詳細信息
      graypn@Graypn:~/Code/Project_LongGe/apollo$ git show 2.0.7
      tag 2.0.7
      Tagger: zhulei <zhuleineuq@gmail.com>
      Date:   Thu Aug 31 11:54:38 2017 +0800
    
      2.0.7正式版本
    
      commit a1ca647e43dff98d8879563b8492c75bf6ae3fd6
      Author: zhulei <zhuleineuq@gmail.com>
      Date:   Thu Aug 31 09:42:31 2017 +0800
    
    $ git tag -a v1.2 9fceb02  // 後期根據某個提交補上tag
    	1.首先用 $ git log --pretty=oneline 顯示簡要的git提交信息,以下:
    	aa4d54677ee33ff72b9a3e81663a2c59657f2a0b feat:提高版本號
    	670c59f5e1f7cbd0e40310e6201b6a92284f5b3d fix:修復一個產品id傳遞的問題
    	a1ca647e43dff98d8879563b8492c75bf6ae3fd6 feat:提高版本號
    	2.而後用 git tag -a [tag] [完整提交號或者前幾位] 補上 tag
    
    $ git push origin 2.0.8  // 默認狀況下,git push 並不會把標籤傳送到遠端服務器上,只有經過顯式命令才能分享標籤到遠端倉庫。其命令格式如同推送分支,運行 git push origin [tagname]
    	也能夠用 $ git push origin --tags 推上去全部的 tag
    	
    
    $ git tag // 查看本地全部tag
    $ git tag v1 // 打tag
    $ git tag -a v1 -m '描述'
    $ git push --tags 或者 $ git push origin --tags// 推送tag到服務端
    $ git show v1 // 查看某一個具體 tag 的詳情
    
    $ git reset --hard d5a65e  回退到某一次提交
    $ git  reset  --hard HEAD 回退到上次提交
    複製代碼
  17. $ git stash

    把當前未提交的代碼壓入一個緩存棧內

    使用場景:當前正在一個分支上進行開發時候,須要切換到另外一個分支作一些操做,這個時候能夠先用 git stash把當前操做緩存起來,再切換到另外一個分支進行操做,操做完成後再切換回來,而後用 $ gtit stash apply 把上次緩存的代碼取出來。

    $ git stash list

    看到全部緩存棧內的緩存記錄。

    使用場景:在多個分支使用 $git stash 後,使用 $git stash apply 獲取上次緩存的操做已經不適用了,這個時候須要用 $git stash list 看全部緩存的記錄:

    stash@{0}: WIP on btzz_1.3.1: a8a0560 feature-白條1.3.2
    stash@{1}: WIP on feature-kexin: d755dc5 feature-氪信原生埋點
    stash@{2}: WIP on btzz_1.3.1: 71450ab feature-白條原生首頁和超市UI改版
    stash@{3}: WIP on feature-kexin: 7cc1a73 2.3.2
    stash@{4}: WIP on feature_user_center: c56bdeb feature-關於咱們原生頁面
    stash@{5}: WIP on feature_user_center: 1e21336 feature-我的中心原生UI
    stash@{6}: WIP on release-btzz-1.3.0: 8814922 Merge remote-tracking branch 'origin/master' into release-btzz-1.3.0
    stash@{7}: On master: Uncommitted changes before Update at 2017/11/3 下午2:25
    stash@{8}: WIP on master: f45170d fix-修復線上幾個bug
    複製代碼
    $ gtit stash
    $ gtit stash apply
    $ git stash list
    複製代碼

經常使用命令

  1. 拉取分支

    $ git clone git://github.com/schacon/grit.git mygrit
    複製代碼
  2. 修改在項目中的用戶名和郵箱地址

    $ git config --local --list  //顯示這個項目的git信息
    $ git config --local user.name "John Doe"
    $ git config --local user.email johndoe@example.com
    複製代碼
  3. 查看分支的狀態

    $ git status
    複製代碼
  4. 提交代碼

    $ git commit -m 'message'
    複製代碼
  5. 查看遠程的分支詳細狀況,包括本地分支 push 和 pull 操做對應的目標分支

    $ git remote show origin
    複製代碼
  6. 修改倉庫地址

    方式一:直接修改
    $ git remote set-url origin http://xxxx.git
    
    方式二:先刪除後添加
    $ git remote remove xxx
    $ git remote add xxx
    複製代碼

公司中拉取新分支進行開發步驟

  1. 切換到 develop 分支並更新到最新

    $ git checkout develop
    $ git pull
    複製代碼
  2. 建立本地分支

    $ git checkout -b develop_xxx
    複製代碼
  3. 推送到遠程主機,在遠程主機建立新分支, 並跟蹤

    git branch --set-upstream-to origin/feature-talkback
    複製代碼

如何撤銷一個合併

你應該始終牢記,你能夠在任什麼時候間執行撤銷操做,並返回到你開始合併以前的狀態。要對本身有信心,你不會破壞項目中的任何東西。只要在命令行界面中鍵入 git merge --abort 命令,你的合併操做就會被安全的撤銷。

當你解決完衝突,而且在合併完成後發現一個錯誤,你仍然仍是有機會來簡單地撤銷它。你只需要鍵入 git reset --hard 命令,系統就會回滾到那個合併開始前的狀態,而後從新開始吧!

git merge --abort
複製代碼
相關文章
相關標籤/搜索