下面Git 命令清單部分來自廖雪峰,部份來自其他各處收集熟丸。幾個專用名詞的譯名如下碌宴。
Workspace:工作區(qū)
Index / Stage:暫存區(qū)
Repository:倉庫區(qū)(或本地倉庫)
Remote:遠程倉庫
一、新建代碼庫
$ git init #在當(dāng)前目錄新建一個Git代碼庫
$ git init [project-name] #新建一個目錄熙涤,將其初始化為Git代碼庫
$ git clone [url] #下載一個項目和它的整個代碼歷史
二崎页、配置
Git的設(shè)置文件為.gitconfig鞠绰,它可以在用戶主目錄下(全局配置),也可以在項目目錄下(項目配置)飒焦。
$ git config --list # 顯示當(dāng)前的Git配置
$ git config -e [--global] # 編輯Git配置文件
$ git config [--global] user.name "[name]" # 設(shè)置提交代碼時的用戶信息
$ git config [--global] user.email "[email address]"
三蜈膨、增加/刪除文件
$ git add [file1] [file2] ... # 添加指定文件到暫存區(qū)
$ git add [dir] # 添加指定目錄到暫存區(qū),包括子目錄
$ git add . # 添加當(dāng)前目錄的所有文件到暫存區(qū)
$ git add -p # 添加每個變化前牺荠,都會要求確認翁巍,對于同一個文件的多處變化,可以實現(xiàn)分次提交
$ git rm [file1] [file2] ... # 刪除工作區(qū)文件休雌,并且將這次刪除放入暫存區(qū)
$ git rm --cached [file] # 停止追蹤指定文件灶壶,但該文件會保留在工作區(qū)
$ git mv [file-original] [file-renamed] # 改名文件,并且將這個改名放入暫存區(qū)
四杈曲、代碼提交
$ git commit -m [message] # 提交暫存區(qū)到倉庫區(qū)
$ git commit [file1] [file2] ... -m [message] # 提交暫存區(qū)的指定文件到倉庫區(qū)
$ git commit -a # 提交工作區(qū)自上次commit之后的變化驰凛,直接到倉庫區(qū)
$ git commit -v # 提交時顯示所有diff信息
$ git commit --amend -m [message] # 使用一次新的commit胸懈,替代上一次提交,如果代碼沒有任何新變化恰响,則用來改寫上一次commit的提交信息
$ git commit --amend [file1] [file2] ... # 重做上一次commit趣钱,并包括指定文件的新變化
五、分支
$ git branch # 列出所有本地分支
$ git branch -r # 列出所有遠程分支
$ git branch -a # 列出所有本地分支和遠程分支
$ git branch [branch-name] # 新建一個分支胚宦,但依然停留在當(dāng)前分支
$ git checkout -b [branch] # 新建一個分支首有,并切換到該分支
$ git branch [branch] [commit] # 新建一個分支,指向指定commit
$ git branch --track [branch] [remote-branch] # 新建一個分支枢劝,與指定的遠程分支建立追蹤關(guān)系
$ git checkout [branch-name] # 切換到指定分支井联,并更新工作區(qū)
$ git checkout - # 切換到上一個分支
$ git branch --set-upstream [branch] [remote-branch] 建立追蹤關(guān)系,在現(xiàn)有分支與指定的遠程分支之間
$ git merge [branch] # 合并指定分支到當(dāng)前分支
$ git merge --no-ff -m "merge with no-ff" dev #優(yōu)選下面一種您旁,有合并記錄
$ git cherry-pick [commit] # 選擇一個commit烙常,合并進當(dāng)前分支
$ git branch -d [branch-name] # 刪除分支
$ git push origin --delete [branch-name] # 刪除遠程分支
$ git branch -d [remote/branch]
六、標簽
$ git tag # 列出所有tag
$ git tag [tag] # 新建一個tag在當(dāng)前commit
$ git tag [tag] [commit] # 新建一個tag在指定commit
$ git tag -d [tag]# 刪除本地tag
$ git push origin :refs/tags/[tagName] # 刪除遠程tag
$ git show [tag] # 查看tag信息
$ git push [remote] [tag] # 提交指定tag
$ git push [remote] --tags # 提交所有tag
$ git checkout -b [branch] [tag] # 新建一個分支被冒,指向某個tag
七军掂、查看信息
$ git status # 顯示有變更的文件
$ git log # 顯示當(dāng)前分支的版本歷史
$ git log --stat # 顯示commit歷史,以及每次commit發(fā)生變更的文件
$ git log -S [keyword] # 搜索提交歷史昨悼,根據(jù)關(guān)鍵詞
$ git log [tag] HEAD --pretty=format:%s # 顯示某個commit之后的所有變動,每個commit占據(jù)一行
$ git log [tag] HEAD --grep feature # 顯示某個commit之后的所有變動跃洛,其"提交說明"必須符合搜索條件
$ git log --follow [file] # 顯示某個文件的版本歷史率触,包括文件改名
$ git whatchanged [file]
$ git log -p [file] # 顯示指定文件相關(guān)的每一次diff
$ git log -5 --pretty=oneline # 顯示過去5次提交
$ git shortlog -sn # 顯示所有提交過的用戶,按提交次數(shù)排序
$ git blame [file] # 顯示指定文件是什么人在什么時間修改過
$ git diff # 顯示暫存區(qū)和工作區(qū)的差異
$ git diff --cached [file] # 顯示暫存區(qū)和上一個commit的差異
$ git diff HEAD # 顯示工作區(qū)與當(dāng)前分支最新commit之間的差異
$ git diff [first-branch]...[second-branch] # 顯示兩次提交之間的差異
$ git diff --shortstat "@{0 day ago}" # 顯示今天你寫了多少行代碼
$ git show [commit] # 顯示某次提交的元數(shù)據(jù)和內(nèi)容變化
$ git show --name-only [commit] # 顯示某次提交發(fā)生變化的文件
$ git show [commit]:[filename] # 顯示某次提交時汇竭,某個文件的內(nèi)容
$ git reflog # 顯示當(dāng)前分支的最近幾次提交
八葱蝗、遠程同步
$ git fetch [remote] # 下載遠程倉庫的所有變動
$ git fetch --all
$ git remote -v # 顯示所有遠程倉庫
$ git remote show [remote] # 顯示某個遠程倉庫的信息
$ git remote add [shortname] [url] #增加一個新的遠程倉庫,并命名
$ git pull [remote] [branch] # 取回遠程倉庫的變化细燎,并與本地分支合并
$ git push [remote] [branch] # 上傳本地指定分支到遠程倉庫
$ git push -u [remote] [branch] #第一次的話
$ git push [remote] --force # 強行推送當(dāng)前分支到遠程倉庫两曼,即使有沖突
$ git push [remote] --all # 推送所有分支到遠程倉庫
九、撤銷
$ git checkout [file] # 恢復(fù)暫存區(qū)的指定文件到工作區(qū)
$ git checkout [commit] [file] # 恢復(fù)某個commit的指定文件到暫存區(qū)和工作區(qū)
$ git checkout . # 恢復(fù)暫存區(qū)的所有文件到工作區(qū)
$ git reset [file] # 重置暫存區(qū)的指定文件玻驻,與上一次commit保持一致悼凑,但工作區(qū)不變
$ git reset --hard # 重置暫存區(qū)與工作區(qū),與上一次commit保持一致
$ git reset [commit]
$ git reset --hard [commit] 重置當(dāng)前分支的HEAD為指定commit璧瞬,同時重置暫存區(qū)和工作區(qū)户辫,與指定commit一致
$ git push origin HEAD --force (待驗證)
$ git reset --keep [commit] 重置當(dāng)前HEAD為指定commit,但保持暫存區(qū)和工作區(qū)不變
新建一個commit嗤锉,用來撤銷指定commit
$ git revert [commit] # 后者的所有變化都將被前者抵消渔欢,并且應(yīng)用到當(dāng)前分支
$ git stash # 暫時將未提交的變化移除,稍后再移入
$ git stash list
$ git stash pop 一是用git stash apply恢復(fù)瘟忱,但是恢復(fù)后奥额,stash內(nèi)容并不刪除苫幢,你需要用git stash drop來刪除;
$ git stash apply stash@{0}.
$ git stash show -p stash@{0} # 參考第一次暫存
十垫挨、其他
$git archive ${BranchName} > ${CodePath}.zip #生成一個可供發(fā)布的壓縮包
$git archive --format zip --output ${CodePath}.zip ${BranchName}
$git clean 參數(shù)
-n 顯示 將要 刪除的 文件 和 目錄
-f 刪除 文件态坦,-df 刪除 文件 和 目錄
$git clean -f # 刪除 untracked files
$git clean -fd # 連 untracked 的目錄也一起刪掉
$git clean -xfd # 連 gitignore 的untrack 文件/目錄也一起刪掉 (慎用,一般這個是用來刪掉編譯出來的 .o之類的文件用的)
$git clean -nxfd # 在用上述 git clean 前棒拂,墻裂建議加上 -n 參數(shù)來先看看會刪掉哪些文件伞梯,防止重要文件被誤刪
$git clean -nf
$git clean -nfd
.gitignore 目錄不管是否加斜杠都可以忽略,如果被忽略的目錄里面已經(jīng)有文件被提交了帚屉,那么該目錄忽略僅對被提交的文件無效
git遠程刪除分支后谜诫,本地git branch -a 依然能看到的解決辦法。
git remote show origin 查看remote地址攻旦,遠程分支喻旷,還有本地分支與之相對應(yīng)關(guān)系等信息。
git remote prune origin 刪除遠程倉庫不存在的分支
git log --stat # 顯示提交日志及相關(guān)變動文件
git log -p -m
git show HEAD^ # 顯示HEAD的父(上一個版本)的提交日志 ^^為上兩個版本 ^5為上5個版本
git branch --merged # 顯示所有已合并到當(dāng)前分支的分支
git branch --no-merged # 顯示所有未合并到當(dāng)前分支的分支
git branch -m master master_copy # 本地分支改名
git checkout features/performance # 檢出已存在的features/performance分支
git checkout --track hotfixes/BJVEP933 # 檢出遠程分支hotfixes/BJVEP933并創(chuàng)建本地跟蹤分支
git checkout -b devel origin/develop # 從遠程分支develop創(chuàng)建新本地分支devel并檢出
git checkout -- README # 檢出head版本的README文件(可用于修改錯誤回退)
git merge origin/master # 合并遠程master分支至當(dāng)前分支
git cherry-pick ff44785404a8e # 合并提交ff44785404a8e的修改
git push origin master # 將當(dāng)前分支push到遠程master分支
git push origin :hotfixes/BJVEP933 # 刪除遠程倉庫的hotfixes/BJVEP933分支
git push --tags # 把所有tag推送到遠程倉庫
git fetch # 獲取所有遠程分支(不更新本地分支牢屋,另需merge)
git fetch --prune # 獲取所有原創(chuàng)分支并清除服務(wù)器上已刪掉的分支
git pull origin master # 獲取遠程分支master并merge到當(dāng)前分支
git mv README README2 # 重命名文件README為README2
git reset --hard HEAD # 將當(dāng)前版本重置為HEAD(通常用于merge失敗回退)
git rebase
git ls-files # 列出git index包含的文件
git show-branch # 圖示當(dāng)前分支歷史
git show-branch --all # 圖示所有分支歷史
git whatchanged # 顯示提交歷史對應(yīng)的文件修改
git reflog # 顯示所有提交且预,包括孤立節(jié)點
git show master@{yesterday} # 顯示master分支昨天的狀態(tài)
git log --pretty=format:'%h %s' --graph # 圖示提交日志
git show -s --pretty=raw 2be7fcb476