Github漫遊手冊

圖片描述
Github是一個面向開源及私有軟件項目的託管平臺,因爲用戶人羣中多可是男女比例嚴重失調,在程序屆被戲稱全球最大同性交友網站。當年Linux系統橫空出世,盛況空前,愈來愈多的程序猿加入到開發維護大軍中,如此龐大的項目體量沒有一個好的項目託管平臺怎麼行,因而Linux的創始人Linus大牛花了兩週的時間本身用C語言編寫了一個分佈式版本控制系統,就是Git,而後Git就迅速成爲最流行的分佈式版本控制系統,在2008年,Github網站上線了,它爲開源項目免費提供Git存儲,就在去年以75億美金的價格被微軟爸爸收購了(來自貧窮的凝視)。git

如今VS Code中內置Git,配置一下文件路徑和默認打開方式就能夠直接在VS Code中進行Git操做,十分方便快捷。
圖片描述github

全球不少頂級的科技公司都將本身的項目貢獻到Github上,同時咱們也能夠在上面找到許多很是優秀的開源項目。感謝Github讓咱們能夠在一個開放暢通的互聯網世界任意馳騁,如今Github已經成了產品開發過程當中的門面擔當,不少企業在面試的時候都會要求應試者提供下Github帳戶,一個出色的Github帳號確定會爲你在求職中增色很多。面試

簡單介紹了GitHub 的誕生和歷史,接下來就爲你們講解一下,如何使用操做。windows

這裏是Git的官方網站,涵蓋了很是全面的Git文檔:
https://git-scm.com/安全

市面上有不少Git教程,也有相關書籍,一般都是很厚一本,若是你是初學者,推薦廖雪峯老師的Git教程,基本功能都有涵蓋,由淺入深,可讓你快速上手使用。這篇文章就是基於他的教程,按照我本身的使用習慣,從一個新手角度再從新整理,認真學習後每一個人都會有不一樣的收穫,找到適合本身的就好。網絡

一、安裝GIt

首先須要在本身的電腦上本地安裝GIt,Mac系統自帶Git,windows系統須要下載安裝一下,過程很簡單方便,這裏就不贅述了,針對各個不一樣系統的具體安裝方法請參考廖雪峯老師的博客:
https://www.liaoxuefeng.com/w...ssh

二、註冊Github帳戶

在Github網站填寫用戶名、郵箱、密碼註冊我的帳戶。
圖片描述分佈式

註冊成功以後你就會進入到Github主頁,上方是導航欄,下方從左到右依次是:學習

倉庫:你建立的全部倉庫會在這裏顯示網站

時間線:你關注的人的一些活動,好比說他建立了新的倉庫,或者star、fork了某些項目等等這些操做就會顯示在這裏,相似微博動態。

發現新倉庫:這裏會給推薦一些標星比較高的優秀項目,相似於熱門微博。

簡單介紹下頭部導航欄的各個模塊:
圖片描述

LOGO:點擊進入Github首頁

搜索框:搜索用戶或者項目

Pull requestes:查看推送請求信息

Issues:查看問題推送信息

Marketplace:這裏提供最新的軟件,是代碼軟件集市
圖片描述

Explore:介紹Github上的熱門軟件

三、在本地配置Github帳戶

安裝Git完成以後,在命令行輸入:

$ git config --global user.name "你的Github用戶名"
$ git config --global user.email "你的Github註冊郵箱"

來配置你本身的Github用戶名和Email地址

四、建立SSH Key密鑰

github須要經過ssh協議來確認內容是你推送的,否則任何人均可以往你的倉庫中提交修改,就很危險了。使用多臺電腦開發就要配置多個SSH Key,經過SSH key來確保你能把內容推送到你本人的倉庫中。

