標籤:

Git筆記——基本功能(上)

大家好,沉寂了很長一段時間的我又回來了,這次回來並不是給大家帶來LaTeX的教程的,這次回來寫這篇文章的原因是,項目組內的github倉庫非常混亂,果神提出了整理的要求,並且要求全組掌握github。作為暫時性的培訓負責人,我接下了這個任務。於是我決定避開github那個極度不友好的界面(講白了就是英語不好),從git開始,通過系統的教程,了解git與github的原理,達到通過代碼來操作github的目的(畢竟這樣也更程序猿一點……)

git命令我只看了兩天,在這之前它對我來說完全是陌生的玩意,我也並沒有接觸計算機的深層理論,所以如果我的理解出現了錯誤,請大家一定要指正,真的非常感謝大家~~

在寫文章之前,首先要說明一件事……

一切要以全局為重!

github是一個版本控制庫,實際應用主要應用在一個項目內的代碼共享,代碼協作等內容。然而就在寫這篇文章的當天晚上我整理倉庫的時候,先git clone完內容,再刪掉repo,再創repo,再git init,再fork,git push……一切都很順利,沒人攔我。

沒錯,後面的結局大家也都知道了,實力作了一波大死,在他人不知情情況下先把內容刪了,導致配置和歸屬權這些東西全都亂了,因為這個事情,本人成功的被果神打了個半死,別說了,現在我臉還疼呢……

所以大家以後做事別和我一樣毛糙哦,友情提醒大家~

那麼為什麼要說這個故事呢?

能看懂上面的那些命令嗎?看得懂的下面就不要再看了

這篇文章的目的就是,讓你系統的讀完這些之後,再回頭看這場事故,如果能很清楚的有了命令思路,那就ok了,你就會用git操控github了。這在項目的代碼協作中是必需的,蛤。

本系列教程是組內成員使用git操作github的參考教程。

本篇文章參考的是廖雪峰的git教程,在此感謝廖雪峰老師……

段子咱們說完了,我們開始正題。

提供本篇文章的目錄:

  • 安裝git
  • 基本概念和原理介紹
  • git準備工作
  • 版本查找

安裝git

這個請大家參考安裝Git的教程,我自己的電腦是windows系統,安裝之後的界面(git-bash)如下,之後將會使用此來舉例

(如果玩linux的話,你一定不會陌生那前面的那個美元符號)

基本概念和原理介紹

首先要明白什麼是git,什麼是github(這一塊全部是文字說明,請大家仔細閱讀)

Git是目前世界上最先進的分散式版本控制系統,github相當於是一個遠程倉庫。可能這樣說大家還是很疑惑,下面我盡量說清楚這些概念。

什麼是分散式版本控制系統?

首先得明白分散式的概念,這個概念也被用在資料庫和伺服器,運維等方面。我們略過具體的定義。打個比方,現在有一個上司在管理下面十個人寫代碼,每一個人寫好了代碼,就提交給上司,上司這裡就寫上了你的名字,給你開了個倉庫,放置好了你的代碼。然後之後,你寫的所有代碼,如果上司要看,你就繼續提交到那個倉庫,以此類推。所以總結一下,分散式就是一個master管理下面的多個client,形成一個樹形的結構

那麼版本控制呢?版本控制的意思可以這麼理解:你現在提交一個代碼到你的倉庫,你又提交了一個新版本的代碼,以此類推,你提交了一大堆代碼,突然有一天發現中間的代碼是最好的,那你要調取代碼的話,如果你是在本地電腦上寫的,可能你需要保存一大堆副本,結果要找的時候,你就找不著了。而git不會,git會對每一次修改做一個標記,這樣你每一次的修改都很明確,也很容易回滾,就很容易找到屬於你最好的那個「版本」,這就是所謂的「版本」控制。

最後還需要說幾個有關儲存位置倉庫的概念

首先我們在本地有一個文件夾,這個文件夾一般被稱為工作區,一般來說,一個倉庫對應你本地的一個文件夾。然後,我們做初始化,把這個文件夾變成一個git的工作區,這樣的話,這個文件夾就可以用來推送文件上伺服器了。

在這之後,需要有兩件事,一是add,二是commit,add就是添加,你要添加一個文件(或者文件夾),添加完之後,git就會把你的請求添加到版本庫上,注意:並沒有結束,這只是推送到了暫存區,以防你做錯決定,還需要加一步commit(提交),才能算正式的推送到版本庫上,事實上,如果你需要推到你自己的github倉庫上,你還需要做一步push。

