Git基礎知識教程整理(Git基本操做)

Git簡介

Git是目前世界上最早進的分佈式版本控制系統(沒有之一)。
Linux之父Linux用C語言寫了Git分佈式版本控制系統。html

分佈式版本控制系統與集中式版本控制系統的區別

區別 分佈式 集中式
中央服務器 有,版本庫集中存放在中央服務器,工做時需從中央服務器獲取最新版本代碼,工做完成後在將代碼推送到中央服務器。中央服務器出了問題,開發者幾乎沒法工做 無,開發人員本地都有本地存儲庫(Local Repository)
聯網 必須,必需要聯網才能工做,並且對網絡的依賴性較強,網絡較差或者文件較大,文件提交的速度會受很大的限制 不是必要的,在沒有網絡的狀況下也能夠執行commit、查看版本提交記錄、以及分支操做,在有網絡的狀況下執行 push 將代碼從本地倉庫推送到遠程倉庫(Remote Repository)。
存儲格式 原始文件,體積大 元數據,體積小
分支操做 建立新的分支則全部的人都會擁有和你同樣的分支 分支操做不會影響其餘開發人員
提交方式 直接提交到中央版本庫 先commit到本地倉庫,再push到遠程倉庫
優勢 方便管理,邏輯明確,上手快;更能保證代碼的安全性;代碼一致性很是高;有良好的目錄級權限控制系統 速度快、靈活,分支之間能夠任意切換;單機合併分支,開發者之間容易解決衝突;可離線工做,不影響本地代碼編寫;公共服務器壓力小,數據傳輸量少
缺點 服務器性能要求高,數據體量大;必須聯網;不適合開源;分支管理不靈活 不符合常規思惟,學習週期相對較長;代碼保密性差,一旦開發者把整個庫克隆下來就能夠徹底公開全部代碼和版本信息。

建立版本庫

  1. 建立一個項目目錄(mkdir Git)
  2. 進入到這個目錄(cd Git)
  3. 初始化版本庫(git init)

在當前目錄下會有.git的目錄,它是git進行跟蹤和管理版本庫,禁止刪改此文件(若是沒看到多是您的電腦不顯示隱藏文件,在命令行工具運行 ls -ah可查看)。vue

$ mkdir Git
$ cd Git
$ git init
// Initialized empty Git repository in /Users/zhengdahua/Documents/Project/Private/Git/.git/ 初始化空的版本庫
  1. 編寫一個README.md文件
  2. 將README.md添加到暫存區(git add README.md)
  3. 確認提交文件到倉庫(git commit -m 'add example file')

咱們當前的項目目錄是工做區,git初始化以後會生成一個.git文件,即咱們所說的版本庫(respository),.git中有一個index文件就是暫存區(stage),git還爲咱們自動生成了一個分支master以及指向該分支的指針head。想了解更多,請移步git工做區、暫存區、版本庫之間的關係git

$ type nul>README.md
$ git add README.md
$ git commit -m 'add example file'

版本回退

  • 查看版本庫的狀態(git status)。下面的命令輸出告訴咱們,document.md被修改過了,但尚未提交。
➜  Git git:(master) git status 
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   docs/document.md

no changes added to commit (use "git add" and/or "git commit -a")
➜  Git git:(master) ✗
  • 比較兩次修改的差別(git diff)。「-」後面跟的是刪除的內容,「+」後面跟的是新增的內容
-### 4. 編寫一個README.md文件
-### 5. 將README.md添加到暫存區(git add README.md)
-### 6. 確認提交文件到倉庫(git commit -m 'add example file')
++ 4. 編寫一個README.md文件
++ 5. 將README.md添加到暫存區(git add README.md)
  • 查看提交日誌(git log)。顯示從最近到最遠的提交日誌
commit 241f77158c2d59b0b10e482b74a24150a0bebeb4 (HEAD -> master)
Author: kevin <kenvin.zheng@drigle.com>
Date:   Sun Feb 24 22:24:51 2019 +0800

    update document.md

commit f953ccc298a430939e5e64eeedd49cc2db5a3fdb
Author: kevin <kenvin.zheng@drigle.com>
Date:   Sun Feb 24 21:43:08 2019 +0800
  • 回退版本(git reset --hard HEAD^)。用HEAD表示當前版本,則HEAD^就是上個版本,HEAD^表示上上個版本,HEAD~100表示上一百個版本,「241f77158c2d59b0b10e482b74a24150a0bebeb4」指的是版本的id,咱們要回退到指定版本是隻須要id的前幾位就行,但最好5位以上。回退指定版本(git reset --hard f953c)。
  • 查看全部分支的版本操做記錄(git reflog)。當你用$ git reset --hard HEAD^回退到之前版本時,再想恢復到append GPL,就必須找到append GPL的commit id,經過git reflog就能夠append GPL的commit id了。
