Git 學習之命令詳解

莫名私下裡發表於2019-12-26

git 官網地址

Git學習之命令詳解

  • 以下是在各種情況下使用的常見Git命令:
    // 啟動工作區
    clone      將遠端版本庫克隆到新目錄
    init       建立一個空Git儲存庫,或者重新編譯現有的Git庫
    // 處理當前更改
    add        新增到暫存區 下面有詳解
    mv         移動或重新命名檔案、目錄或符號連結
    reset      重置為指定狀態
    rm         從工作樹和索引中刪除檔案
    // 檢查歷史記錄和狀態
    bisect     使用兩分法搜尋查詢引入錯誤的提交
    grep       檢索檔案中的文字內容
    log        顯示提交日誌
    show       顯示各種型別物件的相關資訊
    status     顯示工作樹狀態
    // 成長,標記和調整你的共同歷史
    branch       分支列表、建立或刪除分支
    checkout     切換 建立分支
    commit       將更改記錄提交到儲存庫
    diff         顯示工作區和臨時區之間的更改
    merge        合併將兩個或多個提交歷史合併
    rebase       衍合指定分支到當前分支
    tag          建立、列出、刪除或驗證的標記物件
    // 協作
    fetch     從遠端庫獲取程式碼
    pull      從遠端庫獲取程式碼快速合併
    push      推送到遠端庫
  • 詳解:
    git clone
    -n, 不檢出Git庫中的active branch
    -o new_origin, 使用new_origin,而不使用預設的origin,作為跟蹤分支的upstream所在庫
    -b new_branch, 設定本地的active branch,而非預設的master branch
    --single-branch, 只檢查一個branch,要麼是預設的master,要麼是-b new_branch指定的new_branch
    --recursive, 在本地初始化Git庫中的所有模組
    git clone 命令預設的只會建立master分支 // 特別提醒
    git clone -b [new_branch_name]  倉庫地址 // clone時建立新的分支替代預設origin/master
    git clone 倉庫地址  // 從遠端庫拉到本地 檔名為倉庫名 如 git@gitee.com:momingsixiali/git.git 拉到本地檔名為 git
    git clone 倉庫地址 "指定目錄" // 拉到本地檔名 為 指定的目錄 如 git clone git@gitee.com:momingsixiali/git.git zhiding 本地檔名為 zhiding

    git add

    git add -u   將檔案的修改、檔案的刪除,新增到暫存區。
    git add .    將檔案的修改,檔案的新建,新增到暫存區。
    git add -A   將檔案的修改,檔案的刪除,檔案的新建,新增到暫存區。
    // 工作中一般是用到 git add . 或者 git add -A
    git add -A    相對於git add -u命令的優點 : 可以提交所有被刪除、被替換、被修改和新增的檔案到資料暫存區,而git add -u    只能操作跟蹤過的檔案
    git add -A    等同於  git add -all

    git mv

    git mv demo demo1 // 不會破壞git歷史 等效於 如下:
    mv demo demo1 // 修改檔名
    git add demo1 // 新增到暫存區
    git rm demo // 更改demo的提交歷史到 demo1

    git reset

Git 學習之命令詳解
git commit 每一次提交都會建立一個索引 如上圖

git reset --hard // 危險命令 分支的指標都指向上一個提交  無法找回 移動 HEAD->更新索引->更新暫存區工作區
git reset --soft  //  分支的指標都指向上一個提交 本次提交還在 只是不顯示
git reset --mixed  //  分支的指標都指向上一個提交 只是回退暫存區 工作區還在 推薦使用 也是 git 預設

git rm

git rm demo // 等效於 如下:
rm -rf demo
git add demo

git bisect

git bisect start [終點] [起點]  // 使用方法 如git bisect start [1] [100] 切換到這段範圍正當中的那一次提交就是第 50次提交
git bisect good  //說明 標識本次提交(第50次)沒有問題 後自動切換到後半段的中點(第75次提交) 
git bisect bad // 說明 50 - 75 中間有問題 後自動切換到(第62次提交) 不斷重複這個過程,直到成功找到出問題的那一次提交為止 返回
// 648308 is the first bad commit
git bisect reset // 退出,回到最近一次的程式碼提交 改 BUG

git grep

git grep login // 查詢該倉庫裡所有使用'login'的地方 相當於 Linux中的 grep 返回如下
    app/Http/Controllers/Auth/LoginController.php:     * Where to redirect users after login.
    app/Http/Middleware/Authenticate.php:            return route('login');
    resources/lang/en/auth.php:    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
git grep -n login // 顯示 行號 
   app/Http/Controllers/Auth/LoginController.php:24:     * Where to redirect users after login.
   app/Http/Middleware/Authenticate.php:18:            return route('login');
   resources/lang/en/auth.php:17:    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
git grep --name-only login // 只顯示檔名
   app/Http/Controllers/Auth/LoginController.php
   app/Http/Middleware/Authenticate.php
   resources/lang/en/auth.php
git grep -c login // 檢視每個檔案裡有多少行匹配
   app/Http/Controllers/Auth/LoginController.php:1
   app/Http/Middleware/Authenticate.php:1
   resources/lang/en/auth.php:1
