1. 程式人生 > >Git&GitHub學習筆記之(二)Git命令操作

Git&GitHub學習筆記之(二)Git命令操作

在上篇文章中,我們就說過Git與GitHub不是一回事。GitHub是基於Git的,Git是基礎。所以再學習更多的GitHub知識之前,就得先了解Git。

一、什麼是Git

Git 是一款免費、開源的分散式版本控制系統,他是著名的 Linux 發明者 Linus Torvalds 開發的。Git也是目前世界上最先進的分散式版本控制系統。

  1. Git的特點
  • 分散式 : Git版本控制系統是一個分散式的系統, 是用來儲存工程原始碼歷史狀態的命令列工具;
  • 儲存點 : Git的儲存點可以追蹤原始碼中的檔案, 並能得到某一個時間點上的整個工程專案額狀態; 可以在該儲存點將多人提交的原始碼合併,也可以會退到某一個儲存點上;
  • Git離線操作性 :Git可以離線進行程式碼提交, 因此它稱得上是完全的分散式處理, Git所有的操作不需要線上進行; 這意味著Git的速度要比SVN等工具快得多, 因為SVN等工具需要線上時才能操作, 如果網路環境不好, 提交程式碼會變得非常緩慢;
  • Git基於快照 : SVN等老式版本控制工具是將提交點儲存成補丁檔案, Git提交是將提交點指向提交時的專案快照,
    提交的東西包含一些元資料(作者, 日期, GPG等);
  • Git的分支和合並 : 分支模型是Git最顯著的特點, 因為這改變了開發者的開發模式,
    SVN等版本控制工具將每個分支都要放在不同的目錄中, Git可以在同一個目錄中切換不同的分支;
  • 分支即時性 : 建立和切換分支幾乎是同時進行的, 使用者可以上傳一部分分支, 另外一部分分支可以隱藏在本地,不必將所有的分支都上傳到GitHub中去;
  • 分支靈活性 : 使用者可以隨時 建立 合併 刪除分支, 多人實現不同的功能, 可以建立多個分支進行開發, 之後進行分支合併,這種方式使開發變得快速, 簡單, 安全;
    說到版本控制系統,大家應該聽說過 SVN ,SVN是集中式版本控制系統,算是過去式了;而Git 是新時代的產物,是分散式版本控制系統。那麼集中式與分散式有什麼區別呢?我用廖大神的話,給大家展示一下 (這些算是我站在巨人的頭頂上,給大家說明一下!)
    2.集中式vs 分散式
    集中式版本控制系統,版本庫是集中存放在中央伺服器的,,而幹活的時候,用的都是自己的電腦,所以要先從中央伺服器取得最新的版本,然後開始幹活,幹完活了,再把自己的活推送給中央伺服器。中央伺服器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然後回到家自己改,改完了,再放回圖書館。
    缺點:集中式版本控制系統最大的毛病就是必須聯網才能工作,如果在區域網內還好,頻寬夠大,速度夠快,可如果在網際網路上,遇到網速慢的話,可能提交一個10M的檔案就需要5分鐘,這還不得把人給憋死啊。
    分散式版本控制系統根本沒有“中央伺服器”,每個人的電腦上都是一個完整的版本庫,這樣,你工作的時候,就不需要聯網了,因為版本庫就在你自己的電腦上。既然每個人電腦上都有一個完整的版本庫,那多個人如何協作呢?比方說你在自己電腦上改了檔案A,你的同事也在他的電腦上改了檔案A,這時,你們倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。
    和集中式版本控制系統相比,分散式版本控制系統的安全性要高很多,因為每個人電腦裡都有完整的版本庫,某一個人的電腦壞掉了不要緊,隨便從其他人那裡複製一個就可以了。而集中式版本控制系統的中央伺服器要是出了問題,所有人都沒法幹活了。
    好了,正式開啟我的學習之路了。

二、 Git安裝

我用的是windows系統, 從這裡下載:https://git-for-windows.github.io/
安裝完成後,檢視你的git是否安裝成功,在開始選單裡找到“Git”->“Git Bash”,蹦出一個類似命令列視窗的東西,然後在命令列裡面輸入git,出現如下提示證明安裝成功。
這裡寫圖片描述
安裝完成後,還需要設定一番,在命令號輸入:

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

因為Git是分散式版本控制系統,所以,每個機器都必須自報家門:你的名字和Email地址。
注意:git config命令的–global引數,用了這個引數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的使用者名稱和Email地址。

三、Git的具體命令

命令列操作是全集,圖形操作都是命令列的一個子集

  1. git建立版本庫

