Git 相關

Git 是 分布式版本管理工具。因為這里在開發后臺時候使用,所以寫在后臺開發相關的分類下。


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


使用結果圖
2.3 版本回退

這里修改一哈 test.txt 文件,在第二行最后加入 BEST,然后 使用 git status 命令查看倉庫狀態。可以看到,當前 test.txt 被修改,但是還沒有提交。

倉庫狀態

如果我們要看 改了 什么內容,使用 git diff 命令。可以看到,紅色哪一行代表的是更改之前版本,綠色是更改之后的,所以是在那一句后面 加了 BEST。
查看文件 diff

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

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

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

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

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

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

版本回退后的 log

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

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

3. 相關知識

3.1 工作區和暫存區

工作區和暫存區示意圖

使用 git add 命令就是把 工作區 添加到 暫存區;
使用 git commit 命令就是把 暫存區所有的文件添加到當前分支。

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

3.2 管理修改

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

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

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


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

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


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

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

4. 遠程倉庫

4.1 關聯遠程倉庫

這一部分是最常用的了。
這里用本地倉庫來關聯 github 上面的遠程倉庫。
首先申請一個 github 的賬號,然后 新建一個 repository。
這里本地關聯線上倉庫需要 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

然后進行關聯。這里 git remote add [RemoteRepName] [RemoteAddr]。默認用了 origin ,一般看到這個 origin 都知道是遠程倉庫。


關聯倉庫

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

可以看到線上的 Github 已經有了
線上倉庫
4.2 分支

分支就好像是在 master 之前跑的一點的一個進度。如果你在開發工程,自己寫的代碼還沒有確定是萬無一失的,就需要一個分支,先存下來,而這個分支不會影響 master 中的代碼。


分支示意圖

我們看一下具體的例子。
在線上建立一個 名為 gitskills 倉庫。然后 git clone 下來。
創建一個 dev 分支

git branch dev   // 創建
git checkout dev   // 切換

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


查看分支

然后更改 readme.md,之后提交更改。


在dev分支下做更改

之后切換到 master 分支,發現在 dev 分支里面做的更改,已經看不到了。說明 dev 分支和 master 分支是獨立的。
分支相互獨立

現在合并分支,可以看到,dev 分支被合并到 master 分支,里面的更改是可見的了。

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

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


刪除分支

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

兩個分支同時編輯產生 conflict

這時候查看 文件。看到了不同的地方,然后手動 更改。
手動清除 conflict

之后再提交,可以看到 conf 解決了,合并成功了。可以刪除 feature1 分支了。
沖突解決后提交

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

no-ff 模式合并

直接用 merge 都是普通合并模式,采用 fast-foward 方式合并。如果加參數 --no-ff 則是 recursive 方式合并。
這種合并方式要提交一個新的 commit ,所以要加一個 -m 參數。


no-ff 合并分支

no-ff分支圖

ff 分支圖

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


區別
分支策略

一張圖說明分支策略。即 master 只用來做新版本發布,開發都在 dev,每個人又有自己的分支。


分支策略圖

5. 常用操作

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

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

git clone # 將遠程倉庫 clone 下來

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

git fetch  

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

git pull

其實 git pull 相當于一個復合命令。
首先,基于本地的 FETCH_HEAD 記錄,比對本地的 FETCH_HEAD 記錄與遠程倉庫的版本號,然后 git fetch 獲取當前指向分支的后續版本數據,然后利用 git merge 將其與本地的當前分支合并。
總之,就是把當前分支的最新的版本從遠程倉庫拉下來,與本地倉庫的版本來 merge 一哈。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,565評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,115評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,577評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,514評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,234評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,621評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,822評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,380評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,128評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,319評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,548評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,970評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,229評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,048評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,285評論 2 376

推薦閱讀更多精彩內容

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