如下爲git經常使用的命令的總結,方便你們查閱與參考:css
如下文章中,遠程倉庫表示git clone 來源的倉庫,上游倉庫是git add <remote>的倉庫;html
借用圖來講明:git
幾個概念:github
workspace:工做區,也就是咱們寫代碼的地方,它持有實際的文件;緩存
index:也能夠叫作stage,暫存區,它實際上就是一個包含文件索引的目錄樹 ,當對工做區修改(或新增)的文件執行 "git add" 命令時,暫存區的目錄樹被更新。bash
local repository:本地倉庫,咱們使用「git commit」時,實際是把代碼提交到了本地倉庫;服務器
remote repository:遠端倉庫,當咱們使用「git push」時,纔將咱們的本地代碼提交到了遠端的倉庫,好比github上。編輯器
originide
遠程庫的名字就是origin,這是Git默認的叫法,也能夠改爲別的。fetch
克隆本地倉庫:
git clone /path/to/repository複製代碼
克隆遠端服務器倉庫:
git clone username@host:/path/to/repository複製代碼
設置上游倉庫,就可對上游倉庫的代碼進行fetch等操做,多用於協同開發;
git remote add <name> <url>複製代碼
url是遠程倉庫的的地址,這麼設置後,可用name代替url;
查看全部上游倉庫分支:
git branch -r複製代碼
查看全部上游倉庫名字:
git remote複製代碼
查看全部上游倉庫名字和git地址:
git remote -v複製代碼
刪除上游倉庫:
git remote rm <remote>複製代碼
替換已有的上游分支的url:
git remote set-url <remote> <url> //這會使本來關聯的remote的url替換成新的url複製代碼
建立倉庫的時候,
是「默認的」。在其餘分支上進行開發,完成後再將它們合併到主分支上。
建立一個feature_x分支,而且切換到feature_x分支上:
git checkout -b feature_x //不加-b則是切換到某一分支上複製代碼
刪除分支:
git branch -d feature_x複製代碼
查看當前所處分支:
git branch複製代碼
查看包括上游倉庫與遠程倉庫全部分支:
git branch --all複製代碼
git fetch //拉取遠程倉庫更新到本地倉庫,默認爲git clone的那個倉庫;
git fetch <name> <branch> //拉取遠程倉庫名爲<name> 的 某一分支<branch>上的代碼,<branch>可省略;複製代碼
若是咱們有多個remote都須要更新,可使用:
git remote update
//或者
git fetch --all複製代碼
若是有衝突,則要手動合併;
在合併以前能夠選擇性執行以下操做:
git diff <name>/<target_branch>//比較本地工做區與上游倉庫特定分支的差異;
git stash //保存當前更改到緩存區
git merge <name>/<target_branch> //將上游倉庫的特定分支代碼合併到本地;
git stash pop //將緩存區代碼提出到本地,並修改衝突;複製代碼
快捷操做:
git pull //至關於git fetch和git merge的兩部操做 複製代碼
強制更新遠程倉庫的代碼到本地(慎用):
git merge --rebase 複製代碼
rebase與merge區別參考連接:hackernoon.com/git-merge-v…
緩存區存放工做區文件改動內容,當執行git stash後,全部改動被放到緩存區,而且工做區恢復到沒有改動以前。
git stash
git stash pop複製代碼
添加到暫存區(index):
git add <filename>;//添加單個文件;
git add . //git 2.0 以上添加全部改動;
git add -u //添加修改某些文件和刪除某些文件的改動,但不添加新建文件的改動;複製代碼
提交暫存區的改動到本地倉庫:
git commit -m "代碼提交信息"複製代碼
推送本地倉庫改動到遠程倉庫,好比要提交到master分支上:
git push origin master複製代碼
強制推送(慎用):
git push --force複製代碼
列出當前目錄全部尚未被git管理的文件和被git管理且被修改但還未提交(git commit)的文件:
git status複製代碼
查看全部commit記錄:
git log複製代碼
git log經常使用選項:
選項 | 說明 |
---|---|
-p | 按補丁格式顯示每一個更新之間的差別 |
–stat | 顯示每次更新的文件修改統計信息 |
–shortstat | 只顯示 –stat 中最後的行數修改添加移除統計 |
–name-only | 僅在提交信息後顯示已修改的文件清單 |
–name-status | 顯示新增、修改、刪除的文件清單 |
–abbrev-commit | 僅顯示 SHA-1 的前幾個字符,而非全部的 40 個字符 |
–relative-date | 使用較短的相對時間顯示(好比,「2 weeks ago」) |
–graph | 顯示 ASCII 圖形表示的分支合併歷史 |
–pretty | 使用其餘格式顯示歷史提交信息。可用的選項包括 oneline,short,full,fuller 和 format(後跟指定格式) |
限制輸出長度
除了用 -n
來限制輸出 log 的條數,還能夠用 --since
和 --until
按照時間做限制。
用 --author
選項顯示指定做者的提交,用 --grep
選項搜索提交說明中的關鍵字。
執行git reset --hard commit_id
:
例如咱們須要回退到新增MVC模式
的上一個版本,則執行:
git reset a5f2a27f02d32b666e01c24ed2218598db57a183 //此爲默認方式,不帶任何參數的git reset它回退到某個版本,只保留源碼,回退commit和index信息複製代碼
若是是--hard參數,則完全回退到某個版本,本地工做區也會變爲上一個版本的內容:
git reset --hard a5f2a27f02d32b666e01c24ed2218598db57a183複製代碼
若是是--soft參數,會保留工做區和暫存區的記錄,在下次能夠直接commit:
git reset --soft a5f2a27f02d32b666e01c24ed2218598db57a183複製代碼
這種狀況下在push時,要執行:
git push --force 複製代碼
比較當前工做區與暫存區之間的差別:
git diff複製代碼
比較暫存區與本地倉庫之間的差別:
git diff --cached複製代碼
比較當前工做區與本地倉庫之間的差別:
git diff Head複製代碼
比較當前工做區與另一個分支的差異,好比分支爲test:
git diff test複製代碼
比較當前工做區與暫存區有哪些文件被改動,改動了多少行:
git diff --stat複製代碼
比較兩個分支的操做:
git diff <source_branch> <target_branch>複製代碼
列出即將push的全部git commit ,編輯這些commit,能夠對這些commit進行合併,修改,丟棄,編輯,拆分操做:
git rebase -i //會打開編輯器,可修改commit記錄
git rebase -i <after-this-commit> //當前分支中的全部提交複製代碼
rebase 參考連接git-scm.com/docs/git-re…;
rebase 拆分commit參考連接:www.codebelief.com/article/201…/
git簡易指南:www.bootcss.com/p/git-guide/
git協同開發:www.cnblogs.com/arkenstone/…
github文章借鑑:github.com/WarpPrism/B…
gitbook:gitbook.liuhui998.com/index.html