Git代碼管理的使用筆記

系統(tǒng)的學(xué)習(xí)Git傳送門(mén)

創(chuàng)建版本庫(kù)

什么是版本庫(kù)呢绊寻?版本庫(kù)又名倉(cāng)庫(kù)馏予,英文名repository,你可以簡(jiǎn)單理解成一個(gè)目錄戚丸,這個(gè)目錄里面的所有文件都可以被Git管理起來(lái),每個(gè)文件的修改扔嵌、刪除限府,Git都能跟蹤,以便任何時(shí)刻都可以追蹤歷史对人,或者在將來(lái)某個(gè)時(shí)刻可以“還原”谣殊。所以拂共,創(chuàng)建一個(gè)版本庫(kù)非常簡(jiǎn)單牺弄,首先,選擇一個(gè)合適的地方宜狐,創(chuàng)建一個(gè)空目錄:

$ mkdir learngit

$ cd learngit

$ pwd

/Users/michael/learngit

pwd命令用于顯示當(dāng)前目錄势告。在我的Mac上,這個(gè)倉(cāng)庫(kù)位于/Users/michael/learngit抚恒。



第二步咱台,通過(guò)git init命令把這個(gè)目錄變成Git可以管理的倉(cāng)庫(kù):

$ git init

Initialized empty Git repository in /Users/michael/learngit/.git/

言歸正傳,現(xiàn)在我們編寫(xiě)一個(gè)readme.txt文件俭驮,內(nèi)容如下:

Git is a version control system.

Git is free software.

一定要放到learngit目錄下(子目錄也行)回溺,因?yàn)檫@是一個(gè)Git倉(cāng)庫(kù),放到其他地方Git再厲害也找不到這個(gè)文件混萝。

和把大象放到冰箱需要3步相比遗遵,把一個(gè)文件放到Git倉(cāng)庫(kù)只需要兩步。

第一步逸嘀,用命令git add告訴Git车要,把文件添加到倉(cāng)庫(kù)

$ git add readme.txt


第二步,用命令git commit告訴Git崭倘,把文件提交到倉(cāng)庫(kù)

$ git commit -m "wrote a readme file"

簡(jiǎn)單解釋一下git commit命令翼岁,-m后面輸入的是本次提交的說(shuō)明类垫,可以輸入任意內(nèi)容,當(dāng)然最好是有意義的琅坡,這樣你就能從歷史記錄里方便地找到改動(dòng)記錄悉患。

為什么Git添加文件需要add,commit一共兩步呢榆俺?因?yàn)閏ommit可以一次提交很多文件购撼,所以你可以多次add不同的文件,比如:


運(yùn)行g(shù)it status命令看看結(jié)果:

git status命令可以讓我們時(shí)刻掌握倉(cāng)庫(kù)當(dāng)前的狀態(tài)谴仙,上面的命令告訴我們迂求,readme.txt被修改過(guò)了,但還沒(méi)有準(zhǔn)備提交的修改晃跺。

雖然Git告訴我們r(jià)eadme.txt被修改了揩局,但如果能看看具體修改了什么內(nèi)容,自然是很好的掀虎。比如你休假兩周從國(guó)外回來(lái)凌盯,第一天上班時(shí),已經(jīng)記不清上次怎么修改的readme.txt烹玉,所以驰怎,

需要用git diff這個(gè)命令看看:

如果git status告訴你有文件被修改過(guò),用git diff可以查看修改內(nèi)容


當(dāng)然了二打,在實(shí)際工作中县忌,我們腦子里怎么可能記得一個(gè)幾千行的文件每次都改了什么內(nèi)容,不然要版本控制系統(tǒng)干什么继效。版本控制系統(tǒng)肯定有某個(gè)命令可以告訴我們歷史記錄症杏,在Git中,

git版本回撤

我們用git log命令查看git版本:


$ git log --pretty=oneline

如果嫌輸出信息太多瑞信,看得眼花繚亂的厉颤,可以試試加上--pretty=oneline參數(shù)

首先,Git必須知道當(dāng)前版本是哪個(gè)版本凡简,在Git中逼友,用HEAD表示當(dāng)前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一樣)秤涩,上一個(gè)版本就是HEAD^帜乞,上上一個(gè)版本就是HEAD^^,當(dāng)然往上100個(gè)版本寫(xiě)100個(gè)^比較容易數(shù)不過(guò)來(lái)溉仑,所以寫(xiě)成HEAD~100挖函。


回撤上一個(gè)版本就可以使用git reset命令

$ git reset --hard HEAD^


最新的那個(gè)版本已經(jīng)看不到了!好比你從21世紀(jì)坐時(shí)光穿梭機(jī)來(lái)到了19世紀(jì),想再回去已經(jīng)回不去了怨喘,腫么辦津畸?

辦法其實(shí)還是有的,只要上面的命令行窗口還沒(méi)有被關(guān)掉必怜,你就可以順著往上找啊找啊肉拓,找到那個(gè)最新的commit id是3628164...,于是就可以指定回到未來(lái)的某個(gè)版本:


$ git reset --hard 3628164



現(xiàn)在梳庆,你回退到了某個(gè)版本暖途,關(guān)掉了電腦,第二天早上就后悔了膏执,想恢復(fù)到新版本怎么辦驻售?找不到新版本的commit id怎么辦?

