1. 程式人生 > >Github瞭解--Git指令

Github瞭解--Git指令


title: Github瞭解–Git指令
date:
tags: [Giehub學習, Git指令]
categories: [Git,Github,學習]
copyright: true

前言

Git 倉庫管理功能是 GitHub 的核心。因此,使用 GitHub 之前必須先掌握 Git 的相關知識,同時本地的裝置還要安裝 Git 的環境。這篇文章就寫寫安裝使用 Git 所需的知識及各種設定。

Git 安裝

  • 最近的 Mac os 中都預裝了 Git。而各版本的 Linux 中也都以軟體包(Package)的形式提供給使用者了,所以可以直接使用而不需要安裝。
  • 在 Wi n d o w s 環境中,最簡單快捷的方法是使用 msysGitA 。請按 照 Downloads 的 向 導 下 載 安 裝 包。安裝包下載完畢後,只要雙擊執行,按照嚮導一步步安裝即可。
    &nbsp順利安裝好 msysGit 之後,Git Bash 會作為一個應用程式新增進系統,接下來請啟動它。雙擊之後,會彈出一個名為 Git Bash 的命令提示符,它附屬於 msysGit。

Git 初始設定

首先來設定使用 Git 時的姓名和郵箱地址。名字要用英文輸入。

$ git config --global user.name "Firstname Lastname"


$ git config --global user.email "[email protected]"
這個命令,會在“~/.gitconfig”中以如下形式輸出設定檔案。
[user]
name = Firstname Lastname
email = [email protected]

使用前的設定

  • 在Github建立賬戶,並完善個人資訊
  • 設定 SSH Key(這個比較重要,用於倉庫連結)

執行下面的命令建立 SSH Key

$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.


Enter file in which to save the key
(/Users/your_user_directory/.ssh/id_rsa): 按回車鍵
Enter passphrase (empty for no passphrase): 輸入密碼
Enter same passphrase again: 再次輸入密碼
[email protected]”的部分請改成您在建立賬戶時用的郵箱地址。密碼需要在認證時輸入,請選擇複雜度高並且容易記憶的組合。
輸入密碼後會出現以下結果。
Your identification has been saved in /Users/your_user_directory/.ssh/id_rsa.
Your public key has been saved in /Users/your_user_directory/.ssh/id_rsa.pub.
The key fingerprint is:
fingerprint值 [email protected] The key's randomart image is:
+--[ RSA 2048]----+

id_rsa 檔案是私有金鑰,id_rsa.pub 是公開金鑰。

新增公開金鑰

在 GitHub 中新增公開金鑰,今後就可以用私有金鑰進行認證了。點選右上角的賬戶設定按鈕(Account Settings),選擇 SSH Keys 選單。點選 Add SSH Key 之後,會出現輸入框。在 Title 中輸入適當的金鑰名稱。Key 部分請貼上 id_rsa.pub 檔案裡的內容。id_rsa.pub的內容可以用如下方法檢視。
$ cat ~/.ssh/id_rsa.pub
ssh-rsa 公開金鑰的內容 [email protected]

SSH Keys新增成功之後,建立賬戶時所用的郵箱會接到一封提示“公共金鑰
新增完成”的郵件。

完成以上設定後,就可以用手中的私人金鑰與 GitHub 進行認證和
通訊了。可以用下面程式碼試試有木有成功。
$ ssh -T [email protected]
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is fingerprint值 .
Are you sure you want to continue connecting (yes/no)? 輸入yes

出現如下結果即為成功。
Hi hirocastest! You've successfully authenticated, but GitHub does not provide shell access.

Git 基礎操作

git init——初始化倉庫

要使用 Git 進行版本管理,必須先初始化倉庫。Git 是使用git init命令進行初始化的。請實際建立一個目錄並初始化倉庫。

$ mkdir git-tutorial
$ cd git-tutorial
$ git init
Initialized empty Git repository in /Users/hirocaster/github/github-book /git-tutorial/.git/

如果初始化成功,執行了 git init命令的目錄下就會生成 .git 目錄。這個 .git 目錄裡儲存著管理當前目錄內容所需的倉庫資料。在 Git 中,我們將這個目錄的內容稱為“附屬於該倉庫的工作樹”。檔案的編輯等操作在工作樹中進行,然後記錄到倉庫中,以此管理檔案的歷史快照。如果想將檔案恢復到原先的狀態,可以從倉庫中調取之前
的快照,在工作樹中開啟。開發者可以通過這種方式獲取以往的檔案。