版本庫有名倉庫(repository),簡單理解成為一個目錄,這個目錄裡面的所有檔案都可以被Git管理起來,每個檔案的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以還原。
建立版本庫的方式:選擇一個合適的地方,建立一個空目錄。。
我在我的E盤建立了一個檔案件learngit,然後開啟資料夾,右擊,點選Git Bash Here
這裡寫圖片描述
進入命令視窗。輸入 git init 命令將這個目錄變成Git可以管理的倉庫,即初始化一些與倉庫相關的內容。
我們發現這個資料夾git是隱藏的。開啟git檔案我們發現會有
這裡寫圖片描述

2.配置

學習一款工具的時候,首先應該認識它的配置。執行以下命令可以檢視git的配置,輸入命令git config –list
這裡寫圖片描述
Git的配置是有三份配置檔案合成的,分別是本地配置:配置檔案儲存在當前倉庫中;全域性配置:配置儲存在當前windows登入使用者的根目錄下;系統配置:配置檔案儲存在git的安裝目錄下的某個目錄中。當有相同配置時,本地配置的優先順序較高,全域性配置次之,系統配置優先順序最低。
本地配置就在git檔案中的config檔案中,你可以 開啟檢視一下
這裡寫圖片描述
你也可以對配置進行增加、修改、刪除、檢視,基本上都可以用命令實現。
檢視本地配置、全域性配置、系統配置的命令如下:

git config --local --list
git config --global --list
git config --system --list

修改配置的命令如下:

git config --local 配置項 “配置值”  如git config – local core.bare true
git config --global 配置項 “配置值”
 git config --system配置項 “配置值”

刪除配置

git config –local –unset core.bare

3.. 檢視幫助
git 檢視幫助很簡單,git config –h或者git config –help
注意 兩個(–)要寫選項的全稱 一個(-)可以選項的簡稱
有的選項有簡稱,有的沒有。但是一定有全稱。
4.. 工作區、暫存區 、倉庫
工作區是指當前編輯程式碼的資料夾,也是.git倉庫所在的資料夾;
暫存區只是一個概念,實際上並不存在;
倉庫就是.git檔案夾了,它是我們執行 git init命令時自動建立的,預設是隱藏的,所有的歷史都儲存在這裡。(這個地方稍後我們結合實際操作說一下)
5. 把檔案新增到版本庫
編寫一個README.md檔案,內容如下

first: 
Git is a version control system
Git is free software

這個檔案一定要放到learngit目錄下(子目錄也可以),因為這個Git的一個倉庫,放到其他地方Git會找不到這個檔案。
跟蹤檔案
初始化一個倉庫時,倉庫是空空的,要執行以下命令,讓git跟蹤某檔案
git add 檔名
執行以上命令就把一個檔案跟蹤起來,這個檔案就進入了暫存區。要注意的是.git不會跟蹤一個空資料夾

用命令 git add告訴Git,把檔案新增到倉庫中 git add README.md
6.檢視狀態:
檢視命令用的很頻繁,命令如下 git status
這裡寫圖片描述
git會把檔案的變化列出來,例如未跟蹤的檔案,已修改的檔案,已刪除的檔案等,將會被提交的檔案列表等。良好的習慣是在操作之前先檢視一下狀態。
7.提交
提交就是指把暫存區的檔案提交到git倉庫,可以通過以下命令進行
git commit –m “提交說明” (這個說明最好是有意義的,這樣你就能從歷史記錄中方便找到改動的記錄)
git commit命令執行成功後告訴你,1個檔案被改動(我們新新增的README.md檔案)插入了3行內容(README.md中有3行內容)
提交同時也是一個名詞,在git中一個提交就是一個歷史,每個提交都有一個唯一的提交id。
這裡寫圖片描述
注意: 新增檔案到Git倉庫,分兩步
第一步,使用命令git add file,注意 可反覆使用多次,新增多個檔案
第二步,使用git commit,完成
8.. 檢視日誌
檢視日誌是指檢視提交的記錄,,可以執行如下命令
這裡寫圖片描述
git log 還可以顯示的簡潔一點,加上—oneline選項
git log –oneline 單行顯示模式下的 提交id也變短了,注意這個提交id 也是可以進行某些操作的,和長長的提交id具有相同的功能。
9.檢視不同提交記錄
我們已經成功地新增並提交了一個README.md檔案,現在我們繼續工作,修改了README.md檔案,內容改成如下

second: 
Git is a distributed version control system
Git is free software

,現在執行 git status
這裡寫圖片描述
git status命令讓我們時刻掌握倉庫當前的狀態,上面告訴我們,README.md被修改過了,但是沒有提交修改。
如果想檢視具體修改了什麼內容,用命令git diff
這裡寫圖片描述
從上面的命令我們知道,我們first修改成了second, 第二行中我們加入了“distribute”。
知道了對README.md做了什麼修改後,再提交。提交步驟是一樣的
這裡寫圖片描述
10. 檢出檔案(版本回退)
檢出檔案時指從提交中拿出一個檔案到工作區,例如當想放棄某個檔案的修改時,就可以這樣做 git checkout 檔名
演示: 我們再次修改README.md檔案

