- 以下是在各種情況下使用的常見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 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 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