Git 相關

Git 是 分布式版本管理工具炼蹦。因為這里在開發(fā)后臺時候使用逮壁,所以寫在后臺開發(fā)相關的分類下颓遏。


1. 簡介

Git 是最先進的分布式版本管理工具徐矩。具體用起來就像下圖這樣∪保可以看到滤灯,對于每一個版本,都會有修改的具體說明遥皂,這樣一來力喷,方便我們進行版本控制、切換等演训。


Git 最終效果圖

2. 使用

安裝完成就可以使用了弟孟。
這里我在 windows 下使用 git。其實最好還是在 linux 下來用样悟。
word 文件作為二進制的文件拂募,不能被 Git 跟蹤庭猩。

2.1 建立版本庫
git init      // 初始化 版本庫 命令

在相應的目錄下,使用 git init 命令陈症“可以看到在對應的目錄下生成了 一個 .git 隱藏文件,這里面寫的就是文件版本管理控制的相關信息录肯,不能被篡改(所以才是隱藏的)趴腋。

2.2 添加文件到版本庫
git add [FileName1]
git add [FileName2]      // 添加 多個文件
git commit -m "[Description]"   // 提交。 -m 后面是本次提交 的 說明

這里论咏,建立一個 txt 文件优炬,寫入 兩行 文字,然后add 和 commit


使用結(jié)果圖
2.3 版本回退

這里修改一哈 test.txt 文件厅贪,在第二行最后加入 BEST蠢护,然后 使用 git status 命令查看倉庫狀態(tài)⊙蹋可以看到葵硕,當前 test.txt 被修改,但是還沒有提交贯吓。

倉庫狀態(tài)

如果我們要看 改了 什么內(nèi)容懈凹,使用 git diff 命令⌒觯可以看到蘸劈,紅色哪一行代表的是更改之前版本,綠色是更改之后的尊沸,所以是在那一句后面 加了 BEST威沫。
查看文件 diff

之后進行提交。
提交更改后版本

之后查看一下 status 洼专,可以看到 working tree clean.
提交后查看 status

再提交一個新的版本棒掠。
這時候看一下歷史版本,使用

git log //   --pretty=oneline 
git 日志

這時候可以看到我們一共提交了3個版本的文檔屁商,對應的有 ID(使用哈希加密算法算出來的一大串數(shù)字烟很,為了在分布式工作時候不會產(chǎn)生沖突)、備注等±猓現(xiàn)在我們想要把版本回退到 "append REEDIT" 的版本雾袱。
Git 用 HEAD 表示當前的版本,上一個版本就是 HEAD^官还,依次類推芹橡,HEAD~100

git reset --hard HEAD^  // 回退到上一個版本
回退到上一個版本

版本回退后的 log

這時候還是可以到第三個版本的。只需要找到第三個版本的 ID 號即可望伦。

git reflog  // 記錄每一次命令
reflog 查找歷史命令

3. 相關知識

3.1 工作區(qū)和暫存區(qū)

工作區(qū)和暫存區(qū)示意圖

使用 git add 命令就是把 工作區(qū) 添加到 暫存區(qū)林说;
使用 git commit 命令就是把 暫存區(qū)所有的文件添加到當前分支煎殷。

仍然是之前的多次 add , 一次 commit 的關系。

3.2 管理修改

這里要明白一個概念就是說 Git 是管理的修改信息腿箩,而不是直接管理文件的豪直。所以如果執(zhí)行 修改1--> add 1 -->修改2-->commit,這個時候可以看到只是保存了 修改1 對應的內(nèi)容珠移。

3.3 撤銷修改
git checkout -- [FILENAME]    //  用 版本庫 里 的版本 替換 工作區(qū) 的版本弓乙。

這里有兩種情況:
一種是 沒有 add到 暫存區(qū),這時候撤銷就是 回到 .git 版本庫中的版本
一種是 沒有 commit 之前又 進行了修改剑梳,這時候撤銷就是 回到 暫存區(qū) 的狀態(tài)唆貌。 ( 暫存區(qū)也是版本庫中的)
總之就是 回到 git commit 或者 git add 的 最近一次有記錄的版本。


git reset HEAD test.txt   //  可以把 暫存區(qū) 的 test.txt 退回到 工作區(qū)

之前說的是版本回退用 git reset HEAD --hard 命令垢乙。 這里也可以 進行回退工作。


