這篇文章主要站在用戶(hù)的角度,在實(shí)際使用過(guò)程中常見(jiàn)git的命令
git remote - 管理遠(yuǎn)程倉(cāng)庫(kù)
#只顯示遠(yuǎn)程倉(cāng)庫(kù)名
git remote
#使用-v 選項(xiàng),可以看到遠(yuǎn)程倉(cāng)庫(kù)的網(wǎng)址
git remote -v
#添加主機(jī)名,可以查看遠(yuǎn)程倉(cāng)庫(kù)詳細(xì)信息
git remote show origin
#用于添加遠(yuǎn)程倉(cāng)庫(kù)
git remote add <倉(cāng)庫(kù)名> <網(wǎng)址>
#修改倉(cāng)庫(kù)名
git remote rename <原倉(cāng)庫(kù)名> <新倉(cāng)庫(kù)名>
#刪除倉(cāng)庫(kù)
git remote rm <主機(jī)名>
示例

git pull/fetch - 拉取遠(yuǎn)程倉(cāng)庫(kù)最新改動(dòng)
#取回遠(yuǎn)程倉(cāng)庫(kù)的所有更新
git fetch <遠(yuǎn)程倉(cāng)庫(kù)>
#取回指定倉(cāng)庫(kù)的指定分支
git fetch <遠(yuǎn)程倉(cāng)庫(kù)> <分支名>
#拉取本分支最新內(nèi)容,和fetch區(qū)別是拉取并自動(dòng)合并,建議使用
git pull
git branch - 分支操作
#以當(dāng)前分支為根基,創(chuàng)建新的分支,不會(huì)切換到新的分支
git branch <新分支>
#以當(dāng)前分支為根基,創(chuàng)建新分支并切換到新分支
git checkout -b <新分支>
#查看遠(yuǎn)程分支
git branch -r
#查看所有分支 * 代表當(dāng)前所在分支
git branch -a
#如果刪除分支沒(méi)有合并到當(dāng)前分支,刪除會(huì)失敗
#可以用git branch --merged和git branch --no-merged查看
git branch -d <分支名>
#強(qiáng)制刪除
git branch -D <分支名>
#刪除遠(yuǎn)程分支
git push origin --delete <分支>
合并
合并有兩個(gè)命令可以使用,分別是git merge和git rebase
git merge - 合并
#把分支合并到當(dāng)前分支
git merge <被合并的分支>
#合并沖突解決
git add <沖突的文件>
git rebase - 變基
#把當(dāng)前分支的根基變?yōu)樾赂?git rebase <新基>
#沖突
git rebase --continue
#取出 client 分支,找出處于 client 分支和 server 分支的共同祖先之后的修改,然 后把它們?cè)?master 分支上重演一遍
git rebase --onto master server client
示例

比較
這兩個(gè)命令都是把分支合并到當(dāng)前分支,只不過(guò)一個(gè)是合并,一個(gè)是首先變基再合并,變基使的提交歷史更加整潔。但是一般推薦使用git merge即可,防止帶來(lái)不必要的麻煩。
git merge是三方合并,如下例C2、C3、C4合并

git rebase是變換根基,就是把C2->C4的變更,在C3在應(yīng)用一次,把C4的根基變?yōu)镃3,然后移動(dòng)Master指針即可,所以更快,但是不要對(duì)在你的倉(cāng)庫(kù)外有副本的分支執(zhí)行變基。


git diff - 查看變更
# 工作區(qū)和暫存區(qū)的差異
git diff <文件名>
#暫存區(qū)和本地倉(cāng)庫(kù)的差異
git diff --cached <文件名>
#工作區(qū)和本地倉(cāng)庫(kù)的差異
git diff <commit> <文件名>
#比較任意兩次提交的差異
git diff <commit> <commit>
示例
# 比較a.txt本地倉(cāng)庫(kù)和工作目錄的差異
git diff HEAD a.txt
# 比較HEAD和HEAD~2的提交差異
git diff HEAD HEAD~2
git log - 查看提交歷史
# -p,用來(lái)顯示每次提交的內(nèi)容差異
# 加上 -2 ,只顯示最近的兩次提交
git log -p -2
#選項(xiàng)在每次提交的下面列出額所有被修改過(guò)的文件、有多少文件被修改了以及被修改 過(guò)的文件的哪些行被移除或是添加了
git log --stat
#自定義輸出格式
git log --pretty=format
git log --pretty=format:"%h - %an, %ar : %s"
#輸出的SHA-1值縮寫(xiě),并在一行輸出
git log --abbrev-commit --oneline
#根據(jù)提交者名字查找
git log --author=huan.liu10
#根據(jù)日期過(guò)濾
git log --after="2014-7-1" --before="2014-7-4"
#根據(jù)提交信息過(guò)濾
git log --grep=刪除
#根據(jù)文件過(guò)濾,只顯示針對(duì)某個(gè)文件改動(dòng)的記錄
git log -- a.txt b.txt
#根據(jù)內(nèi)容搜索,查看某個(gè)內(nèi)容的變動(dòng)記錄
git log -Saaaaaaaaaaa --oneline
引用日志,可以查看所有提交歷史,包括刪除的,可以用來(lái)恢復(fù)
git reflog
git show - 查看提交詳細(xì)內(nèi)容
# 顯示HEAD的提交日志
git show HEAD
# 顯示HEAD上一個(gè)版本提交的日志
git show HEAD^
git commit - 提交
#合并上一次提交或者重新編輯上一次提交,只有一次提交記錄
git commit --amend
git reset - 恢復(fù)/撤銷(xiāo)
#撤銷(xiāo)commit,從本地倉(cāng)庫(kù)到暫存區(qū),不會(huì)丟失數(shù)據(jù)
git reset --soft <commit>
#撤銷(xiāo)暫存區(qū),從暫存區(qū)到工作目錄,不會(huì)丟失數(shù)據(jù)
git reset <文件名>
#撤銷(xiāo)commit,從本地倉(cāng)庫(kù)到工作目錄,會(huì)丟失數(shù)據(jù),如果想恢復(fù)丟失commit,使用git reflog
git reset --hard <commit>
git checkout - 切換分支/撤銷(xiāo)修改
#切換分支
git checkout <branch>
#使用本地倉(cāng)庫(kù)的文件內(nèi)容覆蓋工作目錄內(nèi)容,也就是撤銷(xiāo)對(duì)文件修改
git checkout -- <文件名>
git stash - 暫存
當(dāng)不得不切到另外一個(gè)分支,但是又不想提交時(shí)使用
# 暫存工作目錄和暫存區(qū)
git stash
#查看暫存列表
git stash list
#不會(huì)刪除暫存記錄
git stash apply --index
#會(huì)刪除暫存記錄
git stash pop --index