一篇文章骇径,教你學(xué)會Git

在日常工作中躯肌,經(jīng)常會用到Git操作。但是對于新人來講破衔,剛上來對Git很陌生清女,操作起來也很懵逼。本篇文章主要針對剛開始接觸Git的新人晰筛,理解Git的基本原理嫡丙,掌握常用的一些命令拴袭。

一、Git工作流程

image.png

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

  • Workspace:工作區(qū)
  • Index / Stage:暫存區(qū)
  • Repository:倉庫區(qū)(或本地倉庫)
  • Remote:遠程倉庫

工作區(qū)

程序員進行開發(fā)改動的地方父泳,是你當前看到的般哼,也是最新的。

平常我們開發(fā)就是拷貝遠程倉庫中的一個分支惠窄,基于該分支進行開發(fā)蒸眠。在開發(fā)過程中就是對工作區(qū)的操作。

暫存區(qū)

.git目錄下的index文件, 暫存區(qū)會記錄git add添加文件的相關(guān)信息(文件名睬捶、大小黔宛、timestamp...),不保存文件實體, 通過id指向每個文件實體擒贸⊥位危可以使用git status查看暫存區(qū)的狀態(tài)。暫存區(qū)標記了你當前工作區(qū)中介劫,哪些內(nèi)容是被git管理的徽惋。

當你完成某個需求或功能后需要提交到遠程倉庫,那么第一步就是通過git add先提交到暫存區(qū)座韵,被git管理险绘。

本地倉庫

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

git commit后同步index的目錄樹到本地倉庫,方便從下一步通過git push同步本地倉庫與遠程倉庫的同步黔帕。

遠程倉庫

遠程倉庫的內(nèi)容可能被分布在多個地點的處于協(xié)作關(guān)系的本地倉庫修改代咸,因此它可能與本地倉庫同步,也可能不同步成黄,但是它的內(nèi)容是最舊的呐芥。

小結(jié)

  1. 任何對象都是在工作區(qū)中誕生和被修改;
  2. 任何修改都是從進入index區(qū)才開始被版本控制奋岁;
  3. 只有把修改提交到本地倉庫思瘟,該修改才能在倉庫中留下痕跡;
  4. 與協(xié)作者分享本地的修改闻伶,可以把它們push到遠程倉庫來共享滨攻。

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

image.png

二霎箍、常用Git命令

image.png

網(wǎng)上找了個圖奇钞,別人整理的一張圖,很全很好漂坏,借來用下景埃。下面詳細解釋一些常用命令。

HEAD

image.png

在掌握具體命令前顶别,先理解下HEAD谷徙。

HEAD,它始終指向當前所處分支的最新的提交點驯绎。你所處的分支變化了完慧,或者產(chǎn)生了新的提交點,HEAD就會跟著改變剩失。

add

image.png

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

git add . 添加當前目錄的所有文件到暫存區(qū)
git add [dir] 添加指定目錄到暫存區(qū)脾歧,包括子目錄
git add [file1] 添加指定文件到暫存區(qū)

commit

image.png

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

git commit -m [message] 提交暫存區(qū)到本地倉庫,message代表說明信息
git commit [file1] -m [message] 提交暫存區(qū)的指定文件到本地倉庫
git commit --amend -m [message] 使用一次新的commit,替代上一次提交

branch

image.png

涉及到協(xié)作芒粹,自然會涉及到分支兄纺,關(guān)于分支,大概有展示分支化漆,切換分支估脆,創(chuàng)建分支,刪除分支這四種操作获三。

git branch 列出所有本地分支
git branch -r 列出所有遠程分支
git branch -a 列出所有本地分支和遠程分支
git branch [branch-name] 新建一個分支旁蔼,但依然停留在當前分支
git checkout -b [branch-name] 新建一個分支,并切換到該分支
git branch --track [branch][remote-branch] 新建一個分支疙教,與指定的遠程分支建立追蹤關(guān)系
git checkout [branch-name] 切換到指定分支棺聊,并更新工作區(qū)
git branch -d [branch-name] 刪除分支
git push origin --delete [branch-name] 刪除遠程分支

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

merge

image.png

merge命令把不同的分支合并起來限佩。如上圖,在實際開放中,我們可能從master分支中切出一個分支祟同,然后進行開發(fā)完成需求作喘,中間經(jīng)過R3,R4,R5的commit記錄,最后開發(fā)完成需要合入master中晕城,這便用到了merge泞坦。

git fetch [remote] merge之前先拉一下遠程倉庫最新代碼
git merge [branch] 合并指定分支到當前分支

一般在merge之后,會出現(xiàn)conflict砖顷,需要針對沖突情況贰锁,手動解除沖突。主要是因為兩個用戶修改了同一文件的同一塊區(qū)域滤蝠。如下圖所示豌熄,需要手動解除。

image.png

rebase

image.png