基本的概念明確了,現在我們開始正式的命令介紹

git準備工作

首先,機器需要知道你是誰,否則是不會讓你做這些事情的,因此開始的時候,你需要輸入以下命令,用來註冊一個賬戶

git config --global user.name "Your Name"ngit config --global user.email "email@example.com"n

注意:--global參數是全體,表示說機器上所有的git倉庫都是用這個用戶名發送的,事實上,也可以在進入每一個倉庫之後,設置每一個倉庫為不同的用戶名和郵箱,用於更為複雜的需求。

之後需要給自己準備一個倉庫,好的,我們現在在D盤創建一個demo文件夾,並且把git的目錄移步到這個文件夾

記得cmd中的cd命令嗎?我們使用這個命令來移步

cd D:demon

注意:你也可以使用以下命令(mkdir,創建目錄),其功能是完成移步與創建文件夾的任務。

cd D:nmkdir demoncd demon

之後,我們就拿這個倉庫來當作我們的工作區,由於我們要用git操作,所以輸入命令

git initn

輸入後,這個倉庫就被當作了工作區,如果你查看隱藏文件,你會發現一個文件夾叫.git,不要輕易動它。

現在我們查看一下狀態,輸入命令

git statusn

這個命令用於查看目前的工作區,暫存區和版本庫的狀態,由於目前什麼都沒幹,所以會告訴你你的倉庫是乾淨的(如下圖)

注意:在你不斷的做add,commit等等的操作的時候,請一定要注意多查看狀態。以防不測。

好的,我們創建一個文件,就文本文檔吧,再在裡面隨便寫點東西(記事本創建的話之前會有一些奇怪的東西添加,所以這裡不推薦,推薦大家使用notepad++)

這裡命名為demo.txt(注意文件名命名規則:數字字母下劃線,不要中間留空格!),裡面打了一些亂碼:

sdfsadfasfsdfn

保存在文件夾(工作區)內,然後我們再使用git status命令看一看

(pwd命令是看當前目錄的,用處不大,這裡不介紹)

看下半部分,我們對其做一些簡單的解釋

  • on branch master標記了你的分支(分支的概念之後說)
  • untracked files說明這些文件只是在你的工作區做了修改,版本庫並沒有收到任何的回饋信息,這裡會給出詳細的提示

好的,我們把它推到版本庫上,使用命令

git add demo.txtngit commit -m *n

這就是之前一直提到的add和commit了,對這代碼做一些解釋

  • add之後是文件名,由於空格的話,系統會自動把文件名斷開,這會導致文件無法識別,因此文件名命名要嚴格遵守規定。
  • add的作用是把這些推到暫存區
  • commit之後的-m參數是message,也就是說需要之後指定提交的信息,也就是引號裡面的內容。添加這信息的目的是為了查找標記

注意:如果你要上傳提交一個文件夾,之前可以查看一下git status,文件夾會有專門的提示,請在add的時候仔細對準輸入,這在之後的github push上會出現。

提示:如果你單純的輸入git add和git commit,可以看看它給你的提示信息,會給你一些學習的幫助。

提示:git commit -m輸入完,系統會報錯,之後也會給出一系列的用法,感興趣的可以去看看。

好的,推完了,我們看看

我們在最後得時候,出於習慣,我們還是要加上git status查看,如果倉庫乾淨,那麼我們就放心了,因為確實已經是提交上去了

注意:看一下更上面的那張圖,文件名是呈紅色的,這標記著在工作區修改,未被推到版本庫的兩個部分的文件。如果你在git add之後,直接使用git status命令,這個時候,文件名會顯示為綠色,這標記著已經上了暫存區,但還沒有被提交到版本庫

由於github需要對不同版本進行檢測標記,因此肯定需要提交記錄這種東西,對應到git上就是命令

git logngit log --graphngit log --pretty=onelinen

解釋一下:

  • 參數--graph用來標記分支的情況(合併等),如果只是一直的單分支,一般不需要這個參數
  • --pretty=oneline,這個會使提交記錄看著比較簡潔

展示一下效果

這張圖就顯示了非常詳細的信息,中間空行的就是你標記的提交信息

這個命令就只會顯示提交信息了。

報告:那前面的黃色亂碼是什麼玩意!

這個就是所謂的commit id,很明顯經過了hash處理(感謝評論區指正)(為了防止衝突,如果是自然數順序的話,你提交的記錄和別人提交的記錄肯定會衝突的一塌糊塗),這在之後說的版本回滾里會用到。也是每一個版本記錄的關鍵唯一憑證。

