GitHub使用指南

1、使用Github(gitLab)的前期準備

一、本地環境,設置姓名和郵箱

  • 設置使用Git時的姓名和郵箱地址
git config --global user.name "Firstname Lastname"
git config --global user.email "your_email@example.com"
複製代碼

注意:
html

  • 1.查看用戶名和郵箱地址
$ git config user.name
$ git config user.email
複製代碼
  • 2.修改全局用戶名和郵箱地址
$ git config --global user.name  "username"  
$ git config --global user.email "email"   
複製代碼
  • 3.修改局部用戶名和郵箱地址:
$ cd ~/you project                       
$ git config user.name  "username"      
$ git config user.email "email" 
複製代碼
$ 第一步:控制面板 -----> 用戶帳戶                       
$ 第二步:用戶帳戶------> 管理windows憑據 
$ 第三步:找到對應的地址修改登陸名稱和密碼便可
``
複製代碼

二、設置SSH Key

  1. 首先,你得有個Github帳號(gitLab也適用)。鏈接Github上已有倉庫時的認證,是經過使用了SSH的公開密鑰認證方式進行的。 運行下面的命令建立 SSH Key。
$ ssh-keygen -t rsa -C "your_email@example.com"
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: 再次輸入密碼
複製代碼
  1. 輸入密碼後會出現如下結果。
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值 your_email@example.com
The key's randomart image is: +--[ RSA 2048]----+ | .+ + | | = o O . | 略 複製代碼

id_rsa 文件是私有密鑰,id_rsa.pub 是公開密鑰。git

  1. Git查看已生成公鑰和密鑰
  • 經過命令窗口,打開你的git bash 窗口
  • 進入.ssh目錄:cd ~/.ssh
  • 查看公鑰:cat id_rsa.pub 或者vim id_rsa.pub;或者你也能夠直接輸入命令 :cat ~/.ssh/id_rsa.pub;或者你也能夠直接打開你用戶(通常都是Administrator)下的.ssh文件夾,打開它裏面的id_rsa.pub 文件。
$ cat ~/.ssh/id_rsa.pub
ssh-rsa 公開密鑰的內容 your_email@example.com
複製代碼

若是經過上面的方式找不到公鑰,你就須要先生成公鑰了。github

三、添加公開密鑰

  1. GitHub 中添加公開密鑰,從此就能夠用私有密鑰進行認證了。
  2. 添加成功以後,建立帳戶時所用的郵箱會接到一封提示「公共密鑰添加完成」的郵件。 完成以上設置後,就能夠用手中的私人密鑰與 GitHub 進行認證和通訊了。讓咱們來測試下鏈接是否成功。
$ ssh -T git@github.com
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 複製代碼

出現以下結果即爲成功。web

Hi hirocastest! You've successfully authenticated, but GitHub does not provide shell access. 複製代碼

四、建立遠程倉庫

  1. 首先建立Github遠程倉庫
  2. clone已有倉庫
$ git clone git@github.com: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
複製代碼

而後,就能夠在本地開心的敲代碼了~~shell

2、Git實際操做

一、Git基本操做

  1. git init初始化倉庫 初始化倉庫成功後,,.git目錄裏存儲着當前目錄內容所需的倉庫數據。 在Git中,包含.git目錄的內容稱爲」附屬於該倉庫的工做樹「。文件的編輯等操做在工做樹中進行,而後記錄到倉庫中,以此管理文件的歷史快照。
  2. git status查看倉庫狀態
  3. git add向暫存區中添加文件 要想讓文件成爲Git倉庫的管理對象,就須要用git add命令將其加入暫存區。 暫存區是提交以前的一個臨時區域。
  4. git commit保存倉庫的歷史記錄 git commit命令能夠將當前暫存區中的文件實際保存到倉庫的歷史記錄中。經過這些記錄,咱們就能夠在工做樹中復原文件。
  • 記錄一行提交信息
$ git commit -m "First commit"
複製代碼
  • 記錄詳細的提交 若是想要記述得更加詳細,請不加 -m,直接執行 git commit命令。執行後編輯器就會啓動,並顯示以下結果。
