關(guān)于git

在日常工作中,經(jīng)常會用到Git操作筐乳。但是對于新人來講歌殃,剛上來對Git很陌生,操作起來也很懵逼蝙云。本篇文章主要針對剛開始接觸Git的新人氓皱,理解Git的基本原理,掌握常用的一些命令勃刨。

一波材、Git工作流程

以上包括一些簡單而常用的命令,但是先不關(guān)心這些身隐,先來了解下面這4個專有名詞廷区。

Workspace:工作區(qū)

Index / Stage:暫存區(qū)

Repository:倉庫區(qū)(或本地倉庫)

Remote:遠(yuǎn)程倉庫

工作區(qū)

程序員進行開發(fā)改動的地方,是你當(dāng)前看到的抡医,也是最新的躲因。

平常我們開發(fā)就是拷貝遠(yuǎn)程倉庫中的一個分支,基于該分支進行開發(fā)忌傻。在開發(fā)過程中就是對工作區(qū)的操作舆瘪。

暫存區(qū)

.git目錄下的index文件, 暫存區(qū)會記錄git add添加文件的相關(guān)信息(文件名崭别、大小、timestamp...),不保存文件實體, 通過id指向每個文件實體喊递。可以使用git status查看暫存區(qū)的狀態(tài)使鹅。暫存區(qū)標(biāo)記了你當(dāng)前工作區(qū)中篇亭,哪些內(nèi)容是被git管理的。

當(dāng)你完成某個需求或功能后需要提交到遠(yuǎn)程倉庫宙刘,那么第一步就是通過git add先提交到暫存區(qū)苍姜,被git管理。

本地倉庫

保存了對象被提交 過的各個版本悬包,比起工作區(qū)和暫存區(qū)的內(nèi)容衙猪,它要更舊一些。

git commit后同步index的目錄樹到本地倉庫,方便從下一步通過git push同步本地倉庫與遠(yuǎn)程倉庫的同步垫释。

遠(yuǎn)程倉庫

遠(yuǎn)程倉庫的內(nèi)容可能被分布在多個地點的處于協(xié)作關(guān)系的本地倉庫修改丝格,因此它可能與本地倉庫同步,也可能不同步棵譬,但是它的內(nèi)容是最舊的显蝌。

小結(jié)

任何對象都是在工作區(qū)中誕生和被修改;

任何修改都是從進入index區(qū)才開始被版本控制订咸;

只有把修改提交到本地倉庫曼尊,該修改才能在倉庫中留下痕跡;

與協(xié)作者分享本地的修改算谈,可以把它們push到遠(yuǎn)程倉庫來共享涩禀。

下面這幅圖更加直接闡述了四個區(qū)域之間的關(guān)系,可能有些命令不太清楚然眼,沒關(guān)系艾船,下部分會詳細(xì)介紹。

二高每、常用Git命令

網(wǎng)上找了個圖屿岂,別人整理的一張圖,很全很好鲸匿,借來用下爷怀。下面詳細(xì)解釋一些常用命令。

HEAD

在掌握具體命令前带欢,先理解下HEAD运授。

HEAD,它始終指向當(dāng)前所處分支的最新的提交點乔煞。你所處的分支變化了吁朦,或者產(chǎn)生了新的提交點,HEAD就會跟著改變渡贾。

add

add相關(guān)命令很簡單逗宜,主要實現(xiàn)將工作區(qū)修改的內(nèi)容提交到暫存區(qū)空骚,交由git管理熬甚。

git add .添加當(dāng)前目錄的所有文件到暫存區(qū)

git add 添加指定目錄到暫存區(qū)冲簿,包括子目錄

git add 添加指定文件到暫存區(qū)

commit

commit相關(guān)命令也很簡單,主要實現(xiàn)將暫存區(qū)的內(nèi)容提交到本地倉庫,并使得當(dāng)前分支的HEAD向后移動一個提交點。

git commit -m 提交暫存區(qū)到本地倉庫,message代表說明信息

