git常用命令總結(jié)

git init

創(chuàng)建Git倉庫 git init

圖例中首先創(chuàng)建了一個空的文件夾gitDemo丹诀,進(jìn)入該文件夾走孽,運行g(shù)it init命令惧辈,提示創(chuàng)建了一個空的git倉庫。這時候我們查看gitDemo磕瓷,發(fā)現(xiàn)多了一個.git目錄盒齿,它是用來跟蹤管理版本庫的。由于.git這個目錄默認(rèn)是隱藏的困食,所以需要用ls -ah命令才能查看边翁。

git add & git commit

在介紹這兩個命令之前我們先來了解一下工作區(qū)(Working Directory)和版本庫(Repository),

其中Working Directory就指當(dāng)前在電腦上看到的所有目錄硕盹,如例子中的gitDemo目錄符匾;

對于Repository,首先

Working Directory有一個隱藏目錄.git瘩例,這個不算工作區(qū)啊胶,而是Git的版本庫。Git的版本庫里存了很多東西垛贤,其中最重要的就是稱為stage(或者叫index)的暫存區(qū)焰坪,還有Git為我們自動創(chuàng)建的第一個分支master,以及指向master的一個指針叫HEAD南吮×詹剩——from https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013745374151782eb658c5a5ca454eaa451661275886c6000

工作區(qū)和版本庫

了解了Working Directory以及Repository,我們就能更明白git add 和 git commit 都是針對什么進(jìn)行操作。

簡單總結(jié)就是:

git add把文件修改添加到暫存區(qū)露乏;

git commit把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支碧浊。

但起初我還是很疑惑的,為什么在git commit之前要增加一個git add操作瘟仿,這樣不是很繁瑣嗎箱锐??劳较?

最后在網(wǎng)上查閱資料時看到這樣一個生動的總結(jié)驹止,讓我瞬間明白了其中的道理:

git add就好比逛淘寶的時候?qū)⒁徺I的商品添加到購物車,而git commit相當(dāng)于將購物車?yán)锏纳唐芬徊⒔Y(jié)賬观蜗,試想如果每往購物車加入一件商品就要結(jié)一次賬臊恋,豈不是更麻煩。

git add <file> 表示將指定文件的修改添加到暫存區(qū) e.g.: git add test.txt

git add . 表示將涉及到的所有修改都添加到暫存區(qū)

git commit -m '這里是相關(guān)說明' 表示將暫存區(qū)中所有內(nèi)容提交到當(dāng)前分支墓捻,其中-m 后面跟著的是這次提交內(nèi)容的相關(guān)注釋抖仅,不建議省略。

git add & git commit

git diff

用來查看文件具體都有了些什么修改

git status

這是git命令中很重要的一個命令砖第,它讓我們時刻掌握倉庫當(dāng)前的狀態(tài)撤卢,同時會給出一些接下來我們可能會進(jìn)行的操作的相關(guān)提示。

git status

在上面的例子中梧兼,我重新編輯了之前創(chuàng)建的test.txt文件放吩,做了一些文件內(nèi)容的修改,之后使用git status命令羽杰,得出上圖渡紫。上圖訴我們?nèi)缦滦畔ⅲ?/p>

git checkout -- <file>

對文件的修改還沒有添加到暫存區(qū),以便之后的提交忽洛;

可以使用git add <file>將修改添加到暫存區(qū)腻惠,更新暫存區(qū)內(nèi)容,以便之后提交

可以使用git checkout -- <file> 來撤銷工作區(qū)中發(fā)生的修改

因此欲虚,如果修改還沒被添加到暫存區(qū),那么可以通過git checkout -- <file>來將工作區(qū)的內(nèi)容恢復(fù)到上一次git add 之前悔雹。

git reset HEAD

如果修改已經(jīng)被添加到暫存區(qū)复哆,那么可以根據(jù)提示通過git reset HEAD <file>,這里的HEAD值的是當(dāng)前分支腌零。

此操作只是將上一次的git add 操作撤銷梯找,添加到暫存區(qū)的修改移出暫存區(qū),要進(jìn)一步刪除當(dāng)前工作區(qū)的修改益涧,根據(jù)提示繼續(xù)執(zhí)行g(shù)it checkout -- <file>操作锈锤,回到上上次git add后的狀態(tài)。

修改并執(zhí)行了git add

可以看到我修改了test.txt文件,并且執(zhí)行了git add操作久免,這時候查看git status浅辙,提示說——修改以及添加到暫存區(qū),等待提交阎姥。同時可以使用git reset HEAD <file>將修改移出暫存记舆。

