git圖解:代碼區(qū)域總結(jié)

git代碼區(qū)間_1.jpg

本文背景扶檐,在實際項目中使用git已有一年多凶杖,發(fā)現(xiàn)不少同事雖然會使用常用git指令,但并不理解每個指令對應(yīng)的作用原理款筑。今天靜下心總結(jié)下git 的基本理解:代碼的存在區(qū)域智蝠;本文以實際項目出發(fā),理清使用git過程中奈梳,代碼的遷徙流程杈湾。

git跟傳統(tǒng)的代碼管理器(如:svn)不同, 主要區(qū)別在于git多了個本地倉庫以及緩存區(qū)攘须,所以即使無法聯(lián)網(wǎng)也一樣能提交代碼毛秘。術(shù)語解釋:

  • 工作區(qū)間: 即我們創(chuàng)建的工程文件, 在編輯器可直觀顯示阻课;
  • 緩存區(qū): 只能通過git GUI或git shell 窗口顯示叫挟,提交代碼、解決沖突的中轉(zhuǎn)站限煞;
  • 本地倉庫: 只能在git shell 窗口顯示抹恳,連接本地代碼跟遠(yuǎn)程代碼的樞紐,不能聯(lián)網(wǎng)時本地代碼可先提交至該處署驻;
  • 遠(yuǎn)程倉庫: 即保存我們代碼的服務(wù)器奋献,本文以公共版本控制系統(tǒng):github為例,登錄github賬號后可直觀顯示旺上;

接下來瓶蚂, 我們以三個實際操作的例子講解git的日常,代碼如何在上述4個區(qū)域流動宣吱。

1.提交 代碼到遠(yuǎn)程倉庫:

首先在本地工作區(qū)間創(chuàng)建一個新工程:testGit窃这,然后在項目里新建一個README.md, 工作區(qū)間的工程如下:

git代碼區(qū)間_2.jpg

遠(yuǎn)程倉庫創(chuàng)建一新工程征候,具體操作參見如何在window上把你的項目提交到github

git代碼區(qū)間_3.jpg

將該新建的工程提交至遠(yuǎn)程倉庫杭攻,關(guān)鍵的git 指令如下:

git init
git add README.md
git commit -m "首次提交代碼"
git remote add origin https://github.com/wteam-xq/testGit.git
git push -u origin master

指令解釋:
git init 表示在當(dāng)前的項目目錄中生成本地的git管理祟敛;
git add README.md 將“README.md”文件保存至緩存區(qū),實際開發(fā)中一般使用 git add -A兆解,使用-A:將新增馆铁、刪除、修改的文件改動全保存至緩存區(qū)锅睛;
git commit -m "first commit" 將代碼從緩存區(qū)保存至本地倉庫埠巨,實際開發(fā)中一般使用git commit -am "說明的文字","-a"即為“all”將緩存區(qū)所有改動保存至本地倉庫现拒;
git remote add origin https://github.com/wteam-xq/testGit.git本地倉庫與指定的遠(yuǎn)程倉庫創(chuàng)建 聯(lián)系辣垒;
push -u origin master本地倉庫代碼推送至遠(yuǎn)程倉庫,實際開發(fā)中 該指令后需要輸入github 賬號以及密碼具练。(首次提交注意別遺漏-u指定默認(rèn)主機(jī))

以上指令正常執(zhí)行后乍构, 本地倉庫的代碼就提交到遠(yuǎn)程倉庫了:


git代碼區(qū)間_4.jpg

原理圖如下:

git代碼區(qū)間_5_2.jpg

2.將遠(yuǎn)程倉庫代碼更新到本地:

首先我們新建一文件夾:copyTestGit,進(jìn)入該文件夾后使用git 指令:

git clone https://github.com/wteam-xq/testGit

指令執(zhí)行完畢后扛点, 就在該文件夾下生成一份副本啦(相當(dāng)于多人協(xié)作時另一臺設(shè)備上的工程文件)哥遮,原理圖如下:

git代碼區(qū)間_6.jpg

接下來, 討論git pull陵究、 git fetch 眠饮、 git merge的關(guān)系

先拋簡單結(jié)論:

git pull
#等同于下面命令
git fetch
git merge

實際項目:我們在testGit工程中修改README.md,然后更新、提交下代碼 執(zhí)行以下git 指令(日常使用中會用git status看看是否有文件需要git add):

git commit -am 'update readme.md'
git push origin master

原理圖如下:

git代碼區(qū)間_7.jpg