git commit -m 提交暫存區(qū)的指定文件到本地倉庫

git commit --amend -m 使用一次新的commit栅受,替代上一次提交

branch

涉及到協(xié)作,自然會涉及到分支而芥,關(guān)于分支,大概有展示分支歌逢,切換分支趋翻,創(chuàng)建分支,刪除分支這四種操作讨惩。

git branch列出所有本地分支

git branch -r列出所有遠(yuǎn)程分支

git branch -a列出所有本地分支和遠(yuǎn)程分支

git branch 新建一個分支荐捻,但依然停留在當(dāng)前分支

git checkout -b 新建一個分支处面,并切換到該分支

git branch --track 新建一個分支,與指定的遠(yuǎn)程分支建立追蹤關(guān)系

git checkout 切換到指定分支,并更新工作區(qū)

git branch -d 刪除分支

git push origin --delete 刪除遠(yuǎn)程分支

關(guān)于分支的操作雖然比較多野揪,但都比較簡單好記访忿。

merge

merge命令把不同的分支合并起來斯稳。如上圖,在實際開放中挣惰,我們可能從master分支中切出一個分支卧斟,然后進行開發(fā)完成需求通熄,中間經(jīng)過R3,R4,R5的commit記錄唆涝,最后開發(fā)完成需要合入master中唇辨,這便用到了merge廊酣。

git fetch merge之前先拉一下遠(yuǎn)程倉庫最新代碼

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

一般在merge之后亡驰,會出現(xiàn)conflict栗恩,需要針對沖突情況,手動解除沖突。主要是因為兩個用戶修改了同一文件的同一塊區(qū)域市咆。如下圖所示,需要手動解除芒篷。

rebase

rebase又稱為衍合,是合并的另外一種選擇愉耙。

在開始階段猜谚,我們處于new分支上坚芜,執(zhí)行g(shù)it rebase dev,那么new分支上新的commit都在master分支上重演一遍,最后checkout切換回到new分支。這一點與merge是一樣的芜果,合并前后所處的分支并沒有改變旱爆。git rebase dev房待,通俗的解釋就是new分支想站在dev的肩膀上繼續(xù)下去框冀。rebase也需要手動解決沖突温数。

rebase與merge的區(qū)別

現(xiàn)在我們有這樣的兩個分支,test和master,提交如下:

D---E test

/

A---B---C---F master

在master執(zhí)行g(shù)it merge test,然后會得到如下結(jié)果:

D--------E

/? ? ? ? ? \

A---B---C---F----G? test, master

在master執(zhí)行g(shù)it rebase test猜煮,然后得到如下結(jié)果:

A---B---D---E---C'---F'? test, master

可以看到次员,merge操作會生成一個新的節(jié)點,之前的提交分開顯示王带。而rebase操作不會生成新的節(jié)點淑蔚,是將兩個分支融合成一個線性的提交。

如果你想要一個干凈的愕撰,沒有merge commit的線性歷史樹刹衫,那么你應(yīng)該選擇git rebase

如果你想保留完整的歷史記錄,并且想要避免重寫commit history的風(fēng)險搞挣,你應(yīng)該選擇使用git merge

reset

reset命令把當(dāng)前分支指向另一個位置带迟,并且相應(yīng)的變動工作區(qū)和暫存區(qū)。

git reset —soft 只改變提交點囱桨,暫存區(qū)和工作目錄的內(nèi)容都不改變

git reset —mixed 改變提交點仓犬,同時改變暫存區(qū)的內(nèi)容

git reset —hard 暫存區(qū)、工作區(qū)的內(nèi)容都會被修改到與提交點完全一致的狀態(tài)

git reset --hard HEAD讓工作區(qū)回到上次提交時的狀態(tài)

revert

git revert用一個新提交來消除一個歷史提交所做的任何修改舍肠。

revert與reset的區(qū)別

git revert是用一次新的commit來回滾之前的commit搀继,git reset是直接刪除指定的commit窘面。