首先在本地找到.ssh目錄,mac用戶使用快捷鍵:shift+command+G輸入~/.ssh快速查找。查看目錄下有沒有id_rsa(私鑰)和id_rsa.pub(公鑰)這兩個文件,若是沒有,能夠在終端中運行ssh-keygen -t rsa -C 「你的github郵箱"來生成ssh Key。
圖片描述
進入github網站在右上角點擊我的頭像,在下方找到Settings,在左側第六個選項中找到SSH and GPG Keys,點擊New SSH key,將你的id_rsa.pub裏的內容粘貼到Key中,填上任意的Title,保存,此時你就能夠在本地向遠程github倉庫推送內容。
圖片描述
圖片描述

五、將本地倉庫Repository同步到遠程

(1)初始化一個git倉庫:git init

執行完這條命令後當前目錄下會多一個.git目錄,這個目錄是git來跟蹤管理版本庫的,千萬不要把它刪除,看不到這個文件的修改一下本身的文件項,打開顯示隱藏文件。

(2)把文件添加到倉庫命令:

git add 文件名 將指定文件添加到暫存區,多個文件之間用空格隔開

git add /git add -A/git add --all 將工做區內容所有加入暫存區(包括新增、修改、刪除文件操做)

git add .將當前目錄下的全部內容所有加入暫存區(包括新增、修改文件操做)

執行完添加操做,沒有任何顯示就對了,在使用git的過程當中牢記:沒有消息就是好消息,只有出錯的時候它纔會給你報錯的提示信息。

這條命令能夠反覆屢次使用,將你須要添加的文件都提交到暫存區,而後執行一次git commit就能夠將屢次提交到暫存區的文件一次性提交到當前分支。

(3)把文件提交到當前分支

git commit -m 「提交說明」

git status 查看當前工做區的提交狀態。所有提交後顯示:

nothing to commit, working tree clean

git diff 查看修改的內容。會比對暫存區和工做區的文件內容。

(4)推送到遠程倉庫

首先新建一個遠程倉庫,在Github主頁右上角點擊加號,選擇第一個選項new repository,填寫Repository name倉庫名,Description描述,選擇public屬性,勾選Initial this repository with a README會自動生成一個MarkDown格式的README文檔。這樣咱們就在遠程建立好了一個Git倉庫。目前Github上建立公開倉庫是免費的,全部人均可以看到倉庫中的內容,若是想建立私人倉庫是收費的,它鼓勵你們開源。
圖片描述
建立好倉庫以後他分三種狀況給出不一樣提示:

在本地新建倉庫,並推送內容到遠程倉庫

咱們只須要按照以下指令,依次執行:

echo "# Git-Test-Demo" >> README.md 新建一個README文件並寫入內容

git init 生成.git版本庫

git add README.md將當前工做區的文件提交到暫存區

git commit -m "first commit」將暫存區的內容提交到當前分支

git remote add origin git@github.com:Hanxueqing/Git-Test-Demo.git 在本地關聯遠程庫

這裏你能夠選擇使用HTTPS鏈接或者SSH鏈接,使用HTTPS鏈接時每次推送都會要求有密碼驗證,相對來講比較安全,缺點是速度慢。若是使用SSH鏈接,第一次使用Git的clone或者push命令鏈接GitHub時,會獲得一個警告:

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?

輸入yes便可

Git會輸出一個警告,告訴你已經把GitHub的Key添加到本機的一個信任列表裏了:

Warning: Permanently added 'github.com' (RSA) to the list of known hosts.

這個警告只會出現一次,後面的操做就不會有任何警告了。

git push -u origin master將當前分支推送到origin主機的對應分支。

因爲遠程庫是空的,咱們第一次推送master分支時,加上了-u參數,將本地的master分支推送到origin主機,同時指定origin爲默認主機,在之後的推送或者拉取時就能夠簡化命令,不加任何參數直接使用git push來推送了。

若是本地已有倉庫,想的內容快速推送到當前倉庫,只須要執行以下兩條指令:

git remote add origin git@github.com:Hanxueqing/Git-Test-Demo.git

git push -u origin master

你也能夠從其餘版本控制系統如Subversion, Mercurial, or TFS project中導入倉庫

