Git Note:Git常用命令總結

想要學會使用Git墓陈,首先需要理解什么是分布式版本庫宪塔,什么是工作區(qū)和暫存區(qū)混坞,這幾個概念是理解很多命令的基礎狐援。強烈推薦閱讀廖雪峰老師寫的Git教程,這是目前為止最好的中文Git教程究孕,沒有之一啥酱。如果你想要成為Git專家請參考《Pro Git》(Second Edition)

先簡單地解釋一下工作區(qū)厨诸、版本庫和暫存區(qū)镶殷。看不懂沒關系微酬,先了解下后面的git addgit commit命令后再看就容易理解了绘趋。(如果還是沒有明白,點這里颗管。)

  • 工作區(qū):你的工作目錄陷遮,你的工程文件夾。
  • 版本庫:就是你工作區(qū)中的.git文件夾垦江,這里忠實地記錄著你提交過的每一次改動拷呆。git commit命令就是把你的改動從暫存區(qū)提交到了版本庫的當前分支,比如默認的master分支疫粥。
  • 暫存區(qū):需要提交的文件修改通通放到暫存區(qū)茬斧,然后,一次性提交暫存區(qū)的所有修改梗逮。也就是使用git add后文件修改就保存到了暫存區(qū)项秉,以備使用git commit命令提交到真正的版本庫。

這里只對常用命令做一下梳理慷彤,這些命令基本可以滿足日常使用娄蔼,注意所有git命令都要在你項目的根目錄下使用怖喻。

創(chuàng)建倉庫

$ git init

添加到暫存區(qū)

創(chuàng)建倉庫之后就可以使用git管理當前目錄下的代碼了。同時該目錄下多了一個.git的子目錄,用ls -a可以查看岁诉。

$ git add filename

把修改添加到暫存區(qū)锚沸,每次修改后都需要運行git add命令,之前已經add過得文件也一樣涕癣,如果不add到暫存區(qū)哗蜈,那就無法commit。因為git記錄的是修改而不是你文件的拷貝坠韩,這也是它可以如高效和節(jié)約空間的原因距潘。(使用過git add命令的文件狀態(tài)就是Tracked,新建的文件狀態(tài)是Untracked只搁。)

$ git add .

把所有文件添加到暫存區(qū)音比。

忽略某些文件

有些文件我們無需Git管理,也不希望看到它出現在Untracked列表里面氢惋,比如使用Vim時產生的.swp臨時文件洞翩。我們只要創(chuàng)建一個名為.gitignore的文件,列出要忽略的文件模式即可焰望,支持簡單地正則表達式(其實是glob模式匹配菱农,shell中使用的簡化了的正則表達式)。
看一個《Pro Git》中給的.gitignore文件的例子就懂了:

# 此為注釋柿估,會被 Git 忽略
# 忽略所有 .swp 結尾和 .a 結尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 忽略項目根目錄下的 TODO 文件循未,不包括 subdir/TODO
/TODO
# 忽略 build/ 目錄下地所有文件
build/
# 忽略 doc/ 目錄下的所有 .txt 文件,但不包括 doc/ 子目錄中的 .txt 文件
doc/*.txt
# 忽略 doc/ 目錄下的所有 .txt 文件秫舌,包括 doc/ 子目錄中的 .txt 文件
doc/**/*.txt

那些討厭的臨時文件再也不會在git add的時候搗亂的妖,也不會出現在Untracked列表里了。

提交

$ git commit -m "wrote a new file"

把文件提交到版本庫足陨,-m后面輸入的是本次提交的說明嫂粟,方便以后從歷史記錄里找到改動記錄。

如果不想每次都要git add墨缘,git commit怎么辦星虹,有一個簡單地辦法,使用-a參數:

$ git commit -a -m "I did some work"

這樣即使是上次提交之后修改過的文件(Tracked)也可以直接提交到版本庫中(當前的分支)镊讼。

查看狀態(tài)

$ git status

查看版本庫狀態(tài)宽涌,就是告訴你哪個文件修改已經在暫存區(qū)了(to be commit),哪個文件已經add過但是最后的修改沒有add(Changes not staged for commit)蝶棋,哪個文件是新建的還沒有add過(Untracked)卸亮。

查看日志

$ git log

git log命令顯示所有提交,從最早的提交到最近一次提交(當前HEAD所指向的提交,請參考版本回退)玩裙。

$ git log --pretty=oneline

加上--pretty參數后可以單行輸出兼贸。

$ git reflog

用來記錄你的每一次命令段直,包括回退命令。

版本回退

在Git中溶诞,用HEAD表示當前版本鸯檬,也就是最新的提交。

$ git reset --hard HEAD^

這個命令表示回退到當前HEAD的上一個版本螺垢,也就是舍棄了最后一次提交喧务。會退后再使用git log命令將無法查看最后一次提交的記錄,只能看到當前HEAD甩苛,以及更早的提交∏握荆可以使用git reflog命令查看所有提交記錄讯蒲。

$ git reset fc142e435432984a95b46bb7b757b9bdcee0e8e8

git reset后的參數是通過git reflog查看到的你希望回退到的版本,可以是任意提交過的版本肄扎。

撤銷修改

$ git checkout -- filename

命令git checkout -- filename意思就是墨林,把filename文件在工作區(qū)的修改全部撤銷,這里有兩種情況:

  • 文件修改后還沒有add到暫存區(qū)犯祠,撤銷修改就回到最后一次commit時的狀態(tài)旭等;

  • 已經add后又作了修改,撤銷修改就回到最后一次add時的狀態(tài)衡载。

