本篇是根據(jù)ProGit整理的常用Git命令夺谁,注釋比較簡單邦鲫,如需詳細了解Git,請閱讀ProGit例获。
- 狀態(tài)檢查
git status (查看git狀態(tài)報告)
git status -s (以緊湊的格式輸出git狀態(tài))
git diff (查看修改后還沒暫存起來的內(nèi)容)
git diff --cached (查看已暫存的將要添加到下次提交里的內(nèi)容)
git diff branchA branchB (查看具體的不同內(nèi)容,branchB多提交哪些內(nèi)容)
git difftool (使用圖形化的界面查看文件差異)
git reflog (查看命令歷史)
git remote (查看已配置的遠程倉庫名字 -v顯示對應的URL)
git remote show <remote-name> (查看遠程倉庫的具體信息)
git branch (查看當前所有的分支)
git branch -v (查看每個分支的最后一次提交)
git branch --no-merged (查看所有未合并到當前分支的分支 --merged是已合并的分支)
- 標簽管理
git tag (以字母順序列出已有tag)
git tag -a <version> -m "message" (創(chuàng)建一個附注標簽,推薦)
git tag -a <version> -m "message" <commitId> (后期打標簽)
git tag <version> (創(chuàng)建一個輕量標簽)
git tag -d <version> (刪除標簽)
git push origin <tagName> (推送標簽到遠程倉庫,因為默認不會推送標簽到遠程倉庫印叁,需顯示推送)
git push origin --tags (將所有不在遠程倉庫的標簽全部推送上去)
- 遠端與本地的交互
//使用Git管理項目
git init (在現(xiàn)有目錄中初始化倉庫被冒,對現(xiàn)有項目進行管理)
git clone https://github.GreenBeanD/project [newName] (克隆一個Git倉庫,[]內(nèi)容為可選军掂,意為重命名倉庫的名字)
git remote add <name> <url> (添加一個新的遠程倉庫并指定引用名稱例如origin)
git fetch <remote-name> (從遠程倉庫獲取數(shù)據(jù),不會自動合并)
git pull (從遠程倉庫獲取數(shù)據(jù),自動合并到當前所在分支,這是在只有一個追蹤分支時的省略參數(shù)指令)
git pull <remote-name> <remoteBranch-name>:<localBranch-Name> (將遠程倉庫的指定分支合并到本地的指定分支,不帶冒號后的內(nèi)容意味合并到當前分支)
//添加遠程倉庫分支到本地
//git pull默認不會將遠程倉庫的所有分支同步到本地姆打,所以我們需要手動的添加一些需要的遠程倉庫的分支良姆,主要過程是:
//在本地新建一個分支并將此與遠程分支關(guān)聯(lián)
git branch -r //查看遠程分支,假設(shè)我們要添加遠程倉庫的dev分支`origin/dev`
git branch dev origin/dev //新建分支并關(guān)聯(lián),這里最好保持本地分支和遠程分支名稱一致幔戏,可以避免pull的時候需要指定本地分支的名字
git pull origin dev //將遠程分支dev數(shù)據(jù)同步到本地dev分支
// 本地分支已存在想直接關(guān)聯(lián)線上的分支
git fetch origin 分支名(然后就可以push到線上了)
git push <remote-name> <branch-name> (將本地分支推到遠程主分支)
git remote rename <oldname> <newname> (重命名遠程倉庫)
git remote rm <remote-name> (刪除遠程倉庫)
- 提交與修改
//使用Git提交
git add <file> (開始跟蹤文件或?qū)⒁迅櫸募湃霑捍鎱^(qū)玛追,添加當前全部文件: git add .)
git commit -m "提交" (提交修改)
git commit -a -m "提交" (跳過add步驟直接提交,只會自動添加跟蹤過但未暫存的文件闲延,未跟蹤的文件不會自動跟蹤)
//移除文件
git rm <file> (從工作目錄中刪除文件痊剖,文件真的就沒有了哦)
git rm -f <file> (對于之前修改過并已放入暫存區(qū)域的文件,必須強制刪除)
git rm --cached <file> (從倉庫中移除垒玲,但在工作目錄中保留陆馁,換句話說移除跟蹤,文件保留)
//文件重命名
git mv <oldName> <NewName>
//撤銷操作
git commit --amend (重新提交合愈,所以在此操作之前應該補全漏掉的操作)
git reset <file> (取消文件暫存操作)(reset操作可用于版本回退)
git reset --hard (取消某個提交之后的所有修改)
--hard 表示取消某個提交之后的所有修改并且不保留被修改的部分
--mixed 表示取消某個提交之后的所有修改但是保留被修改的部分叮贩,reset默認是mixed
git checkout -- <file> (撤銷指定文件當前的所有修改到暫存狀態(tài)或最初狀態(tài),視文件為已暫存還是未暫存決定)
//不得不說的reset和revert
//git revert 是生成一個新的提交來撤銷某次提交佛析,此次提交之前的commit都會被保留
//git reset 是回到某次提交益老,提交及之前的commit都會被保留,但是此次之后的修改都會被退回到暫存區(qū) --hard是直接放棄所有修改寸莫,不會保留
git revert commitId
- 分支模型部分
git branch <branchName> (創(chuàng)建新分支)
git checkout <branchName> (切換到指定分支)
git checkout -b <branchName> (創(chuàng)建并切換到指定分支)
git branch -d <branchName> (刪除指定分支 -D強制刪除)
git merge <branchName> (將指定分支合并到當前分支)
git rebase <branchName> (將指定分支以rebase的方式合并到當前分支捺萌,這種方式合并后的分支是一條直線,強迫癥患者的福音)
git mergetool (使用圖形化工具來解決沖突)
簡單說明下rebase:
上邊兩圖分表代表了rebase之前和之后的分支路線膘茎,可見桃纯,當前分支topic分支中的修改被依次添加到master分支新增內(nèi)容之后,這樣合并后的分支不會分叉披坏。
如果在rebase過程中發(fā)生了沖突态坦,在命令行中會提示在哪一個文件中發(fā)生了沖突,到對應文件中修改之后執(zhí)行g(shù)it add 然后繼續(xù)rebase --continue即可刮萌。
- Log部分
git log (按提交時間列出所有更新)
git log -p -2 (-p用來顯示每次提交的內(nèi)容差異 -2用來限定顯示數(shù)量驮配,數(shù)字可以任意填寫,當然數(shù)量這個參數(shù)也可不指定,Git會自動分頁)
git log --stat (查看每次提交的簡略統(tǒng)計信息,如修改數(shù)量 --shortstat 簡短的顯示)
git log --name-only (僅在提交信息后顯示已修改的文件清單)
git log --name-status (顯示新增着茸、修改、刪除的文件清單)
git log --graph (帶有分支合并歷史的展示方式)
git log --pretty=oneline (將每個提交放在一行顯示,除了online還有short琐旁、full涮阔、fuller等)
git log --pretty=format:"%h - %s" (按指定格式輸出記錄format后可以自定義任意的輸出格式)
` %H (提交對象(commit)的完整哈希字串) %h (提交對象的簡短哈希字串)
` %T (樹對象(tree)的完整哈希字串) %t (樹對象的簡短哈希字串)
` %P (父對象(parent)的完整哈希字串) %p (父對象的簡短哈希字串)
` %an (作者(author)的名字) %ae (作者的電子郵件地址)
` %ad (作者修訂日期(可以用 -date= 選項定制格式)) %ar (作者修訂日期,按多久以前的方式顯示)
` %cn (提交者(committer)的名字) %ce (提交者的電子郵件地址)
` %cd (提交日期(可以用 -date= 選項定制格式)) %cr (提交日期灰殴,按多久以前的方式顯示)
` %s (提交說明)
git log --left-right branch1...branch2 (只查看不同的提交,該指令會列出兩個分支不同的提交敬特,branchA的提交用<標識掰邢,branchB的提交用>標識)
例如:commit > 9f9b4f383c521b3598c008c1a0 (HEAD -> branchA)
commit < 3598c008c1a03598c008c1a0 (HEAD -> branchB)
git log branchA..branchB (查看branchB比branchA多的提交)
git log --oneline --decorate (查看各個分支當前所指對象 --oneline可省略,僅用來指明在一行顯示)
git log --oneline --decorate --graph --all (查看提交歷史伟阔,各個分支的指向以及項目的分支分叉情況)