注意:就像上圖所示,如果你的log很多,那麼git log使用之後你單純按enter鍵可能無法終止進程,這個時候要記得使用ctrl+C或者ctrl+Z

版本查找

現在我們來解釋一下版本查找功能

我們做了多次修改,並且多次提交,比方說我們現在想到一個非常好的句子,可是我寫到一半寫不出來了,我就先提交,看老師能給我幾分,結果呢,剛提交完,我就想起來了,於是乎,現在就出現了兩個版本,等於我們修改了兩次,每一次都做了添加提交(add,commit)工作。

A government of the people, #the first revisionnA government of the people,by the people,for the people shall not perish from the earth. #the second revisionn

(這句話來自於《葛底斯堡演講》)

(#之後的內容是注釋,這一點和python相同,不要把之後的內容也加到文本文檔里了)

為了讓大家看到修改的過程,我們使用命令

cat demo.txtn

來顯示文本的內容,下面我們用圖片來展示我們操作的過程

我們可以看出,剛開始的內容是亂碼,我們修改了兩次,到達了一個高逼格的句子。

提示:注意到框中modified:demo.txt那一行,這一行是在提示文件做了修改。同樣的還有new file,deleted等提示,都是在提示工作區的一些新變化。

但是!假設要詢問你的思考過程,就問你中間在哪裡你卡住了,你怎麼調出你之前的那一卡殼的瞬間?

不方,我們使用這個命令看一下

git reflogn

看看前兩條,我們做第一次修改的時候就卡住了,沒有形成一個完整的句子。所以現在我們是要回到change 1這一條的,怎麼做呢?

有兩種思路可以進行回滾(enroll)。但基本命令都是

git reset --hard *n

--hard參數是為了把目前已經放到工作樹(已經commit到版本庫)上的信息都刪除掉,以防回滾的時候產生衝突等不測。

  1. *後面用可以使用HEAD^,回到上一步,如果你要回滾兩步,就使用HEAD^^,當然了,一直往後面加這玩意加太多了也看著有點膈應,所以我們也可以使用HEAD~n表示回退到n步之前。
  2. 也可以添加提交序列號(commit id),我們看到使用git reflog之後,前面有一個7位數的序列號,*修改為對應的記錄的序列號,也可以做到回滾

我們演示第二種,修改完之後再使用cat命令進行追蹤

0211cec就是序列號。

注意:在你進行版本回滾之後,如果你查看log記錄就已經查不到最新的記錄了,只能通過git reflog命令來查看最新的記錄對應的commit id,然後使用同樣的方法進行回滾。

關於分支的命令,由於組內一般提交對應的代碼不需要本機太多複雜的倉庫設置命令等,因此我們這裡略去不說。

寫在後面

網上關於git的教程有一些,雖然廖雪峰老師的教程已經寫的非常的簡明扼要了,但是由於組內要求的高效率,我們這裡已經壓縮到極致,學完這個教程,已經可以應付基本的項目代碼協作了,但是對於要求高,密度大的項目合作,這個教程顯然遠遠不夠,可以參考廖雪峰老師的git教程,也可以在每一個疑問的命令之後加一個--help參數,可以調出github的官方文檔。

好的,本一節引入結束,下一節我們會正式進入github界面,介紹用git操作github的一些基本命令和方法。

歡迎支持者們點贊~~筆芯~~

非商業轉載註明作者即可,商業轉載請聯繫作者授權並支付稿費。本專欄已授權「維權騎士」網站(http://http://rightknights.com)對我在知乎發布文章的版權侵權行為進行追究與維權。

項目聯繫方式:

  • 項目郵箱(@iGuo 的郵箱):zhangguocpp@163.com
  • 項目網站:http://www.xmucpp.com/(修復中)
  • 項目GitHub:Chinas Prices Project at Xiamen Univerisity (CPP@XMU)(修復中)
  • 項目專欄:Chinas Prices Project - 知乎專欄
  • 項目知乎賬戶:@CPP
  • 項目公眾號:xmucpp2016(XMUCPP)

作者:劉理

鏈接:zhuanlan.zhihu.com/p/25

來源:知乎

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。


推薦閱讀:

.git文件夾下的每個文件都是做什麼的?
Level UP! 提升你的編程技能
外國人編程出錯也會出現「燙燙燙燙」嗎?為什麼會出現這個?

TAG:Git | GitHub | 编程 |