因爲我一開始新建倉庫的時候勾選了自動生成README文檔,而我本地的文件中又不存在這個文檔,因此向遠程倉庫push的時候會報錯,提示:

error: failed to push some refs to 'git@github.com:Hanxueqing/Maoyan-API.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

緣由是本身當前版本低於遠程倉庫版本,能夠在push以前先將遠程倉庫pull到本地,執行git pull origin master命令,再執行git push -u origin master命令推送到遠程倉庫。

或者新建立一個分支git branch 分支名,而後push到這個新分支上去git push -u origin 分支名。

這裏我就直接使用了強制push的方法:git push -u origin master -f,可是它會覆蓋遠程的文件,通常不建議使用,尤爲是多人開發的時候。

在本地執行完以上操做後就能夠終端中出現提交成功的命令。
圖片描述

此時咱們在github帳戶上進入以前建立的倉庫會發現,全部工做區的文件已經在遠程同步上傳好了。
圖片描述
簡單講解一下倉庫中各個模塊的功能:
圖片描述
Watch:相似於關注,watch了某個項目以後,之後只要這個項目有任何更新,你都會收到通知提醒。

Star:相似於點贊,在Github上得到標星可比在社交網絡中困難多了,通常能得到1000+star的項目就已經很是不錯了。前一陣子在開發圈大火的996icu項目目前標星已經達到了245k。
圖片描述
Fork:將這個倉庫的項目建立一個分支,添加到本身的倉庫中,你就能夠在原有倉庫的基礎上本身開發,等功能完善後再發起pull request請求與原倉庫合併分支,將功能進行整合。

Code:顯示該倉庫的文件列表。

Issues:主要用於BUG報告、功能添加、方向性討論等,相似於一個討論區留言板功能,將BUG以Issues的形式進行管理,解決掉後能夠手動關閉Issues。

Pull request:查看並管理別人發來的pull request請求。

Projects:這是一個很強大的項目管理模式,能夠將你的issues更好地進行管理,有人利用Project+Issues在Github上編寫技術博客。

感興趣的能夠關注下:

https://github.com/johnnian/Blog

Wiki:Wiki 是一種比 HTML 語法更簡單的頁面描述功能。經常使用於記錄開發者之間應該共享的信息或軟件文檔。

Security:安全警告

Insights:顯示倉庫的活動信息,檢測開發進度

Settings:設置,在這裏能夠對當前倉庫進行設置,例如倉庫名更改,描述信息更改,以及刪除當前倉庫,不過這個操做比較危險,它會讓你輸入當前倉庫名稱進行二次確認,若是是倉庫中有內容還會讓你輸入帳戶和密碼再次進行確認,安全等級很是高。
圖片描述
圖片描述
commits:提交日誌

branches:分支管理

releases:發行版本管理

contributors:參與開發的人員

Branch:master :切換分支,顯示不一樣分支下的文件列表

New pull request :向原有倉庫發起合併請求

Create new file :建立新文件

Upload files :上傳文件

Find files :查找文件

Clone or download :提供克隆、下載的https協議或者SSH協議

接下來介紹一些Git的經常使用基本操做,方便後續使用。

撤銷修改

這裏咱們得先明確幾個概念:工做區、暫存區、當前分支、遠程倉庫

工做區:咱們本身電腦裏的文件目錄

暫存區:.git目錄中的stage文件,暫時存放咱們對於文件的修改,git add就是把文件添加到暫存區。

當前分支:git爲咱們自動建立一個master主分支,git commit就是把文件修改提交到當前分支。

遠程倉庫:咱們一開始建立的Repository,git push就是把全部修改推送到遠程倉庫。

撤銷工做區的修改(此時你只是修改了文件,可是尚未進行任何git操做):git checkout -- file

撤銷暫存區的修改(此時你不只修改了文件,還git add將修改添加到了暫存區):git reset HEAD <file> 再執行git checkout -- file

撤銷提交到分支的修改(此時你不只修改了文件,還git add將修改添加到了暫存區,同時git commit提交到了當前分支):進行接下來要講到的版本回退操做

版本切換