# 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
複製代碼

在編輯器中記述提交信息的格式以下vim

  • 第一行:用一行文字簡述提交的更改內容
  • 第二行:空行
  • 第三行之後:記述更改的緣由和詳細內容
  1. git log查看提交日誌
  • 只顯示提交信息的第一行 $ git log --pretty=short
  • 只顯示指定目錄、文件的日誌 $ git log README.md
  • 顯示文件的改動
$ git log -p
$ git log -p README.md
複製代碼

參數有不少,用到就去查一下。windows

  1. git diff

git diff命令能夠查看工做書、暫存區、最新提交之間的差異。瀏覽器

  • 查看工做樹和暫存區的差異

執行 git diff命令,查看當前工做樹與暫存區的差異。 若是咱們還沒有用git add命令向暫存區添加任何東西,因此程序只會顯示工做樹與最新提交狀態之間的差異,也就不會顯示任何內容。安全

DELL@DESKTOP-L7RGC6H MINGW64 ~/Desktop/新建文件夾 (5) (master)
$ git diff
DELL@DESKTOP-L7RGC6H MINGW64 ~/Desktop/新建文件夾 (5) (master)
複製代碼
  • 查看工做樹和最新提交的差異

要查看與最新提交的差異,請執行如下命令。bash

$ git diff HEAD
複製代碼

不妨養成這樣一個好習慣:在執行git commit命令以前先執行git diff HEAD命令,查看本次提交與上次提交之間有什麼差異,等確認完畢後再進行提交。當前,你最好用webstrome或者其餘可視化視圖工具,更方便的查看。 這裏的 HEAD 是指向當前分支中最新一次提交的指針。

二、分支基礎操做

  1. git branch-顯示分支一覽表
  2. git checkout -b-建立並切換分支
  3. git merge-分支合併

合併分支時,加上--no-ff參數git merge --no-ff master_dev1,編輯器會啓動,用於錄入要提交的信息。

  1. git log --graph以圖表的形式查看分支(webstronme有更豐富的操做)

三、更改提交操做

  1. git reset回溯歷史版本

要讓倉庫的HEAD、暫存區、當前工做樹回溯到指定狀態 。只有提供目標時間的哈希值,並使用git reset --hard命令便可。

$ git reset --hard 47febf026b47194be1586a6457ed59987dbb333a
複製代碼
  1. git commit --amend修改提交信息(就是git commit -m時候的寫的信息)

要修改上一條提交信息,可使用git commit --amend命令。 執行命令後,編輯器會啓動,修改就是了。

  1. git rebase -i -壓縮歷史

四、推送至遠程分支

  1. git remote add-添加遠程倉庫

使用git remote add命令將其設置爲本地倉庫的遠程倉庫。

$ git remote add origin git@github.com:github-book/git-tutorial.git
複製代碼
  1. git push推送至遠程倉庫

將當前分支下本地倉庫中的內容推送給遠程倉庫,須要用到git push命令。

-u參數能夠在推送的同時,將 origin 倉庫的 master 分 支設置爲本地倉庫當前分支的 upstream(上游)。添加了這個參數,未來 運行 git pull命令從遠程倉庫獲取內容時,本地倉庫的這個分支就可 以直接從 origin 的 master 分支獲取內容,省去了另外添加參數的麻煩。

  • 推送至 master 之外的分支

除了 master 分支以外,遠程倉庫也能夠建立其餘分支。

$ git checkout -b feature-D
Switched to a new branch 'feature-D'
複製代碼

如今將它 push 給遠程倉庫並保持分支名稱不變。

$ git push -u origin feature-D
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:github-book/git-tutorial.git
 * [new branch] feature-D -> feature-D
Branch feature-D set up to track remote branch feature-D from origin.
複製代碼
  1. git clone獲取遠程倉庫