git grep login 5027c63 // 指定提交索引 找
git grep -e 'name' --and -e email // 同時滿足 name 和 email 
   app/Models/User.php:        'name', 'email', 'password',
   composer.lock:            "name": "egulias/email-validator",
git grep --all-match -e 'name' -e email 97bacf05d4 // 滿足name 或 email 
git grep -e 'name' --and  -e  -e MAX .
git grep -e 'password' --and ( -e name -e email ) //  同時滿足 password 和 (name 或者 email)
// 可組合使用
git grep  -n -e 'password' --and -e email 97bacf05d4

git log
ps : 一下命令引數可自由組合 有的會失效 如 --all 和 指定提交 -all 生效

git log --all // 所有分支
git log --graph // 演化歷史 包括所有分支
git log --oneline  // 簡化輸出
    729399c (HEAD -> dev) 0
    736d8f6 (origin/dev) 郵箱驗證功能
    894f6ae 註冊登入
    6483089 新增忽略檔案
git log --stat  // git log 的基礎上輸出檔案增刪改詳情 返回如下
    commit 729399ce26607297d87415ab844ca247137b94f2 (HEAD -> dev)
    Author: moming <15516319695@163.com>
    Date:   Thu Dec 26 23:34:57 2019 +0800

        0

     app/Models/UserAddress.php                                            | 10 ++++++++++
     config/session.php                                                    |  4 ++--
     database/factories/UserAddressFactory.php                             |  9 +++++++++
     database/migrations/2019_03_27_155837_create_user_addresses_table.php | 31 +++++++++++++++++++++++++++++++
     public/js/app.js                                                      | 22 +++++++++++-----------
     yarn.lock                                                             | 38 +++++++++++++++++++-------------------
     6 files changed, 82 insertions(+), 32 deletions(-)
git log -p // 顯示每個commit具體修改的內容,輸出的形式以diff的形式給出
git show // 同git log -p輸出類似,不同在於show只顯示一個commit的內容,如果不指定commit hash, 它預設輸出HEAD指向commit的內容
git shortlog // 顯示彙總資訊,以使用者進行分類 返回如下
    moming (6):
          Merge branch 'dev' of https://github.com/wujianan/shop into dev
          新增忽略檔案
          註冊登入
          郵箱驗證功能
    momingsixiali (1):
          專案初始化
  git shortlog -s // 顯示使用者 提交次數 按提交時間排序
  git shortlog -n // 顯示使用者 提交次數 進行倒序排列
git log  --author=moming // 顯示 moming 的提交, 限定輸出給定的使用者
git log -2 // 限制 顯示輸出的數量 本次輸出 2個
git log --after '12-22-2019'  //  --after和--before 限定指定日期的log
git log --decorate --oneline // 顯示對應commit所屬的branch和tag資訊

git show

git show 72939  // 顯示指定提交的相關資訊
git show 72939^{tree} //顯示指定提交的目錄結構
git show v1  // 顯示指定 tag 

git status

git status // 檢視當前工作區和暫存區檔案的狀態

git branch git checkout

git branch // 檢視本地分支
git branch -a // 檢視 本地 和遠端 所有分支
git branch new_branch // 建立新分支
git branch --delete 分支名 // 刪除 分支
git checkout 分支名  //切換分支
git checkout -b 分支名 //基於本分支建立並切新信分支
git push origin -u 分支名 // 將本地分支,推送到遠端庫

git commit

git commit -m '提交資訊'  //  新增提交資訊 
git commit -a -m '提交資訊'  //  還沒有執行add命令的修改一起提交
git commit --amend // 修改上一次的提交資訊

git diff

git diff // 顯示工作區 和暫存區的 不同
git diff --stat // 顯示簡單的 比較資訊
git diff master // 檢視當前分支 與 master 分支的 不同之處
git diff SHA1 SHA2 // 比較兩個歷史版本之間的差異

git merge 和 git rebase
rebase
Git 學習之命令詳解

git merge dev // 當前的分支合併dev 沒衝突直接合並 有衝突 會提醒 解決後 重新提交 分支中新的合併提交(merge commit)將兩個分支的歷史連在了一起 現有的分支不會被更改
git rebase dev // 當前的分支合併dev 沒衝突直接合並 有衝突 會提醒 解決後 重新提交 為原分支上每一個提交建立一個新的提交,重寫了專案歷史,並且不會帶來合併提交 *****黃金法則   絕不要在公共的分支上使用它

git fetch 和 git pull

git fetch 和 git pull  // 功能是大致相同,都是起到了更新程式碼的作用 git pull看起來更像git fetch + get merge 建議使用 git fetch + get merge   git pull 一旦程式碼有問題,很難找到出錯的地方

git push

git push <遠端主機名> <本地分支名>:<遠端分支名> // 將本地分支的更新,推送到遠端
git push origin :master // 危險 刪除遠端倉庫的分支 等效於 git push origin --delete master
git push //當前分支只有一個追蹤分支 可省略 <遠端主機名> <本地分支名>:<遠端分支名>
git push -u origin master // 將本地的master分支推送到origin遠端,同時指定origin為預設,後面就可以不加任何引數使用git push

特別感謝:
部落格平臺提供-社群
更多關於git fetch 和 git pull
git rebase 使用加圖解

相關文章