高大上的Git

最近學習Git感覺真是是高大上,用簡易的方式解決了複雜的版本管理問題。如果要深入介紹Git,其實夠一本書了,所以我根據最近學習情況,總結一下Git的基本知識點吧。


一、Git是什麼?

Git是目前非常流行的分散式版本管理系統。

開發Git最初目的是為更好地管理Linux內核開發而設計。

  • 什麼是版本管理?

簡單說就是記錄你的修改。比如你修改一個文檔,今天你修改了最後一段文字,過了一周又修改了最後一段文字,但是你後悔了,想恢復到一周前的版本,但是完全記不得之前的內容,怎麼辦呢?那這個時候就需要版本管理了,版本管理可以記錄你的每次修改,這樣你就可以回到過去。

  • 為什麼使用Git?

有的人會說,世界這麼多版本管理系統,Git有什麼好嗎?主要有四點:

    • 速度快,操作簡單
    • 分散式管理
    • 極其優秀的分支管理
    • 開源項目

二、 Git的安裝

  • Mac下的安裝

Mac下安裝我推薦使用homebrew,具體方法請參考homebrew的文檔

  • Windows下的安裝

在Windows下安裝Git,其實和安裝其他軟體沒什麼區別,去Git官網下載安裝軟體即可


三、Git初次體驗

安裝完後,進入一個新建的文件夾里,我們來體驗一下Git的使用

  • 初始化倉庫

// 在當前目錄新建一個Git代碼庫ngit initn

  • 添加文件

// 新建一個 a.txt 文件ntouch a.txtnn// 添加指定文件到暫存區ngit add a.txtn

  • 提交文件

// 提交暫存區到本地倉庫區ngit commit -m 添加文件 a.txt n

這樣你就記錄下添加a.txt文件的修改

四、Git的基本使用

4.1 Git的基本概念

  • 工作區 (Working Directory)

工作區就是你本機操作文件的地方

  • 暫存區 (Stage)

當你初始化倉庫時,你會發現工作區里多了個.git的文件夾,這就是本地倉庫。這裡有個很重要的區域就是暫存區,當你執行git add的時候,其實就是把文件修改添加到暫存區。

  • 本地倉庫 (History)

.git文件夾就是本地倉庫,裡面還有一個重要區域就是默認的master分支,當你執行git commit的時候,其實就是把暫存區的所有內容添加到當前分支上。

4.2 添加文件並提交

  • git add

添加修改文件到暫存區

  • git status

查看工作區的變化

  • git commit

把暫存區所有內容提交到當前分支上

  • git pull

取回遠程倉庫的變化

  • git push origin master

上傳本地master分支到遠程倉庫

4.3 版本回退

現代的人總想回到過去,可是時間是回不去的,但是Git可以實現你的願望。

首先你要知道你想回到哪個版本,通過git log查看當前分支提交記錄,

HEAD指向當前分支master,而master指向提交,也就是下面的commit_id (aa81633220d368b5f1...)

git lognncommit aa81633220d368b5f1bc0677e676e2a118ab188e (HEAD -> master)nAuthor: JACK <shizhengchun2015@gmail.com>nDate: Sun Dec 31 11:28:44 2017 +0800nn 添加 b.txtnncommit 91ff12ff6685a7316cecf83c85bbcc96a8d63e39nAuthor: JACK <shizhengchun2015@gmail.com>nDate: Sun Dec 31 11:24:25 2017 +0800nn 添加 a.txtn

其次就是讓我們回到過去,通過git reset --hard commit_id

git reset --hard 91ff12ff668nHEAD is now at 91ff12f 添加 a.txtnn// 查看當前文件夾,發現已經回到添加a.txt的狀態了nlsna.txtnn// 再次查看當前提交歷史ngit lognncommit 91ff12ff6685a7316cecf83c85bbcc96a8d63e39 (HEAD -> master)nAuthor: JACK <shizhengchun2015@gmail.com>nDate: Sun Dec 31 11:24:25 2017 +0800nn 添加 a.txtn

這個時候有人發現,那我還能回到添加 b.txt 文件的狀態嗎?恩,Git無所不能

想要回到未來,通過查看命令歷史git reflog,我們就找到添加 b.txt 的commit_id,這樣我就可以回到未來了

git reflognn91ff12f (HEAD -> master) HEAD@{0}: reset: moving to 91ff12ff668naa81633 HEAD@{1}: commit: 添加 b.txtn91ff12f (HEAD -> master) HEAD@{2}: commit (initial): 添加 a.txtnnngit reset --hard aa81633nHEAD is now at aa81633 添加 b.txtnn// 此時文件夾有了b.txt 我們成功回到未來nlsna.txt b.txtn

總結一下:

  • HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。
  • 用git log可以查看提交歷史,以便確定要回退到哪個版本。
  • 用git reflog查看命令歷史,以便確定要回到未來的哪個版本。

五、Git的高級使用

5.1 本地新建Git項目並推送遠程空倉庫

  • 本地初始化Git項目庫

git initn

  • 遠程新建空倉庫,(注意空倉庫就是什麼都沒有)

到GitHub新建倉庫就行,新建成功就是這個樣子

  • 關聯本地倉庫和遠程空倉庫

// origin後面是你自己倉庫的地址,別搞錯了nngit remote add origin git@server-name:path/repo-name.gitn

  • 推送本地倉庫到遠程

關聯後,使用命令git push -u origin master第一次推送master分支的所有內容

5.2 分支管理

Git還有一個優勢就是分支設計非常優秀,之前說過HEAD是指向分支的,當你初始化倉庫時會默認產生master分支,所以默認HEAD是指向maser分支的。

其實切換分支的本質就是改變HEAD的指向,工作區什麼都沒有變。

新建一個分支dev,其實就是新建一個指針dev,並且指向和master相同的提交,同時讓HEAD指向dev

// 新建分支devngit branch devnn// 切換到分支devngit checkout devnn----------------n// 其實可以一步到位,加參數-b就可以ngit checkout -b devn

那現在工作區改變文件,提交文件就是在dev上面了,假如新提交一個commit,那麼dev指針向前一步,但maser不變

OK,那我們現在來合併分支,其實原理就是把master指向dev當前的提交

// 首先切換到master分支ngit checkout masternn// 查看分支,帶`*`的符合就是當前分支nngit branchnn// 把dev分支合併到master分支上nngit merge devn

dev的分支使命已經完成了,那我們那刪除dev分支,其實刪除分支就是刪除dev指針而已。

git branch -d devn

Git上面操作分支就是這樣簡單有效

總結一下:

  • 查看分支:git branch
  • 創建分支:git branch <name>
  • 切換分支:git checkout <name>
  • 創建+切換分支:git checkout -b <name>
  • 合併某分支到當前分支:git merge <name>
  • 刪除分支:git branch -d <name>

其實Git還有很多命令,這些其實只是很小的一部分,但是我覺得掌握Git的基本概念後,其實遇到問題,其實可以搜索Git來學習。

才疏學淺,歡迎指導批評


參考鏈接

  • 常用 Git 命令清單
  • 廖雪峰的Git教程
  • 圖解Git

推薦閱讀:

說說Git reset 與 revert 的故事
Visual Studio Code 使用Git進行版本控制
git 怎麼在倉庫裡面上傳一個文件夾到github?

TAG:Git | 计算机基础 |