third: 
Git is a distributed version control system
Git is free software distributed under the GPL

然後提交。
這裡寫圖片描述
像這樣,不斷對檔案進行修改,然後不斷提交修改到版本庫。一旦把檔案改亂了,或者誤刪了檔案,還可以從最近的commit恢復,然後繼續工作,而不是從頭開始。
現在看看README.md檔案一共有幾個版本被修改提交到Git倉庫裡
這裡寫圖片描述
如果嫌棄資訊太多,不妨這樣,加一個 –pretty=oneline
這裡寫圖片描述
如果想把README.md回退到以前的版本,怎麼做?
首先,Git必須瞭解當前版本是哪個版本,在Git中,用HEAD表示當前版本,上一個版本是HEAD^,上上一個版本HEAD^^,當然往上100個版本,寫成HEAD~100.
回退到上一個版本,使用命令git reset
這裡寫圖片描述
檢視README.md的內容,果然是

second: 
Git is a distributed version control system
Git is free software

這裡寫圖片描述
如果你再想回到第三次提交的版本的時候,只要你記得第三次commit id就好了,
這裡寫圖片描述
若你忘記了第三次的commit id也不用慌,用命令git reflog,記錄你的每一次命令。
這裡寫圖片描述
現在接著講講 工作區和暫存區

工作區(Working Directory)
就是你在電腦裡能看到的目錄,比如我的learngit資料夾就是一個工作區:
版本庫(Repository)
工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。
Git的版本庫裡存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動建立的第一個分支master,以及指向master的一個指標叫HEAD。
這裡寫圖片描述
分支和HEAD的概念我們以後再講。
前面講了我們把檔案往Git版本庫裡新增的時候,是分兩步執行的:
第一步是用git add把檔案新增進去,實際上就是把檔案修改新增到暫存區;
第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。
因為我們建立Git版本庫時,Git自動為我們建立了唯一一個master分支,所以,現在,git commit就是往master分支上提交更改。
你可以簡單理解為,需要提交的檔案修改通通放到暫存區,然後,一次性提交暫存區的所有修改。
11. 管理和修改
每次修改,如果不add到暫存區,那就不會到commit中。
12. 撤銷修改
場景1:當你改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout – file。
我在README.md中添加了一行
third:
Git is a distributed version control system
Git is free software distributed under the GPL
這句話是我要撤銷的。
其中上句話你是可以手動刪除的,但是用Git命令也可以.
這裡寫圖片描述
場景2:當你不但改亂了工作區某個檔案的內容,還新增到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
third:
Git is a distributed version control system
Git is free software distributed under the GPL
這是我要撤銷修改的一句話。
這裡寫圖片描述
工作區變成了

third: 
Git is a distributed version control system
Git is free software distributed under the GPL

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠端庫。
13. 刪除檔案
命令git rm用於刪除一個檔案。
實驗:新增一個delete.txt到Git
這裡寫圖片描述
用git rm刪除掉,並且git commit。檔案果然被刪除了。
這裡寫圖片描述

好了,Git暫時說到這裡。

相關推薦

Git&GitHub學習筆記Git命令操作

在上篇文章中,我們就說過Git與GitHub不是一回事。GitHub是基於Git的,Git是基礎。所以再學習更多的GitHub知識之前,就得先了解Git。 一、什麼是Git Git 是一款免費、開源的分散式版本控制系統,他是著名的 Linux 發明者 L

Deep Learning論文筆記Sparse Filtering稀疏濾波

structure 分布 的確 tlab bolt 期望 有一個 尋找 mean Deep Learning論文筆記之(二)Sparse Filtering稀疏濾波 自己平時看了一些論文,但老感覺看完過後就會慢慢的淡忘,某一天重新拾起來的時候又好像沒有

流媒體技術學習筆記Nginx-Rtmp-Module統計某頻道在線觀看流的客戶數

sele lec rest uri class origin 客戶 擴展 raw 獲得訂閱者人數,可以方便地顯示觀看流的客戶數。 查看已經安裝好的模塊 /usr/local/nginx/sbin/nginx -V 安裝從源編譯Nginx和Nginx-RTMP所

機器學習筆記7——聚類演算法

對於監督學習,訓練資料都是事先已知預測結果的,即訓練資料中已提供了資料的類標。無監督學習則是在事先不知道正確結果(即無類標資訊或預期輸出值)的情況下,發現數據本身所蘊含的結構等資訊。 無監督學習通過對無標記訓練樣本的學習來尋找這些資料的內在性質。 聚類的目標是發現數據中自然形成的分組,使得每

吳恩達老師機器學習筆記SVM