如果你亂改了文件還add到了暫存區(qū)搔耕,想要回到上一次commit時的狀態(tài),先使用命令git reset HEAD filename痰娱,使暫存區(qū)文件恢復到和commit時一致溯街,再使用git checkout -- filename留晚。

注意:git checkout -- file命令中的--很重要,沒有--,就變成了“創(chuàng)建一個新分支”的命令辞槐。

刪除文件

直接刪除摸個文件,或者用rm filename命令刪除厦滤,然后使用命令:

$ git rm filename

然后commit 就可以了翘瓮。如果不小心刪錯了文件并且沒有commit,沒關系遍坟,冷靜一下拳亿,使用上面一條命令git checkout -- filename就可以恢復了。

如果一個文件已經被提交到版本庫愿伴,那么你永遠不用擔心誤刪风瘦,但是要小心,你只能恢復文件到最新版本公般,你會丟失最近一次提交后你修改的內容万搔。

查看分支

每次提交胡桨,Git都把它們串成一條時間線,這條時間線就是一個分支瞬雹。默認分支是master昧谊,也是HEAD指向的分支。

$ git branch

前面有*的分支是當前分支酗捌。

新建分支

$ git branch branchname

比如git branch dev命令創(chuàng)建了一個叫dev的分支呢诬,現在devmaster指向相同的提交。

切換分支

$ git checkout branchname

使用git checkout dev后胖缤,HEAD就指向了dev尚镰,現在提交的修改就會到dev分支上,而master分支會停留在當前狀態(tài)哪廓。

創(chuàng)建+切換分支

$ git checkout -b branchname

前面兩條命令合并成一條狗唉。

合并某分支到當前分支

$ git merge branchname

比如當前分支是master,使用git merge dev涡真,會將dev分支上的提交添加到master分支上分俯。這種合并方式是快速合并(Fast-forward)當兩個分支都做過修改后合并是可能會產生沖突,無法進行快速合并哆料,當Git無法自動合并分支時缸剪,就必須首先解決沖突

刪除分支

$ git branch -d branchname

合并完成后东亦,就可以放心地刪除dev分支了杏节。合并后再刪掉分支,和直接在master分支上工作效果是一樣的典阵,但過程更安全拢锹。

查看文件差異

$ git diff

比較工作區(qū)和暫存區(qū)的差異。

$ git diff filename

比較同一個文件在不同分支的差異萄喳。

$ git diff branchname

比較當前分支和branchname分支的差異卒稳。

$ git diff --cached
// or git diff --staged

比較暫存區(qū)和HEAD的差異。

$ git diff --HEAD

比較工作區(qū)和HEAD的差異他巨。

解決沖突

git merge命令會標記有沖突的文件內容充坑,使用git status可以查看沖突文件,使用git diff filename可以查看文件內容染突,比較不同分支上的差異捻爷。

打開有沖突的文件,解決沖突份企,再提交也榄,合并完成。

用帶參數的git log --graph可以看到分支的合并情況:

$ git log --graph --pretty=oneline --abbrev-commit

現在,你已經可以使用Git在自己的機器上愉快地玩耍啦_甜紫。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末降宅,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子囚霸,更是在濱河造成了極大的恐慌腰根,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拓型,死亡現場離奇詭異额嘿,居然都是意外死亡,警方通過查閱死者的電腦和手機劣挫,發(fā)現死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門册养,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人压固,你說我怎么就攤上這事球拦。” “怎么了邓夕?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵刘莹,是天一觀的道長阎毅。 經常有香客問我焚刚,道長,這世上最難降的妖魔是什么扇调? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任矿咕,我火速辦了婚禮,結果婚禮上狼钮,老公的妹妹穿的比我還像新娘碳柱。我一直安慰自己,他們只是感情好熬芜,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布莲镣。 她就那樣靜靜地躺著,像睡著了一般涎拉。 火紅的嫁衣襯著肌膚如雪瑞侮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天鼓拧,我揣著相機與錄音半火,去河邊找鬼。 笑死季俩,一個胖子當著我的面吹牛钮糖,可吹牛的內容都是我干的。 我是一名探鬼主播酌住,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼店归,長吁一口氣:“原來是場噩夢啊……” “哼阎抒!你這毒婦竟也來了?” 一聲冷哼從身側響起娱节,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤挠蛉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肄满,有當地人在樹林里發(fā)現了一具尸體谴古,經...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年稠歉,在試婚紗的時候發(fā)現自己被綠了掰担。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡怒炸,死狀恐怖带饱,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情阅羹,我是刑警寧澤勺疼,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站捏鱼,受9級特大地震影響执庐,放射性物質發(fā)生泄漏。R本人自食惡果不足惜导梆,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一轨淌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧看尼,春花似錦递鹉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至狰域,卻和暖如春媳拴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背北专。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工禀挫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拓颓。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓语婴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子砰左,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,661評論 9 163
  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,486評論 1 26
  • 第二部分 盛年不重來匿醒,一日難再晨 第三十章 搬家不停歇 姥爺和姥姥這一生搬了很多次家,這不缠导,在我小學六年級時廉羔,他們...
    W曉曉閱讀 229評論 0 2
  • 最近在項目中遇到了涉及二維碼相關的問題, 這里想記錄總結一下二維碼相關技術 一. 二維碼的介紹 二維條碼/二維碼是...
    TitanCoder閱讀 3,118評論 0 6
  • 這幾天二寶睡得不太好憋他,白天我沒有陪他睡,在看書復習髓削,中午飯點時也會偷懶看下電視竹挡,是爸的平板放的熱播劇。 8點左右立膛,...
    小丫屠閱讀 211評論 0 1