clone 已有倉庫

$ git clone [email protected]:hirocastest/Hello-World.git
Cloning into 'Hello-World'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
$ cd Hello-World
這裡會要求輸入 GitHub 上設定的公開金鑰的密碼。認證成功後,倉庫便會被 clone 至倉庫名後的目錄中。將想要公開的程式碼提交至這個倉庫再 push 到 GitHub 的倉庫中,程式碼便會被公開。

git status——檢視倉庫的狀態

git status命令用於顯示 Git 倉庫的狀態。工作樹和倉庫在被操作的過程中,狀態會不斷髮生變化。在 Git 操作過程中時常用 git status命令檢視當前狀態,可謂基本中的基本。下面,就讓我們來實際檢視一下當前狀態。

$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

結果顯示了我們當前正處於 master 分支下。關於分支我們會在後面部落格裡寫,現在不必深究。接著還顯示了沒有可提交的內容。所謂提交(Commit),是指“記錄工作樹中所有檔案的當前狀態”。尚沒有可提交的內容,就是說當前我們建立的這個倉庫中還沒有記錄任何檔案的任何狀態。這裡,我們建立 README.md 檔案作為管理對
象,為第一次提交做前期準備。

$ touch README.md
$ git status
# On branch master
#
# Initial commit
`## Untracked files:#`