git rm [FILENAME] 用來刪除 .git 版本庫中的文件

這里的情景是你手動在文件目錄中刪除了 test.txt 文件语卤,然后可以查看 status 看到其文件被刪除追逮,但是這個時候在版本庫中還是有 這個文件的,為了做到對應粹舵,用 git rm 命令刪除版本庫中的文件钮孵。

4. 遠程倉庫

4.1 關聯(lián)遠程倉庫

這一部分是最常用的了。
這里用本地倉庫來關聯(lián) github 上面的遠程倉庫眼滤。
首先申請一個 github 的賬號巴席,然后 新建一個 repository。
這里本地關聯(lián)線上倉庫需要 SSH key 用于安全驗證诅需,向 github 證明是你自己進行上傳漾唉。所以需要首先配置一下 SSH key 相關。在本地 配置一個 SSH key堰塌,然后在 github 的賬號設置里面把 本地的 SSH key 公鑰寫進去赵刑。
windows 下 shift+右鍵 打開 git bash. 然后 ssh-keygen -t rsa -C "[EmailAddr]" 就生成了 SSH keys. 在 Windows 下就是 c/users/username/.ssh 目錄下 就會有 SSH keys 配置文件。id_rsa 是私鑰场刑,id_rsa.pub是公鑰般此。


SSH keys

然后進行關聯(lián)。這里 git remote add [RemoteRepName] [RemoteAddr]牵现。默認用了 origin 铐懊,一般看到這個 origin 都知道是遠程倉庫。


關聯(lián)倉庫

然后可以 push 一哈瞎疼。push 命令就是把本地倉庫的指定分支都 push 到線上倉庫科乎。可以看到這里的 git push origin master 把本地 master 分支 push 到 origin.
push

可以看到線上的 Github 已經(jīng)有了
線上倉庫
4.2 分支

分支就好像是在 master 之前跑的一點的一個進度丑慎。如果你在開發(fā)工程喜喂,自己寫的代碼還沒有確定是萬無一失的瓤摧,就需要一個分支,先存下來玉吁,而這個分支不會影響 master 中的代碼照弥。


分支示意圖

我們看一下具體的例子。
在線上建立一個 名為 gitskills 倉庫进副。然后 git clone 下來这揣。
創(chuàng)建一個 dev 分支

git branch dev   // 創(chuàng)建
git checkout dev   // 切換

然后 git branch 查看分支。帶 * 的是當前分支


查看分支

然后更改 readme.md影斑,之后提交更改给赞。


在dev分支下做更改

之后切換到 master 分支,發(fā)現(xiàn)在 dev 分支里面做的更改矫户,已經(jīng)看不到了片迅。說明 dev 分支和 master 分支是獨立的。
分支相互獨立

現(xiàn)在合并分支皆辽,可以看到柑蛇,dev 分支被合并到 master 分支,里面的更改是可見的了驱闷。

git merge [BranchName]   #合并分支到當前分支耻台。
合并分支

分支合并之后,刪除之前的分支空另,世界又清凈整潔了盆耽。


刪除分支

解決沖突
建立一個 feature1 分支,然后在該分支下 編輯 readme.md 之后提交扼菠;然后在 master 分支下也編輯 提交摄杂。兩次編輯的內(nèi)容不同。這時候 merge 就會產(chǎn)生 conflict

兩個分支同時編輯產(chǎn)生 conflict

這時候查看 文件娇豫〕捉看到了不同的地方,然后手動 更改冯痢。
手動清除 conflict

之后再提交氮昧,可以看到 conf 解決了,合并成功了浦楣⌒浞剩可以刪除 feature1 分支了。
沖突解決后提交

git log --graph 可以查看分支合并圖
分支合并圖

no-ff 模式合并

直接用 merge 都是普通合并模式振劳,采用 fast-foward 方式合并椎组。如果加參數(shù) --no-ff 則是 recursive 方式合并。
這種合并方式要提交一個新的 commit 历恐,所以要加一個 -m 參數(shù)寸癌。


no-ff 合并分支

no-ff分支圖

ff 分支圖

no-ff 和普通合并的區(qū)別在于专筷,no-ff 方式可以保留分支歷史。


區(qū)別
分支策略

一張圖說明分支策略蒸苇。即 master 只用來做新版本發(fā)布磷蛹,開發(fā)都在 dev,每個人又有自己的分支溪烤。


分支策略圖

5. 常用操作