提交成功:
git代碼區(qū)間_8.jpg

遠(yuǎn)程倉庫代碼更新后铜邮, 我們進(jìn)入另一本地倉庫:copyTestGit\testGit仪召,將遠(yuǎn)程倉庫的代碼更新至該本地倉庫。
在該目錄下輸入以下git指令:

git fetch 
git merge origin/master

日常使用圖方便一般都是直接:

git pull

以上指令的詳細(xì)探討請看 少用pull,多用fetch 和 merge
注意: 本文注重git工作原理圖不考慮多分支情況松蒜,且使用了git clone所以副本工程已經(jīng)跟主分支建立了追蹤關(guān)系扔茅,所以'pull' 'fetch' 后都不接分支代碼 )
以上指令區(qū)別的原理圖:

git代碼區(qū)間_9.jpg

3.更新到本地倉庫時, 出現(xiàn)沖突秸苗,解決沖突召娜;
3.1 放棄本地修改
3.2 解決沖突后提交本地修改

首先, 我們先重現(xiàn)下出現(xiàn)沖突的情況惊楼; 在testGit目錄下先修改README.md文件第三行玖瘸,hello word 修正為 hello world:


git代碼區(qū)間_10.jpg

提交該修改到遠(yuǎn)程倉庫(提交細(xì)節(jié)參照前述步驟):


git代碼區(qū)間_11.jpg

然后, 在副本工程copyTestGit/testGit 目錄下也修改README.md文件第三行檀咙,hello word 修正為 hello world2:


git代碼區(qū)間_12.jpg

現(xiàn)在副本工程修改完了代碼打算提交雅倒,提交前先將遠(yuǎn)程倉庫最新代碼更新至本地倉庫, 慣例使用指令:

git pull

指令執(zhí)行之后會發(fā)現(xiàn)以下沖突提示:

git代碼區(qū)間_13.jpg

出現(xiàn)以上提示, 說明本次更新代碼失敾】伞蔑匣;主要在于本地工作區(qū)間遠(yuǎn)程倉庫的新代碼沖突了, 圖解如下:

git代碼區(qū)間_14.jpg

接下來,有兩種方式處理沖突: 放棄本地修改解決沖突后提交本地修改

3.1 放棄本地修改

放棄本地修改意味著將遠(yuǎn)程倉庫的代碼完全覆蓋本地倉庫以及本地工作區(qū)間殖演, 如果對git的指令不熟悉那大可以將本地工程完全刪除氧秘,然后再重新拷貝一次(git clone)年鸳。

當(dāng)然趴久, git如此強(qiáng)大沒必要用這么原始的方法,可以讓本地倉庫代碼覆蓋本地修改搔确,然后更新遠(yuǎn)程倉庫代碼彼棍;

本地倉庫代碼完全覆蓋本地工作區(qū)間,具體指令如下:

git checkout head .

(注意: 別遺漏 "head" 后的 " ." )
然后更新遠(yuǎn)程倉庫的代碼就不會出現(xiàn)沖突了:

git pull

原理圖如下:

git代碼區(qū)間_18.jpg

3.2 解決沖突后提交本地修改

覆蓋本地代碼解決沖突方法適合不太懂git的菜鳥膳算, 像我這種git老鳥(其實并不是(¬_¬))當(dāng)然用更高級的git指令解決沖突座硕。
除了上述說的4個區(qū)間外, 其實git還有第5個區(qū):

16_1.png