$ git clone git@github.com:github-book/git-tutorial.git
Cloning into 'git-tutorial'...
remote: Counting objects: 20, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 20 (delta 3), reused 20 (delta 3)
Receiving objects: 100% (20/20), done.
Resolving deltas: 100% (3/3), done.
$ cd git-tutorial
複製代碼

們用 git branch -a命令查看當前分支的相關信息。

  1. 獲取遠程的 feature-D 分支

將 feature-D 分支獲取至本地倉庫。

$ git checkout -b feature-D origin/feature-D
Branch feature-D set up to track remote branch feature-D from origin.
Switched to a new branch 'feature-D'
複製代碼
  1. git pull獲取最新的遠程倉庫分支 使用 git pull 命令,將本地的 feature-D 分支更新到最新狀態
$ git pull origin feature-D
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 3 (delta 1)
Unpacking objects: 100% (3/3), done.
From github.com:github-book/git-tutorial
 * branch feature-D -> FETCH_HEAD
 First, rewinding head to replay your work on top of it...
 Fast-forwarded feature-D to ed9721e686f8c588e55ec6b8071b669f411486b8.
複製代碼

若是兩人同時修改了同一部分的源代碼,push 時就很容易發生衝 突。因此多名開發者在同一個分支中進行做業時,爲減小衝突狀況的發 生,建議更頻繁地進行 push 和 pull 操做。

3、Github的注意功能

一、Pull Request

Pull Request 是本身修改源代 碼後,請求對方倉庫採納該修改時採起的一種行爲。Pull Request 概念圖以下:

二、倉庫的維護

Fork 或 clone 來的倉庫,一旦放置無論就會離最新的源代碼愈來愈遠。 一般來講 clone 來的倉庫實際上與原倉庫並無任何關係。因此咱們須要將原倉庫設置爲遠程倉庫,從該倉庫獲取(fetch)數據與本地倉庫進行合併(merge),讓本地倉庫的源代碼保持最新狀態。以下圖:

  • 倉庫的Fork與clone 將 octocat/Spoon-Knife 做爲原倉庫,在 GitHub 上進行 Fork,而後clone。
$ git clone git@github.com:hirocastest/Spoon-Knife.git
Cloning into 'Spoon-Knife'...
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 24 (delta 7), reused 17 (delta 1)
Receiving objects: 100% (24/24), 74.36 KiB | 68 KiB/s, done.
Resolving deltas: 100% (7/7), done.
$ cd Spoon-Knife
複製代碼
  • 給倉庫設置名稱 咱們給原倉庫設置 upstream 的名稱,將其做爲遠程倉庫。
$ git remote add upstream git://github.com/octocat/Spoon-Knife.git
複製代碼

從此,咱們的這個倉庫將以 upstream 做爲原倉庫的標識符。這個環境下只須要設定一次。

  • 獲取最新數據(fetch到的代碼,不會自動和本地代碼合併)

第一步:從遠程倉庫實際獲取(fetch)最新源代碼。 第二步:與本身倉庫的分支進行合併。要讓倉庫維持最新狀態,

$ git fetch upstream
From git://github.com/octocat/Spoon-Knife
 * [new branch] master -> upstream/master
$ git merge upstream/master
Already up-to-date.
複製代碼

!--注意--注意--git fetch 和git pull 的差異

  • git fetch 至關因而從遠程獲取最新到本地,不會自動merge,以下指令:
git fetch orgin master //將遠程倉庫的master分支下載到本地當前branch中
git log -p master  ..origin/master //比較本地的master分支和origin/master分支的差異
git merge origin/master //進行合併
複製代碼

也能夠用如下指令:

git fetch origin master:tmp //從遠程倉庫master分支獲取最新,在本地創建tmp分支
git diff tmp //將當前分支和tmp進行對比
git merge tmp //合併tmp分支到當前分支
複製代碼
  • git pull至關因而從遠程獲取最新版本並merge到本地

git pull origin master git pull 至關於從遠程獲取最新版本並merge到本地