git reset --hard

執(zhí)行g(shù)it reset --hard <file>將之前移入暫存的修改移出,可以看到git reset --hard <file>執(zhí)行前后呼巴,相關(guān)文件test.txt內(nèi)容并沒有什么改變泽腮,但此時運行g(shù)it status提示說——有存在未添加到暫存的修改,如果確認(rèn)要移入暫存則執(zhí)行g(shù)it add衣赶,若要撤銷工作區(qū)修改诊赊,則執(zhí)行g(shù)it checkout -- <file>。

git checkout --

可以看到執(zhí)行g(shù)it checkout -- <file>之后府瞄,test.txt恢復(fù)到了上上次git add后的狀態(tài)豪筝。

git reset --hard HEAD^/id

如果再糟糕一點,修改不僅已經(jīng)被添加到暫存區(qū)還被提交到了分支上摘能,那么怎樣回退到上一個版本续崖?

不知道大家有沒有注意到,每當(dāng)我們執(zhí)行一次git commit時团搞,同時會創(chuàng)建一個版本id严望,有了這個id我們就能通過id和相關(guān)指令回到指定版本棚点。

版本回退

上圖中滔韵,我們先修改了test.txt文件逃沿,之后執(zhí)行了git add 以及 git commit 操作咽斧,可以看到git commit時創(chuàng)建了一個7位數(shù)的版本id/commit id械巡,實際的id并不是7位數(shù)俱萍,這里只是展示出來前7位库菲。之后執(zhí)行g(shù)it reset --hard HEAD^回退到了前一個版本琐鲁,可以看到命令執(zhí)行前后test.txt文件內(nèi)容的改變挽拂。

其中HEAD^表示當(dāng)前版本的上一個版本惭每,依此類推,HEAD^^表示上一個版本的上一版本亏栈,但如果我們想回退到很久以前的版本台腥,一直HEAD^也很麻煩,所以git也提供了根據(jù)版本id來回退到指定版本的指令绒北。

那如何知道要回退的版本的id呢黎侈?純靠自己記是不現(xiàn)實的。

git log / git log --pretty=online

可以幫助我們闷游,git log可以查看提交歷史,其中g(shù)it log --pretty=online得到的是簡潔版的提交歷史峻汉。

git log執(zhí)行后
git log --pretty=oneline執(zhí)行后

通過git log我嗎可以清楚的看到提交歷史贴汪,包括提交時的注釋、時間休吠、提交人之類的信息扳埂,同時包括很重要的提交id,有了提交id我們就可以任意回退到指定版本了~

git reset --hard id

回退成功蛛碌。

git reflog

因為如果回退到以前的版本后聂喇,再執(zhí)行g(shù)it log,那么沒回退前的那個版本就不會再出現(xiàn)在提交歷史中了蔚携。那如果這個時候我們又想去到?jīng)]回退前的版本怎么辦希太,需要的依然是id,那id去哪兒找呢酝蜒?

執(zhí)行g(shù)it reflog可以查到命令歷史誊辉,就可以去命令歷史里找回退前的id。

git reflow執(zhí)行后

在命令歷史中我們可以找到回退前的版本號為commit:add again所對應(yīng)的id——abd342c亡脑,因此就很好去到回退前的版本了堕澄。

去到回退前版本

git rm

這個命令表示刪除文件

git rm

根據(jù)提示你也可以撤銷刪除,此時相關(guān)文件會恢復(fù)到最新版本霉咨,但是會丟失最后一次提交后修改的內(nèi)容蛙紫。

一直在操作本地倉庫,是時候過渡到遠(yuǎn)程倉庫了

對于遠(yuǎn)程倉庫有兩種情況:

git remote add origin git@server-name:path/repo-name.git

git push -u origin master

1. 你已經(jīng)在本地創(chuàng)建了一個Git倉庫途戒,又想在GitHub創(chuàng)建一個Git倉庫坑傅,并且讓這兩個倉庫進(jìn)行遠(yuǎn)程同步。

此時你需要打開github創(chuàng)建一個遠(yuǎn)程倉庫喷斋,倉庫名和本地倉庫名一致唁毒。本例中的倉庫名為gitDemo。

github創(chuàng)建遠(yuǎn)程倉庫

GitHub告訴我們星爪,可以從這個倉庫克隆出新的倉庫浆西,也可以把一個已有的本地倉庫與之關(guān)聯(lián),然后顽腾,把本地倉庫的內(nèi)容推送到GitHub倉庫近零。