(關(guān)于git stash詳見 本人 testGit日志

緩存區(qū) 一樣涕蜂, 工作現(xiàn)場是 獨(dú)立存在于本地倉庫华匾、工作區(qū):

16.png

解決沖突后提交本地修改的思路大概如下:
將本地修改的代碼放在工作現(xiàn)場, 然后從遠(yuǎn)程倉庫拉取最新代碼机隙,拉取成功后再從工作現(xiàn)場將修改的代碼取出蜘拉, 這樣最新代碼跟本地修改的代碼就會混雜在一起, 手工解決沖突后有鹿, 提交解決沖突后的代碼旭旭。
原理圖:

17.png
18.png

對應(yīng)到我們實際項目中, 進(jìn)入 copyTestGit/testGit 執(zhí)行指令git pull出現(xiàn) (重回到上述沖突場景)

error: Your local changes to the following files would be overwritten by merge:
        README.md
Please, commit your changes or stash them before you can merge.
Aborting

將本地修改放入工作現(xiàn)場(成功后本地工作區(qū)間的代碼跟本地倉庫代碼會同步)葱跋, 具體指令:

git stash 

遠(yuǎn)程倉庫獲取最新代碼持寄,具體指令:

git pull

然后, 取出本地修改的代碼娱俺, 具體指令:

git stash pop

然后稍味, git 自動合并沖突失敗, 沖突的代碼就很清晰的展現(xiàn)在我們面前了:

git代碼區(qū)間_19.jpg
git代碼區(qū)間_20.jpg

手工解決沖突:

git代碼區(qū)間_21.jpg

告訴git荠卷, 這個文件(README.md)的沖突 已經(jīng)解決:

git add README.md

提交代碼(細(xì)節(jié)參考前述流程):

git commit -am '終于解決沖突啦模庐!'
git push origin master

于是本地有沖突的代碼就提交成功啦!

git代碼區(qū)間_22.jpg

后記:

以上很多git指令適合在無圖形化界面的linux中使用(例如:阿里云服務(wù)器操作git)僵朗, 實際開發(fā)中當(dāng)然是用圖形化界面解決!
例如: git status在window 中對應(yīng)的就是右鍵->git GUI

git代碼區(qū)間_15.jpg

解決沖突之覆蓋本地代碼對應(yīng)的是: 工程目錄下tortoiseGit(git 小烏龜) “Revert” :

git代碼區(qū)間_16.jpg

解決沖突之解決沖突后提交本地修改對應(yīng)的是: 手工合并沖突代碼后赖欣,工程目錄下tortoiseGit(git 小烏龜) “resolve” :

git代碼區(qū)間_17.jpg

參考文章:
1.Git版本控制與工作流
2.圖解git項目代碼
3.如何在window上把你的項目提交到github
4.阮一峰:git 遠(yuǎn)程操作詳解
5.少用pull,多用fetch 和 merge
相關(guān)文章:
Git 圖解(2):代碼回退
Git 圖解(3):分支操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市验庙,隨后出現(xiàn)的幾起案子顶吮,更是在濱河造成了極大的恐慌,老刑警劉巖粪薛,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悴了,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)湃交,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門熟空,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人搞莺,你說我怎么就攤上這事息罗。” “怎么了才沧?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵迈喉,是天一觀的道長。 經(jīng)常有香客問我温圆,道長挨摸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任岁歉,我火速辦了婚禮得运,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锅移。我一直安慰自己熔掺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布帆啃。 她就那樣靜靜地躺著瞬女,像睡著了一般。 火紅的嫁衣襯著肌膚如雪努潘。 梳的紋絲不亂的頭發(fā)上诽偷,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機(jī)與錄音疯坤,去河邊找鬼报慕。 笑死,一個胖子當(dāng)著我的面吹牛压怠,可吹牛的內(nèi)容都是我干的眠冈。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼菌瘫,長吁一口氣:“原來是場噩夢啊……” “哼蜗顽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雨让,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤雇盖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后栖忠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體崔挖,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贸街,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了狸相。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薛匪。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖脓鹃,靈堂內(nèi)的尸體忽然破棺而出逸尖,到底是詐尸還是另有隱情,我是刑警寧澤将谊,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布冷溶,位于F島的核電站渐白,受9級特大地震影響尊浓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纯衍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一栋齿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧襟诸,春花似錦瓦堵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陷揪,卻和暖如春惋鸥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悍缠。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工卦绣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人飞蚓。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓滤港,卻偏偏與公主長得像,于是被迫代替她去往敵國和親趴拧。 傳聞我的和親對象是個殘疾皇子溅漾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

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

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,652評論 4 54
  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,643評論 9 163
  • 聲明:這篇文章來源于廖雪峰老師的官方網(wǎng)站著榴,我僅僅是作為學(xué)習(xí)之用 Git簡介 Git是什么添履? Git是目前世界上最先...
    橫渡閱讀 3,946評論 3 27
  • 胡連海十月份讀書第15次打卡。讀的書是兄渺。再被狐貍騙一次的和平豹189頁到200頁缝龄。講述的是作者去鬼河挖恐龍蛋化石汰现,...
    五三胡連海閱讀 178評論 0 0
  • 有一個好消息瞎饲。前幾天,老徐在微信群里興奮地說炼绘,親愛的們我的復(fù)試通知下來了嗅战,妥妥的第三,我得準(zhǔn)備準(zhǔn)備去北京了俺亮。我看到...
    二夏_Joanna閱讀 321評論 0 3