Git知識總覽(一) 從 git clone 和 git status 談起

本篇博客是整理git相關知識的第一篇,由於以前一直是用SourceTree對Git的命令行操做用的不是特別熟,因而乎過了一遍ProGit(連接:https://git-scm.com/book/zh/v1)。本篇博客以及後邊的將要發的幾篇博客是對以前看ProGit時的筆記的整理。固然在整理時,根據具體示例來梳理了一下知識點,和ProGit上的講解順序有些區別。本篇博客聊了Git基礎操做的一部分,主要是基於Github上Fork的Masonry倉庫來作的,首先Clone相關倉庫,而後根據git status命令的提示引出了一系列的命令操做。git

Git的原理就不作過多贅述了,ProGit上聊得挺好。不過仍是要聊一下集中版本控制系統和分佈式版本控制的區別。在版本管理中主要包含集中化的版本控制系統 (Centralized Version Control Systems,簡稱 CVCS) 例如 CVS、Subversion 以及 Perforce 等 ,和分佈式版本控制系統(Distributed Version Control System,簡稱 DVCS), 例如Git、Mercurial、Bazaar 以及 Darcs  。DVCS的特色爲每一次的克隆操做,實際上都是一次對代碼倉庫的完整備份。 其中文件的狀態主要包括已提交(committed)、已修改(modified)和已暫存(staged) 的。這些東西就不細說了,先看一下git的命令的一些操做。github

備註:接下來的幾篇博客的終端操做都是在 Mac 上使用的 ITerm完成的,終端上裝的是oh-my-zsh (https://github.com/robbyrussell/oh-my-zsh)vim

 

1、獲取遠程倉庫ssh

爲了方便作一些git相關的基礎操做,就是使用在github上Fork的Masonry的倉庫作實驗吧,而後基於此Fork的倉庫來展開接下來的相關內容。分佈式

  

 

第一步要作的就是將遠程倉庫中的代碼克隆到本地,git clone 命令作的就是這件事情。其後邊跟的參數就是上述截圖中的地址,其具體操做以下所示:url

  

 

在第一部分咱們就先簡單的看一下 git clone 的演示操做。首先使用了git clone 命令將遠端的代碼以及相關分支信息clone到本地,而後在本地進行了一次提交(git commit), 最後將提交push到遠端。在接下來的幾篇博客中會陸陸續續的介紹到,在此就先很少說了。spa

  

 

 

二. 由 git status 命令引發的其餘命令命令行

咱們可使用 git status 命令來查看相關文件的狀態,在下方的操做中首先咱們對README.md文件使用vim編譯器進行修改並保存, 而後建立了一個名爲NewCreateFile的文件。並使用git status命令來查看其相關的狀態。版本控制

從下方輸出的結果中不難看出README.md的文件狀態爲 modified, 也就是被修改了,更詳細的提示爲 「Changes not stagged for commit」, 也就是說文件被修改了,可是尚未在提交(commit)前進行存儲(staged)。而且給了相關的提示,可使用 git add <文件名>命令進行存儲,或者使用 git checkout -- <文件名> 命令放棄在工做目錄中的修改。blog

而咱們剛建立的 NewCreateFile 文件處於Untracked (未被跟蹤的狀態),而且可使用git add <文件名>來將該建立的NewCreateFile添加到能夠被提交(commit)的內容當中去。而且還給出了一條建議,能夠對 NewCreateFile 文件使用 git commit -a 來直接進行提交。

若是你對git的各類狀態比較熟悉了,也可使用 git status -s 來查看簡寫的狀態,這種簡寫的狀態和SVN上的差很少 M - 被修改,A - 被添加,D - 被刪除,R - 重命名,?? - 未被跟蹤 等等,下方遇到其餘的狀態符號時在一一解釋。

  

 

根據上面git status命令的提示內容,咱們至少能夠獲得三種命令的使用方式:

  • 暫存文件的命令: git add <文件名>
  • 放棄未暫存文件的修改命令: git checkout -- <文件名>
  • 將被修改的文件暫存並提交的命令: git commit -a 

 

一、git add

接下來咱們能夠看一下git add的命令,下方分別將上述兩個文件進行了add, 也就是將文件進行暫存。暫存後,使用了git status命令查看狀態,提示這些修改能夠被提交了,而且還可使用 git reset HEAD <文件名>來取消相關文件的暫存。使用 git status -s 命令來查看 狀態標記由原來的紅色改爲了綠色,而且NewCreateFile的狀態標記由??變成了 A  (新添加文件)。

  

 

二、git reset HEAD 

接下來咱們根據提示,看一下 git reset HEAD <文件名> 命令的操做,下方分別對已經暫存的兩個文件執行了 git reset HEAD <文件名>操做,以下所示。從操做後的結果能夠看出,兩個文件的狀態是一晚上回到了解放前,又回到了以前暫存的狀態。

  

 

三、git checkout -- <文件名>

接下來咱們在看一下對未暫存的修改文件進行回滾的操做命令: git checkout -- <文件名>,根據上面的提示咱們能夠知道該操做能夠放棄對某個爲暫存的文件的修改。接下來咱們就來看一下這個命令的操做。不過有一點須要注意,該操做若是生效了,再想找回被丟棄的內容就找不回了。也就是說git checkout -- <文件名>是不可逆的,由於其回滾的內容並無在git中進行暫存和記錄。從下方的操做咱們能夠看出被修改的README.md回到了未被修改的狀態以前。

  

 

四、git commit -a

接下來咱們來看一下上面提到的命令git commit -a 的操做,首先咱們再次對README.md進行修改,而後查看一下狀態。接着使用 git commit -a -m "提交說明" 來進行添加和提交。從該命令執行後的狀態中咱們能夠看到,git commit -a 只對 狀態爲M的文件有用,而對新增而爲添加的問題是不起做用的,由於咱們新添加的文件NewCreateFile仍然處於 Untracked 狀態中。

  

 

咱們可使用 git add 命令對 NewCreateFile 文件進行暫存,使用 git commit 命令對暫存的內容進行提交。提交後,咱們查看狀態時看到一個提示, 大概是說你的分支已經領先遠端的主分支2個提交,可使用 git push 操做來發布你本地的提交。

  

 

五、git push

下方是git push操做的相關內容,我本地是配了github的ssh-key的,不過以前clone的時候使用的是https的方式,須要在第一次PUSH的時候都要求輸入用戶名和密碼。每次都輸入用戶名和密碼挺麻煩的稍後咱們將使用git的其餘命令將其解決掉。

  

 

push完畢後,咱們能夠動github上相應的倉庫中能夠看到其相關的修改內容了,具體以下:

  

 

由上面的內容,不難發現,從一開始的git status命令,根據相關提示,引出了其餘相關命令。下方是對其相關命令的總結:

  • git status : 查看當前倉庫中文件的狀態。
  • git status -s : 文件狀態的簡寫(M - 修改, A - 添加, D - 刪除, R - 重命名,?? - 未追蹤)。
  • git add <文件名> :將後方緊跟的文件進行暫存,以便commit使用。
  • git reset HEAD <文件名> : 將已經暫存的文件進行撤銷,回到未暫存的狀態。
  • git checkout -- <文件名> :撤銷對還沒有暫存文件的修改,該操做不可逆,慎用。
  • git commit -a : 對那些被修改的文件單還沒有暫存和提交的文件進行暫存和提交。注意:對未暫存的新增文件無效。
  • git commit : 對暫存區的文件進行提交到本地倉庫。
  • git push : 將本地倉庫已經提交的內容發佈到遠端。

 

 

3、查看和修改遠端地址

一、添加遠端倉庫地址

根據上面的操做能夠看到,上面的遠端連接是https的。由於我本地是賠了github的ssh-key的,因此也是支持ssh的連接的。下方咱們將根據 git remote 遠程倉庫操做來添加上ssh的倉庫地址。下方是一系列的操做:

  • 首先經過 git remote -v 命令來查看當前倉庫的遠端地址,從下方看到是 https格式的。
  • 而後在經過 git remote add 遠端倉庫地址別名 <url> 來添加一個新的倉庫地址,下方添加的是一個ssh的倉庫連接。
  • 接着咱們再次對遠端倉庫的連接查看時,就會看到相應的新添加的倉庫地址。
  • 而後咱們隊README文件作了點修改,並push遠端。在 push 時咱們選擇了後來添加的新的遠端倉庫,能夠看出使用的是別名。

  

 

下方是push後從github上對應的倉庫看到的相關內容,也是能夠看到的修改的相關內容的。

  

 

二、遠端倉庫地址刪除和重命名

從上面的內容不難看出,兩個倉庫地址實際上是重複的。如今咱們不必都將其進行存儲了。咱們要刪掉那個https的倉庫,下方是具體的操做步驟。

  • 首先經過 git remote -v 來查看目前現有的遠端倉庫。
  • 而後經過 git remote rm origin 命令來刪除別名爲 origin 的遠端地址,刪除後,再次查看時,origin的倉庫地址就木有了。
  • 緊接着使用 git remote rename origin_ssh origin 命令,將origin_ssh重命名爲origin便可。
  • 最後咱們還可使用 git remote show origin 命令來查看push到遠端的那個分支上,具體操做步驟以下所示。

  

 

今天博客就先到這兒,下篇博客會繼續聊git命令的其餘基礎操做。

相關文章
相關標籤/搜索