241f771 (HEAD -> master) HEAD@{0}: reset: moving to 241f771
f953ccc HEAD@{1}: reset: moving to HEAD^
241f771 (HEAD -> master) HEAD@{2}: commit: update document.md
f953ccc HEAD@{3}: commit (amend): add first file
bd07a32 HEAD@{4}: commit (amend): add first file
98f7467 HEAD@{5}: commit (initial): add first file

修改管理

Git 並不跟蹤與文件相關的文件名和目錄名,而是跟蹤的是文件的內容,查看Git 追蹤內容詳解。所以文件的每一次修改,都須要git add添加到暫存區,而後在commit到版本庫。github

  • 修改撤銷(git checkout -- README.md)。這裏有兩種狀況:一種是README.md自修改後尚未被放到暫存區,如今,撤銷修改就回到和版本庫如出一轍的狀態;一種是readme.txt已經添加到暫存區後,又做了修改,如今,撤銷修改就回到添加到暫存區後的狀態。總之,就是讓這個文件回到最近一次git commit或git add時的狀態。
  • 刪除文件。工做區直接刪除文件,提交到版本庫。

遠程倉庫

爲了能在任意 Git 項目上協做,你須要知道如何管理本身的遠程倉庫。 遠程倉庫是指託管在因特網或其餘網絡中的你的項目的版本庫,例如github、gitlab、碼雲或者你本身用服務器搭建的遠程倉庫。 你能夠有好幾個遠程倉庫,一般有些倉庫對你只讀,有些則能夠讀寫。 與他人協做涉及管理遠程倉庫以及根據須要推送或拉取數據。 管理遠程倉庫包括瞭解如何添加遠程倉庫、移除無效的遠程倉庫、管理不一樣的遠程分支並定義它們是否被跟蹤等等。安全

建立SSH Key 。

在用戶目錄下查看有沒有.ssh文件目錄(電腦須要顯示隱藏文件),若是有再查看有沒有id_rsa(私匙)和id_rsa.pub(公匙)。有直接跳過第一步,沒有則建立SSH Key,郵箱換成你本身的郵箱,一路回車便可。服務器

$ ssh-keygen -t rsa -C "youremail@example.com"

上傳公鑰

登錄GitHub,打開「Account settings」,「SSH Keys」頁面;而後,點「Add SSH Key」,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容。網絡

注:Github經過公鑰識別你的身份,確認只有你本身才能推送。GitHub容許你添加多個Key,若是有多臺電腦,把電腦的公鑰都添加到Github上,這樣無論用哪臺電腦均可以向Github推送代碼了。app

添加遠程庫。

在github上建立一個project,在Repository name填入項目名(Git),其餘保持默認設置,點擊「Create repository」按鈕,就成功地建立了一個新的Git倉庫。ssh

目前,在GitHub上的這個Git倉庫仍是空的,GitHub告訴咱們,能夠從這個倉庫克隆出新的倉庫,也能夠把一個已有的本地倉庫與之關聯,而後,把本地倉庫的內容推送到GitHub倉庫。分佈式

如今,咱們根據GitHub的提示,在本地的Git倉庫下運行命令:

$ git remote add origin git@github.com:dahuazheng/Git.git

注:dahuazheng爲你github的帳戶名

添加遠程倉庫後,遠程庫的名字就是origin,這是Git默認的叫法,也能夠改爲別的,可是origin這個名字一看就知道是遠程庫,接下來把本地庫的全部內容推送到遠程庫上:

$ git push -u origin master

把本地庫的內容推送到遠程,用git push命令,其實是把當前分支master推送到遠程。

因爲遠程庫是空的,咱們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在之後的推送或者拉取時就能夠簡化命令。

克隆遠程倉庫(git clone)

Git支持多種協議,默認使用ssh,也可使用https等其餘協議。經過ssh支持的原生git協議速度最快。使用https除了速度慢之外,還有個最大的麻煩是每次推送都必須輸入口令,可是在某些只開放http端口的公司內部就沒法使用ssh協議而只能用https。

  • 使用ssh示例
$ git clone git@github.com:dahuazheng/vue-note.git
  • 使用https示例
$ git clone https://github.com/dahuazheng...
相關文章
相關標籤/搜索