(use “git add …” to include in what will be committed)##README.mdnothing added to commit but untracked files present (use “git add” to
track)`

可以看到在 Untracked files 中顯示了 README.md 檔案。類似地,只要對 Git 的工作樹或倉庫進行操作,git status命令的顯示結果就會發生變化。

git add——向暫存區中新增檔案

如果只是用 Git 倉庫的工作樹建立了檔案,那麼該檔案並不會被記入 Git 倉庫的版本管理物件當中。因此我用 git status命令檢視README.md 檔案時,它會顯示在 Untracked files 裡。要想讓檔案成為 Git 倉庫的管理物件,就需要用 git add命令將其加入暫存區(Stage 或者 Index)中。暫存區是提交之前的一個臨時區域。

$ git add README.md
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#
(use "git rm --cached <file>..." to unstage)
#
#
new file:
README.md
#

README.md 檔案加入暫存區後,git status命令的顯示結果 發 生 了 變 化。 可 以 看 到,README.md 文 件 顯 示 在 Changes to be committed 中了。

git commit——儲存倉庫的歷史記錄

git commit命令可以將當前暫存區中的檔案實際儲存到倉庫的歷史記錄中。通過這些記錄,我們就可以在工作樹中復原檔案,記述一行提交資訊.我們來實際執行一下 git commit命令。

$ git commit -m "First commit"
[master (root-commit) 9f129ba] First commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md

-m 引數後的 "First commit"稱作提交資訊,是對這個提交的概述。記述詳細提交資訊
剛才我只簡潔地記述了一行提交資訊,如果想要記述得更加詳細,請不加 - m,直接執行 g i t c o m m i t命令。執行後編輯器就會啟動,並顯示如下結果。
#
#
#
#
#
Please enter the commit message for your changes. Lines starting
with '#' will be ignored, and an empty message aborts the commit.
On branch master
Initial commit
#
# Changes to be committed:
#
(use "git rm --cached <file>..." to unstage)
#
#
new file:
README.md
#

在編輯器中記述提交資訊的格式如下。
● 第一行:用一行文字簡述提交的更改內容
● 第二行:空行
● 第三行以後:記述更改的原因和詳細內容
只要按照上面的格式輸入,今後便可以通過確認日誌的命令或工具看到這些記錄。

在以 #(井號)標為註釋的 Changes to be committed(要提交的更改)欄中,可以檢視本次提交中包含的檔案。將提交資訊按格式記述完畢後,請儲存並關閉編輯器,以 #(井號)標為註釋的行不必刪除。隨後,剛才記述的提交資訊就會被提交。

中止提交

如果在編輯器啟動後想中止提交,請將提交資訊留空並直接關閉編輯器,隨後提交就會被中止。

檢視提交後的狀態

執行完 git commit命令後再來檢視當前狀態。

$ git status
# On branch master
nothing to commit, working directory clean

當前工作樹處於剛剛完成提交的最新狀態,所以結果顯示沒有更改。

git log——檢視提交日誌

g i t l o g命令可以檢視以往倉庫中提交的日誌。包括可以檢視什麼人在什麼時候進行了提交或合併,以及操作前後有怎樣的差別。關於合併我會在後面解說。我們先來看看剛才的 git commit命令是否被記錄了。

$ git log
commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <[email protected]>
Date:
Sun May 5 16:06:49 2013 +0900
First commit

顯示了剛剛的提交操作。commit 欄旁邊顯示的“9f129b…”是指向這個提交的雜湊值。Git 的其他命令中,在指向提交時會用到這個雜湊值。Author 欄中顯示我們給 Git 設定的使用者名稱和郵箱地址。Date 欄中顯示提交執行的日期和時間。再往下就是該提交的提交資訊。只顯示提交資訊的第一行.如果只想讓程式顯示第一行簡述資訊,可以在 git log命令後加上 --pretty=short。這樣一來開發人員就能夠更輕鬆地把握多個提交。

$ git log --pretty=short
commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <[email protected]>
First commit

只顯示指定目錄、檔案的日誌

只要在 git log命令後加上目錄名,便會只顯示該目錄下的日誌。如果加的是檔名,就會只顯示與該檔案相關的日誌。
$ git log README.md

顯示檔案的改動

如果想檢視提交所帶來的改動,可以加上 - p引數,檔案的前後差別就會顯示在提交資訊之後。

$ git log -p

比如,執行下面的命令,就可以只檢視 README.md 檔案的提交日誌以及提交前後的差別。

$ git log -p README.md

如上所述,g i t l o g命令可以利用多種引數幫助開發者把握以往提交的內容。不必勉強自己一次記下全部引數,每當有想檢視的日誌就積極去查,慢慢就能得心應手了。

git diff——檢視更改前後的差別

git diff命令可以檢視工作樹、暫存區、最新提交之間的差別。單從字面上可能很難理解,各位不妨跟著筆者的解說親手試一試。我們在剛剛提交的 README.md 中寫點東西。

# Git教程

這裡用 Markdown 語法寫下了一行題目。檢視工作樹和暫存區的差別,執行 git diff命令,檢視當前工作樹與暫存區的差別。
$ git diff
diff --git a/README.md b/README.md
index e69de29..cb5dc9f 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# Git教程

由於我尚未用 git add命令向暫存區新增任何東西,所以程式只會顯示工作樹與最新提交狀態之間的差別。這裡解釋一下顯示的內容。“+”號標出的是新新增的行,被刪除的行則用“-”號標出。我們可以看到,這次只添加了一行。
用 git add命令將 README.md 檔案加入暫存區。
$ git add README.md

檢視工作樹和最新提交的差別,如果現在執行 git diff命令,由於工作樹和暫存區的狀態並無差別,結果什麼都不會顯示。要檢視與最新提交的差別,請執行以下
命令。
$ git diff HEAD
diff --git a/README.md b/README.md
index e69de29..cb5dc9f 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+# Git教程

不妨養成這樣一個好習慣:在執行 git commit命令之前先執行git diff HEAD命令,檢視本次提交與上次提交之間有什麼差別,等確認完畢後再進行提交。這裡的 HEAD 是指向當前分支中最新一次提交的指標。
由於我們剛剛確認過兩個提交之間的差別,所以直接執行 g i t commit命令。

$ git commit -m "Add index"
[master fd0cbf0] Add index
1 file changed, 1 insertion(+)

保險起見,我們檢視一下提交日誌,確認提交是否成功。

$ git log
commit fd0cbf0d4a25f747230694d95cac1be72d33441d
Author: hirocaster <[email protected]>
Date:
Sun May 5 16:10:15 2013 +0900
Add index
commit 9f129bae19b2c82fb4e98cde5890e52a6c546922
Author: hirocaster <[email protected]>
Date:
Sun May 5 16:06:49 2013 +0900
First commit
成功查到了第二個提交。

本文參考:《Github 入門與實踐》

先寫到這裡吧,好累,儘量再接下的日子裡寫完這部部落格,完成我的學習任務。加油!

----2018年7月22號凌晨一點二十二完
----範兒