在回滾這一操作上看,效果差不多叽躯。但是在日后繼續(xù)merge以前的老版本時有區(qū)別财边。因為git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch時点骑,導(dǎo)致這部分改變不會再次出現(xiàn),減少沖突黑滴。但是git reset是之間把某些commit在某個branch上刪除憨募,因而和老的branch再次merge時,這些被回滾的commit應(yīng)該還會被引入跷跪,產(chǎn)生很多沖突馋嗜。關(guān)于這一點,不太理解的可以看這篇文章吵瞻。

git reset 是把HEAD向后移動了一下,而git revert是HEAD繼續(xù)前進甘磨,只是新的commit的內(nèi)容和要revert的內(nèi)容正好相反橡羞,能夠抵消要被revert的內(nèi)容。

push

上傳本地倉庫分支到遠(yuǎn)程倉庫分支济舆,實現(xiàn)同步卿泽。

git push 上傳本地指定分支到遠(yuǎn)程倉庫

git push --force強行推送當(dāng)前分支到遠(yuǎn)程倉庫,即使有沖突

git push --all推送所有分支到遠(yuǎn)程倉庫

其他命令

git status顯示有變更的文件

git log顯示當(dāng)前分支的版本歷史

git diff顯示暫存區(qū)和工作區(qū)的差異

git diff HEAD顯示工作區(qū)與當(dāng)前分支最新commit之間的差異

git cherry-pick 選擇一個commit滋觉,合并進當(dāng)前分支

以上就是關(guān)于Git的一些常用命令及詳細(xì)闡述签夭,相信能對Git有一個初步的認(rèn)識。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椎侠,一起剝皮案震驚了整個濱河市第租,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌我纪,老刑警劉巖慎宾,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浅悉,居然都是意外死亡趟据,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門术健,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汹碱,“玉大人,你說我怎么就攤上這事荞估】却伲” “怎么了稚新?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長等缀。 經(jīng)常有香客問我枷莉,道長,這世上最難降的妖魔是什么尺迂? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任笤妙,我火速辦了婚禮,結(jié)果婚禮上噪裕,老公的妹妹穿的比我還像新娘蹲盘。我一直安慰自己,他們只是感情好膳音,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布召衔。 她就那樣靜靜地躺著,像睡著了一般祭陷。 火紅的嫁衣襯著肌膚如雪苍凛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天兵志,我揣著相機與錄音醇蝴,去河邊找鬼。 笑死想罕,一個胖子當(dāng)著我的面吹牛悠栓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播按价,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼惭适,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了楼镐?” 一聲冷哼從身側(cè)響起癞志,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸠蚪,沒想到半個月后今阳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡茅信,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年盾舌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蘸鲸。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡妖谴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情膝舅,我是刑警寧澤嗡载,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站仍稀,受9級特大地震影響洼滚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜技潘,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一遥巴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧享幽,春花似錦铲掐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奔坟,卻和暖如春携栋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咳秉。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工刻两, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人滴某。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像滋迈,于是被迫代替她去往敵國和親霎奢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

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

  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,471評論 1 26
  • 毫不夸張的說,100%的iOS開發(fā)者都知道這個庫. 有時候會有去讀大牛源碼的沖動,但是對于一個新手來說,直接上手去...
    飛魚非魚會飛閱讀 427評論 2 11
  • 生物鏈的事情一直在困擾著辰哥幕侠。 昨天傍晚回家時看到樓下的三只流浪貓碍彭。夏秋之間時它們還是半大小貓庇忌,現(xiàn)在已經(jīng)是成年貓的...
    后知后覺的july閱讀 156評論 0 0
  • 在 JavaScript 操作 DOM 的過程中我們可能需要經(jīng)常獲取一個元素的大小疏橄,在處理鼠標(biāo)事件的時候可能需要知...
    ghwaphon閱讀 614評論 0 1
  • 我得了一種 一進廁所 關(guān)上門 就控制不住想哭出來 的病
    翮笙閱讀 139評論 0 0