若是你向當前的倉庫中屢次提交了修改文件,可使用git log查看完整的提交日誌,commit後面的一大串數字就是版本號,git經過讓內部HEAD指針指向特定版本號來實現版本的回退與前進。
image

若是你屢次提交,有一長串的提交日誌,不想顯示Author和Date,只須要第一行數據能夠運行git log --pretty=oneline

若是你以爲commitId太長,只想保留幾位有效數字,能夠運行git log --oneline --graph

回退命令:git reset --hard commit_id 能夠回退到指定版本

git reset --hard HEAD^ HEAD指向的是當前版本,HEAD就是上一個版本,上上個版本就是HEAD^,若是回退到更早期的版本能夠寫成HEAD-數字(回退到以前的多少個版本)

前進命令:執行過版本回退命令後再執行git log會發現此版本以後更新的版本不見了,此時也不用驚慌,它並無被刪除或者覆蓋,git提供了一個命令:git reflog來記錄你的每一次命令,只要找到你想恢復文件的commit id,再執行git reset --hard commit_id就能夠來到指定版本了。

文件刪除

(1)你在工做區刪除了某一個文件,想同步修改到遠程倉庫。

git status查看當前狀態,顯示當前工做區中該文件已被刪除,使用git rm 文件名命令將版本庫中的該文件刪除,而後git commit上傳到當前分支。

(2)你在工做區誤刪除了某一個文件,想從遠程倉庫將該文件恢復回來。(前提是你在工做區刪除的這個文件以前已經提交過版本庫)

git checkout -- 文件名

Git checkout實際上是用版本庫裏的文件替換工做區的文件,不管工做區是修改仍是刪除文件,均可以一鍵還原,可是你只能恢復文件到版本庫中的最新版本,若是你在提交版本庫後又作了一些修改可是沒有及時提交,git不會自動幫你記錄這些修改。

分支操做

首先咱們來理解一下分支的概念,以前已經提到過git會爲咱們自動建立一個master主分支,可是在多人項目開發的時候,咱們不能全部人都往主分支上提交修改,那樣存在很大的安全隱患,這時候git鼓勵咱們使用分支完成任務,HEAD指針指向當前分支,每一個人往本身的分支上提交文件,互不干擾,平時本身開發項目時也可使用分支來管理不一樣功能模塊,最後使用合併分支命令,將文件整合到一塊兒,這和直接在master分支上工做效果是同樣的,但過程更安全。

也就是說,在實際開發中,master分支應該是很是穩定的,僅用來發布新版本,平時不能在上面操做,具體的操做咱們能夠在dev上進行,把每一個人的分支合併到dev分支上,在版本發佈的時候再把dev的分支合併到master上。

建立分支

git checkout -b 分支名

git checkout命令加上-b參數表示建立並切換,至關於如下兩條命令:

$ git branch 分支名建立分支

$ git checkout 分支名切換分支

將本地建立的分支推送到遠程

git push origin 分支名

查看分支

git branch命令會列出全部分支,當前分支前面會標一個*號。

git branch -r查看遠程分支

git branch -a查看全部分支

合併分支

git merge 分支名 (注:合併前要切回要併入的分支,不能在當前分支下進行合併)

刪除分支

git branch -d 分支名

git branch -D 分支名強行刪除一個沒有被合併過的分支,默認狀況下是不容許刪除沒有被合併過的分支的。

克隆遠程倉庫

git clone 倉庫地址倉庫首頁能夠找到倉庫地址,經過clone命令克隆到本地。
圖片描述
關於Github的使用就簡單介紹到這裏,可是它的功能遠不止於此,知乎上有個回答,如何有效的使用Github,有人用它放簡歷、寫博客、寫書、看資訊,有人把它當朋友圈、微博,跟技術大牛互動,把連接貼上來,有興趣的能夠關注看看:

https://www.zhihu.com/questio...

總之,它就像一個寶藏,永遠有閃光點和值得學習的地方有待於咱們去發掘。

相關文章
相關標籤/搜索