今天的部分是利用高斯核函式對分佈稍微複雜一點的資料進行分類 這裡的高斯核函式是構建新的特徵,該特徵是關於到其餘所有樣點的歐式距離。 下面放出程式碼: load('ex6data2.mat'); [m n]=size(X); f=zeros(m,m); a=0.005 for i=

React 入門學習筆記整理—— JSX簡介與語法

先看下這段程式碼: import React from 'react'; //最終渲染需要呼叫ReactDOM庫,將jsx渲染都頁面中 import ReactDOM from 'react-dom'; import * as serviceWorker from './serviceWorker'; l

node.js學習筆記整理

(1)前端專案自動化構建 1、建立myProject專案檔案以及對應的資料夾 var projectData ={ 'name':'myProject', 'fileData':[ { 'name':'css', 'type'

DSP——DSP/BIOS學習筆記——TSK和MBX

1、它們都是任務間通訊的手段,但是應用場合不同  訊號量用作任務同步或者資源的互斥訪問 至於郵箱,名副其實的,可以“郵寄”一些東東給別的任務 舉個例子的話,我覺得可以說訊號量就像別人打你電話只響一下(具體代表什麼含義在於你們之間的約定),而郵箱就像簡訊哇,寫啥都行。當然,二進位制訊號量也可以用郵箱實現。 2、

機器學習筆記4——Fisher分類器線性判別分析,LDA

本博文為Fisher分類器的學習筆記~本博文主要參考書籍為:《Python大戰機器學習》Fisher分類器也叫Fisher線性判別(Fisher Linear Discriminant),或稱為線性判別分析(Linear Discriminant Analysis,LDA)。

spark機器學習筆記用Spark Python進行資料處理和特徵提取

下面用“|”字元來分隔各行資料。這將生成一個RDD,其中每一個記錄對應一個Python列表,各列表由使用者ID(user ID)、年齡(age)、性別(gender)、職業(occupation)和郵編(ZIP code)五個屬性構成。4之後再統計使用者、性別、職業和郵編的數目。這可通過如下程式碼

3.Zedboard學習筆記安裝vivado並獲取license

按部就班安裝vivado,需要時間比較長,最後會彈出如下視窗,要求提供license。 1.註冊xilinx賬號 2.填寫相關資訊,是xilinx強制要求填寫的 3.進入網頁: http://www.xilinx.com/getlicense

Intellij IDEA 2016學習系列mybatis-generator自動生成

1.在maven工程中的resource中建立generatorConfig.xml 配置generatorConfig.xml的 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE

Android 學習筆記 Contacts Contacts 聯絡人詳解

1.獲取聯絡人詳細資訊 在(一)中我們只是獲取了聯絡人的ID和NAME,但是這是遠遠不夠的,怎麼樣獲取其他的值呢? public void fetchContactInformation() { String id,name,phoneNumber,email;

c++11學習筆記iostream緩衝區

c++ primer 5 中page 23頁中術語表中緩衝區(buffer)概念不是很清楚。故終結如下 緩衝區(buffer)一個儲存區域,用於儲存資料。IO裝置通常將輸入/輸出資料儲存在一個緩衝區中,讀寫緩衝區的動作通常與程式中的動作是無關的。我們可以顯示的重新整理輸出緩

【深度學習筆記基於MNIST資料集的神經網路實驗

一、介紹 MNIST(Mixed National Institute of Standards and Technology database)是網上著名的公開資料庫之一,是一個入門級的計算機視覺資料集,它包含龐大的手寫數字圖片。 無論我們學習哪門程式語言

流媒體技術學習筆記海康、大華IpCamera RTSP地址和格式

海康: rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream 說明: username

【Unity Shader學習筆記最基本的頂點片段著色器

分享一個基本的頂點片段著色器,可以實現紋理取樣。目前沒有加入光照和陰影效果。 這個Shader可以作為基本的模板,進行更加細節的修改與開發。這裡就簡單分享一下吧。 Shader "Unlit/unl

【黑馬程式設計師】Objective-C語言學習筆記之類

--------------------------------------------IOS期待與您交流!-------------------------------------------- 一、OC中類的組成 OC中類一般由宣告和實現組成。 類的宣告:儲存在.h檔案

Lucene學習筆記簡介和向文件寫索引並讀取文件

什麼是lucene? lucene就是一個全文檢索的工具包。 Lucene的能幹什麼? 1.      獲取內容(Acquire Content) Lucene不提供爬蟲功能,如果需要獲取內容需要自己建立爬蟲應用。 Lucene只做索引和搜尋工作。 2.建立文件(Buil

C++基礎的不能再基礎的學習筆記——類

類 一、類成員再探 1. 自定義類型別名 在類中,我們可以為資料型別定義別名而使程式碼更清晰簡潔。 class Screen { public: typedef string::size_type pos; //pos是strin