add所有變化
git push  #   自然要求是有 remote 倉庫的味咳。 這個時候不用指定分支,直接是之前 clone 的分支

git commit 操作之后會自動生成一個版本序列號檬嘀。然后 git push 把本地倉庫的版本序列號同步到遠程倉庫

git clone # 將遠程倉庫 clone 下來

這個操作會自動和被克隆的倉庫 remote 連接槽驶。

git fetch  

首先要了解 FETCH_HEAD:是一個版本鏈接文件,記錄在 .git/ 目錄下鸳兽,記錄著 目前已經(jīng)從遠程倉庫取下來的分支的末端版本(即取的時候的最新版本)掂铐。
而 git fetch 命令就是 更新遠程倉庫中包含分支的最新版本號,記錄到本地FETCH_HEAD文件中(即將本地版本和遠程最新版本對應起來揍异。)

git pull

其實 git pull 相當于一個復合命令堡纬。
首先,基于本地的 FETCH_HEAD 記錄蒿秦,比對本地的 FETCH_HEAD 記錄與遠程倉庫的版本號,然后 git fetch 獲取當前指向分支的后續(xù)版本數(shù)據(jù)蛋济,然后利用 git merge 將其與本地的當前分支合并棍鳖。
總之,就是把當前分支的最新的版本從遠程倉庫拉下來碗旅,與本地倉庫的版本來 merge 一哈渡处。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市祟辟,隨后出現(xiàn)的幾起案子医瘫,更是在濱河造成了極大的恐慌,老刑警劉巖旧困,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件醇份,死亡現(xiàn)場離奇詭異,居然都是意外死亡吼具,警方通過查閱死者的電腦和手機僚纷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拗盒,“玉大人怖竭,你說我怎么就攤上這事《赣” “怎么了痊臭?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵哮肚,是天一觀的道長。 經(jīng)常有香客問我广匙,道長允趟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任艇潭,我火速辦了婚禮拼窥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蹋凝。我一直安慰自己鲁纠,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布鳍寂。 她就那樣靜靜地躺著改含,像睡著了一般。 火紅的嫁衣襯著肌膚如雪迄汛。 梳的紋絲不亂的頭發(fā)上捍壤,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音鞍爱,去河邊找鬼鹃觉。 笑死,一個胖子當著我的面吹牛睹逃,可吹牛的內(nèi)容都是我干的盗扇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼沉填,長吁一口氣:“原來是場噩夢啊……” “哼疗隶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起翼闹,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤斑鼻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后猎荠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坚弱,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年法牲,在試婚紗的時候發(fā)現(xiàn)自己被綠了史汗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡拒垃,死狀恐怖停撞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤戈毒,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布艰猬,位于F島的核電站,受9級特大地震影響埋市,放射性物質(zhì)發(fā)生泄漏冠桃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一道宅、第九天 我趴在偏房一處隱蔽的房頂上張望食听。 院中可真熱鬧,春花似錦污茵、人聲如沸樱报。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迹蛤。三九已至,卻和暖如春襟士,著一層夾襖步出監(jiān)牢的瞬間盗飒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工陋桂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逆趣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓嗜历,卻偏偏與公主長得像汗贫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子秸脱,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

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

  • Git 是一個很強大的分布式版本控制系統(tǒng)。它不但適用于管理大型開源軟件的源代碼部蛇,管理私人的文檔和源代碼也有很多優(yōu)勢...
    熊熊要更努力閱讀 263評論 0 0
  • 一摊唇、新建遠程倉庫 : 方法一:只是新建了遠端倉庫,本地 沒有 關聯(lián) curl -u 'username'https...
    默小柒閱讀 678評論 0 1
  • 今天有些不舒服涯鲁,畫的時候頭疼的要死巷查,強忍著畫完了,巴望著能快些好起來抹腿。 最近事情也相當多岛请,我的娛樂時...
    深吉月閱讀 304評論 0 1
  • 文|時光恰巧 參賽編號:436 有的人活著他已經(jīng)死了。有的人死了他還活著警绩。有的人變成蟲子崇败,活著亦等于死了。 從來沒...
    時光恰巧閱讀 408評論 6 15
  • "快點來人救救我們!”這時雪山應急救援隊接受到求救信號后室。隊長常風立刻組織隊員對這這一信號位置進行核實缩膝。 “大家準備...
    提莫慧閱讀 277評論 5 6