遠(yuǎn)程倉庫關(guān)聯(lián)

根據(jù)github提示,我們進(jìn)行了下面兩個操作:

關(guān)聯(lián)遠(yuǎn)程倉庫崔泵,使用命令git remote add origin git@server-name:path/repo-name.git秒赤;

關(guān)聯(lián)后,使用命令git push -u origin master第一次推送master分支的所有內(nèi)容憎瘸;

git clone

2. 此時我們沒有本地倉庫,打算從一開始創(chuàng)建遠(yuǎn)程倉庫陈瘦,再從遠(yuǎn)程倉庫克隆

也是在github創(chuàng)建一個遠(yuǎn)程倉庫幌甘,之后拿到克隆的鏈接,執(zhí)行相關(guān)命令

git clone

git branch

查看分支

git branch <name>

創(chuàng)建分支

git checkout <name>

切換分支

git checkout -b <name>

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

git merge <name>

將指定分支合并到當(dāng)前分支

git branch -d <name>

刪除指定分支

git branch -D <name>

強(qiáng)制刪除指定分支,即使還沒有merge

git stash

git stash pop

當(dāng)手頭工作沒有完成時锅风,先把工作現(xiàn)場git stash一下酥诽,然后去修復(fù)bug,修復(fù)后皱埠,再git stash pop肮帐,回到工作現(xiàn)場。

git tag <name>

新建tag

默認(rèn)為HEAD版本打tag

git tag <name> id

為指定版本打tag

git tag -a <name> -m "" id

創(chuàng)建帶有說明的標(biāo)簽边器,用-a指定標(biāo)簽名训枢,-m指定說明文字

git show <name>

可以看到說明文字

git tag

參看所有tag

git tag -d <name>

刪除指定tag,此時tag還沒被推送到遠(yuǎn)程倉庫

git push origin <name>

將指定tag推送到遠(yuǎn)程倉庫

git tag -d <name>

git push origin:refs/tags/<name>

如果標(biāo)簽已經(jīng)推送到遠(yuǎn)程忘巧,要刪除遠(yuǎn)程標(biāo)簽得先從本地刪除恒界,再刪除遠(yuǎn)程分支

git配置別名

每個倉庫的Git配置文件都放在.git/config文件中,別名就在[alias]后面砚嘴,要刪除別名十酣,直接把對應(yīng)的行刪掉即可。

后面的命令沒有一步一步的用demo演示际长,以后可以慢慢加上耸采,主要是覺得這些比較容易一使用就會了,所以建議大家隨便弄一個文件來實際操作一下這些命令工育。遇到問題積極解決虾宇,在過程中感觸比較深的一點就是出問題的時候看看提示,根據(jù)提示一步步都能把問題解決翅娶。注意用git status來實時掌控修改文留,同時git status會有很多接下來可能會發(fā)生的操作的提示。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末竭沫,一起剝皮案震驚了整個濱河市燥翅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜕提,老刑警劉巖森书,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谎势,居然都是意外死亡凛膏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門脏榆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猖毫,“玉大人,你說我怎么就攤上這事须喂∮醵希” “怎么了趁蕊?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長仔役。 經(jīng)常有香客問我掷伙,道長,這世上最難降的妖魔是什么又兵? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任任柜,我火速辦了婚禮,結(jié)果婚禮上沛厨,老公的妹妹穿的比我還像新娘宙地。我一直安慰自己,他們只是感情好俄烁,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布绸栅。 她就那樣靜靜地躺著,像睡著了一般页屠。 火紅的嫁衣襯著肌膚如雪粹胯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天辰企,我揣著相機(jī)與錄音风纠,去河邊找鬼。 笑死牢贸,一個胖子當(dāng)著我的面吹牛竹观,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播潜索,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼臭增,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了竹习?” 一聲冷哼從身側(cè)響起誊抛,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎整陌,沒想到半個月后拗窃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡泌辫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年随夸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片震放。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡宾毒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出殿遂,到底是詐尸還是另有隱情伍俘,我是刑警寧澤邪锌,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布勉躺,位于F島的核電站癌瘾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏饵溅。R本人自食惡果不足惜妨退,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜕企。 院中可真熱鬧咬荷,春花似錦、人聲如沸轻掩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唇牧。三九已至罕扎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丐重,已是汗流浹背腔召。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留扮惦,地道東北人臀蛛。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像崖蜜,于是被迫代替她去往敵國和親浊仆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

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