補充

  1. fetch的時候本地的master[ID=1]沒有變化,若是與遠程倉關聯的那個版本號master[ID=2]被更新了。咱們接下來就是在本地合併這兩個版本號的代碼master[ID=3],此時會有三個版本號,可查可用。
  2. git pull的會將本地的代碼更新至遠程倉庫裏面最新的代碼版本。至於兩個版本號,代碼有丟失風險。

總結:如下借鑑文獻

不要用git pull,用git fetch和git merge代替它。 git pull的問題是它把過程的細節都隱藏了起來,以致於你不用去了解git中各類類型分支的區別和使用方法。固然,多數時候這是沒問題的,但一旦代碼有問題,你很難找到出錯的地方。看起來git pull的用法會使你吃驚,簡單看一下git的使用文檔應該就能說服你。 將下載(fetch)和合並(merge)放到一個命令裏的另一個弊端是,你的本地工做目錄在未經確認的狀況下就會被遠程分支更新。固然,除非你關閉全部的安全選項,不然git pull在你本地工做目錄還不至於形成不可挽回的損失,但不少時候咱們寧願作的慢一些,也不肯意返工重來。

三、接收Pull Request

點擊Pull Request 查看詳細內容。

點擊 Merge pull request 按鈕,Pull Request 的內容便會自動合併至倉庫。

注意:

在採納以前,請儘可能將接收到的 Pull Request 拿到本地開發環境中進行檢查,確認是否可以正常運行以及代碼是否安全。

3.一、 採納 Pull Request 前的準備

  • 代碼審查 在 GitHub 上能夠對 Pull Request 的具體的某行代碼進行評論。
  • 查看圖片的差異
  • 在本地開發環境中反映 Pull Request 的內容

下面咱們來說解收到 Pull Request 後在本地開發環境中進行實際檢查的流程。在本示例中,Pull Request 接收方的用戶名爲ituring,發送方的用戶名爲「PR 發送者」。

(1)將接收方的本地倉庫更新至最新狀態 首先,將 Pull Request 接收方的倉庫 clone 到本地開發環境中。若是已經 clone 過,那麼請進行 pull 等操做更新至最新狀態。

$ git clone git@github.com:ituring/first-pr.git
Cloning into 'first-pr'...
remote: Counting objects: 34, done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 34 (delta 10), reused 15 (delta 4)
Receiving objects: 100% (34/34), 89.48 KiB | 112 KiB/s, done.
Resolving deltas: 100% (10/10), done.
$ cd first-pr
複製代碼

(2)獲取發送方的遠程倉庫 將 Pull Request 發送方的倉庫設置爲本地倉庫的遠程倉庫,獲取發送方倉庫的數據。

$ git remote add PR發送者 git@github.com:PR發送者/first-pr.git
$ git fetch PR發送者
省略
From github.com:PR發送者/first-pr
 * [new branch] gh-pages -> PR發送者/gh-pages
 * [new branch] master -> PR發送者/master
 * [new branch] work -> PR發送者/work
複製代碼

注意:fetch以後,只是獲取了遠程倉庫的數據,這些數據還沒有反映在任何一個分支中。須要建立一個分支,用來顯示的承載fetch到的代碼

(3)先從接收者新建一個分支,和發送pull request的分支合併,測試功能。 從接收者的本地倉庫中,新建一個分支後,用這個分支和fetch到發送pull reuqest的遠程倉庫數據合併

$ git checkout -b pr1
Switched to a new branch 'pr1'
$ git merge PR發送者/work
Updating cc62779..243f28d
Fast-forward
 index.html | 2 ++
 1 file changed, 2 insertions(+)
複製代碼

(4)採納 Pull Request

完成上述內容後,若是 Pull Request 的內容沒有問題,大可打開瀏覽器找出相應的 Pull Request 頁面,點擊 Merge pull request 按鈕,隨後Pull Request 的內容會自動合併至倉庫。 不過,因爲咱們已經在本地構築了相同的環境,只要經過 CLI 進行合併操做再 push 至 GitHub,Pull Request 中就會反映出 Pull Request 被採納後的狀態。

更新中。。。

相關文章
相關標籤/搜索