rebase又稱為衍合物咳,是合并的另外一種選擇锣险。

在開始階段,我們處于new分支上览闰,執(zhí)行git 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復(fù)制代碼

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

      D--------E
     /          \
A---B---C---F----G   test, master復(fù)制代碼

在master執(zhí)行git rebase test际邻,然后得到如下結(jié)果:

A---B---D---E---C'---F'   test, master復(fù)制代碼

可以看到,merge操作會生成一個新的節(jié)點芍阎,之前的提交分開顯示世曾。而rebase操作不會生成新的節(jié)點,是將兩個分支融合成一個線性的提交谴咸。

如果你想要一個干凈的轮听,沒有merge commit的線性歷史樹,那么你應(yīng)該選擇git rebase
如果你想保留完整的歷史記錄岭佳,并且想要避免重寫commit history的風險血巍,你應(yīng)該選擇使用git merge

reset

image.png

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

git reset —soft [commit] 只改變提交點述寡,暫存區(qū)和工作目錄的內(nèi)容都不改變
git reset —mixed [commit] 改變提交點柿隙,同時改變暫存區(qū)的內(nèi)容
git reset —hard [commit] 暫存區(qū)、工作區(qū)的內(nèi)容都會被修改到與提交點完全一致的狀態(tài)
git reset --hard HEAD 讓工作區(qū)回到上次提交時的狀態(tài)

revert

image.png

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

revert與reset的區(qū)別

image.png
  • 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

上傳本地倉庫分支到遠程倉庫分支还蹲,實現(xiàn)同步爹耗。

git push [remote][branch] 上傳本地指定分支到遠程倉庫
git push [remote] --force 強行推送當前分支到遠程倉庫,即使有沖突
git push [remote] --all 推送所有分支到遠程倉庫

其他命令

git status 顯示有變更的文件
git log 顯示當前分支的版本歷史
git diff 顯示暫存區(qū)和工作區(qū)的差異
git diff HEAD 顯示工作區(qū)與當前分支最新commit之間的差異
git cherry-pick [commit] 選擇一個commit谜喊,合并進當前分支

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


[轉(zhuǎn)載]
作者:Ruheng
鏈接:https://juejin.im/post/599e14875188251240632702
來源:掘金

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斗遏,一起剝皮案震驚了整個濱河市山卦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诵次,老刑警劉巖账蓉,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逾一,居然都是意外死亡铸本,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門嬉荆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來归敬,“玉大人,你說我怎么就攤上這事⊥艏耄” “怎么了椅亚?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長舱污。 經(jīng)常有香客問我呀舔,道長,這世上最難降的妖魔是什么扩灯? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任媚赖,我火速辦了婚禮,結(jié)果婚禮上珠插,老公的妹妹穿的比我還像新娘惧磺。我一直安慰自己,他們只是感情好捻撑,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布磨隘。 她就那樣靜靜地躺著,像睡著了一般顾患。 火紅的嫁衣襯著肌膚如雪番捂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天江解,我揣著相機與錄音设预,去河邊找鬼。 笑死犁河,一個胖子當著我的面吹牛鳖枕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呼股,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼耕魄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了彭谁?” 一聲冷哼從身側(cè)響起吸奴,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缠局,沒想到半個月后则奥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡狭园,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年读处,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唱矛。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡罚舱,死狀恐怖井辜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情管闷,我是刑警寧澤粥脚,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站包个,受9級特大地震影響刷允,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碧囊,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一树灶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧糯而,春花似錦天通、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谜洽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吴叶,已是汗流浹背阐虚。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蚌卤,地道東北人实束。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像逊彭,于是被迫代替她去往敵國和親咸灿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

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

  • 在日常工作中,經(jīng)常會用到Git操作囊榜。但是對于新人來講审胸,剛上來對Git很陌生,操作起來也很懵逼卸勺。本篇文章主要針對剛開...
    Ruheng閱讀 44,716評論 55 2,175
  • 本文轉(zhuǎn)載于掘金Ruheng曙求,總結(jié)非常好碍庵,故不再重復(fù)造輪子映企。 在日常工作中,經(jīng)常會用到Git操作静浴。但是對于新人來講堰氓,...
    蘇州丸子閱讀 40,755評論 27 2,122
  • Git是目前最流行的版本管理系統(tǒng),也是最先進的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,705評論 1 17
  • 昨天晚上看到別人的《靈異第六感》影評马绝,頓時被吸引豆赏。剛剛看完影片,被感動的稀里糊涂的富稻。主演布魯斯威利斯和海利 ...
    糖人人閱讀 674評論 0 2
  • 盛火燎云連日雨掷邦,三千里車逐流星。有誰記椭赋,少小伶仃抚岗。八十載手足,只向夜里蚊蠅哪怔。落花有情水難駐宣蔚,晚風無意系窗欞。去歲青...
    永不老去的青春閱讀 602評論 0 2