在Git中更米,總是有后悔藥可以吃的欺栗。當(dāng)你用$ git reset --hard HEAD^回退到add distributed版本時(shí),再想恢復(fù)到append GPL征峦,就必須找到append GPL的commit id迟几。Git提供了一個(gè)命令git reflog用來(lái)記錄你的每一次命令

git reflog



HEAD指向的版本就是當(dāng)前版本,因此栏笆,Git允許我們?cè)诎姹镜臍v史之間穿梭类腮,使用命令git reset --hard commit_id。

穿梭前蛉加,用git log可以查看提交歷史蚜枢,以便確定要回退到哪個(gè)版本。

要重返未來(lái)七婴,用git reflog查看命令歷史祟偷,以便確定要回到未來(lái)的哪個(gè)版本察滑。


你可以發(fā)現(xiàn)打厘,Git會(huì)告訴你,git checkout -- file可以丟棄工作區(qū)的修改:

命令git checkout -- readme.txt意思就是贺辰,把readme.txt文件在工作區(qū)的修改全部撤銷(xiāo)户盯,這里有兩種情況:

一種是readme.txt自修改后還沒(méi)有被放到暫存區(qū),現(xiàn)在饲化,撤銷(xiāo)修改就回到和版本庫(kù)一模一樣的狀態(tài)莽鸭;

一種是readme.txt已經(jīng)添加到暫存區(qū)后,又作了修改吃靠,現(xiàn)在硫眨,撤銷(xiāo)修改就回到添加到暫存區(qū)后的狀態(tài)。

總之巢块,就是讓這個(gè)文件回到最近一次git commit或git add時(shí)的狀態(tài)礁阁。

現(xiàn)在巧号,看看readme.txt的文件內(nèi)容:


現(xiàn)在假定是凌晨3點(diǎn),你不但寫(xiě)了一些胡話姥闭,還git add到暫存區(qū)了:

Git同樣告訴我們丹鸿,用命令git reset HEAD file可以把暫存區(qū)的修改撤銷(xiāo)掉(unstage),重新放回工作區(qū):


又到了小結(jié)時(shí)間棚品。

場(chǎng)景1:當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容靠欢,想直接丟棄工作區(qū)的修改時(shí),用命令git checkout -- file铜跑。

場(chǎng)景2:當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容门怪,還添加到了暫存區(qū)時(shí),想丟棄修改锅纺,分兩步薪缆,第一步用命令git reset HEAD file,就回到了場(chǎng)景1伞广,第二步按場(chǎng)景1操作拣帽。

場(chǎng)景3:已經(jīng)提交了不合適的修改到版本庫(kù)時(shí),想要撤銷(xiāo)本次提交嚼锄,參考版本回退一節(jié)减拭,不過(guò)前提是沒(méi)有推送到遠(yuǎn)程庫(kù)。



命令git rm用于刪除一個(gè)文件区丑。如果一個(gè)文件已經(jīng)被提交到版本庫(kù)拧粪,那么你永遠(yuǎn)不用擔(dān)心誤刪,但是要小心沧侥,你只能恢復(fù)文件到最新版本可霎,你會(huì)丟失最近一次提交后你修改的內(nèi)容。


小結(jié)

要關(guān)聯(lián)一個(gè)遠(yuǎn)程庫(kù)宴杀,使用命令git remote add origin git@server-name:path/repo-name.git癣朗;

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

此后旷余,每次本地提交后,只要有必要扁达,就可以使用命令git push origin master推送最新修改正卧;

分布式版本系統(tǒng)的最大好處之一是在本地工作完全不需要考慮遠(yuǎn)程庫(kù)的存在,也就是有沒(méi)有聯(lián)網(wǎng)都可以正常工作跪解,而SVN在沒(méi)有聯(lián)網(wǎng)的時(shí)候是拒絕干活的炉旷!當(dāng)有網(wǎng)絡(luò)的時(shí)候,再把本地提交推送一下就完成了同步,真是太方便了窘行!


$ git remote add origin https://github.com/287291867/DouHui.git

推送到我的遠(yuǎn)程git倉(cāng)庫(kù)

git push -u origin master

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骏啰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子抽高,更是在濱河造成了極大的恐慌判耕,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翘骂,死亡現(xiàn)場(chǎng)離奇詭異壁熄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)碳竟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)草丧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人莹桅,你說(shuō)我怎么就攤上這事昌执。” “怎么了诈泼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵懂拾,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我铐达,道長(zhǎng)岖赋,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任瓮孙,我火速辦了婚禮唐断,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘杭抠。我一直安慰自己脸甘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布偏灿。 她就那樣靜靜地躺著丹诀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪菩混。 梳的紋絲不亂的頭發(fā)上忿墅,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音沮峡,去河邊找鬼。 笑死亿柑,一個(gè)胖子當(dāng)著我的面吹牛邢疙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼疟游,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼呼畸!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起颁虐,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蛮原,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后另绩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體儒陨,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年笋籽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蹦漠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡车海,死狀恐怖笛园,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侍芝,我是刑警寧澤研铆,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站州叠,受9級(jí)特大地震影響蚜印,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜留量,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一窄赋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧楼熄,春花似錦忆绰、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至缕粹,卻和暖如春稚茅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背平斩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工亚享, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绘面。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓欺税,卻偏偏與公主長(zhǎng)得像侈沪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子晚凿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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