常用 Git 命令

下面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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市烙无,隨后出現(xiàn)的幾起案子锋谐,更是在濱河造成了極大的恐慌,老刑警劉巖截酷,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涮拗,死亡現(xiàn)場離奇詭異,居然都是意外死亡迂苛,警方通過查閱死者的電腦和手機三热,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來三幻,“玉大人就漾,你說我怎么就攤上這事∧畎幔” “怎么了抑堡?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锁蠕。 經(jīng)常有香客問我夷野,道長,這世上最難降的妖魔是什么荣倾? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任悯搔,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妒貌。我一直安慰自己通危,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布灌曙。 她就那樣靜靜地躺著菊碟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪在刺。 梳的紋絲不亂的頭發(fā)上逆害,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天空免,我揣著相機與錄音吓歇,去河邊找鬼。 笑死偶妖,一個胖子當(dāng)著我的面吹牛颖杏,可吹牛的內(nèi)容都是我干的纯陨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼留储,長吁一口氣:“原來是場噩夢啊……” “哼翼抠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起获讳,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤阴颖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赔嚎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膘盖,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年尤误,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片结缚。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡损晤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出红竭,到底是詐尸還是另有隱情尤勋,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布茵宪,位于F島的核電站最冰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏稀火。R本人自食惡果不足惜暖哨,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凰狞。 院中可真熱鬧篇裁,春花似錦沛慢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至黍聂,卻和暖如春躺苦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背产还。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工匹厘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雕沉。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓集乔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坡椒。 傳聞我的和親對象是個殘疾皇子扰路,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 一般來說,日常使用只要記住下圖6個命令倔叼,就可以了汗唱。但是熟練使用,恐怕要記住60~100個命令丈攒。 下面是我整理的常用...
    f09037cb27f7閱讀 113評論 0 0
  • 常用 Git 命令有哪些哩罪?一般來說,日常使用只要記住下圖6個命令巡验,就可以了际插。但是熟練使用,恐怕要記住60~100個...
    大小伍閱讀 754評論 0 0
  • 常用 Git 命令清單 作者:阮一峰 日期:2015年12月 9日 我每天使用 Git 显设,但是很多命令記不住框弛。 一...
    vincentSea閱讀 428評論 0 0
  • 一般來說,日常使用只要記住下圖6個命令捕捂,就可以了瑟枫。但是熟練使用,恐怕要記住60~100個命令指攒。 下面是我整理的常用...
    碼大哈閱讀 299評論 0 1
  • 月影婆娑映枕邊慷妙, 輕風(fēng)驟起醉撥弦。 小樓昨夜說腸斷允悦, 又是一席舊夢瞞膝擂。
    點下閱讀 176評論 2 6