作者:Peter 編輯:JackTian
來源:公衆號「傑哥的IT之旅」
大家好,我是躍哥。GitHub 是平時學習優秀代碼的途徑之一,在這裏能看到世界上優秀的開源代碼,和世界各地的碼農們交流,妥妥的交流聖地。
那今天,躍哥和大家分享下如何快速入門 GitHub。
快速入門GitHub
GitHub在程序開發領域家喻戶曉,現在幾乎整個互聯網的開發者都將版本管理工具GitHub作爲版本控制的首選,甚至像筆者這樣非開發者,一名和每天和數據打交道的人也在使用GitHub,目的主要有:
查找資料:GitHub上有很多國內外大神開源的數據挖掘、機器學習的資料、代碼,筆者直接fork或者clone下來學習
技術交流:通過對開源項目提出issue,能夠起到技術交流的效果
個人展示:現在互聯網領域中,如果一個程序員在GitHub上有一個很好的開源項目,必定是會備受關注。因此GitHub實際上是一個很好的展示個人實力的舞臺,或許它能夠讓你受到招聘人員的青睞
可以說,正式GitHub,讓社會化全員編程成爲了現實。
既然好處頗多,作爲互聯網界的一員,沒有理由不學好GitHub😄本文將詳細介紹GitHub的相關基礎操作,帶你快速入門GitHub
版本管理
版本管理就是管理更新的歷史記錄。Git出現之前,人們主要是使用Subversion(簡稱爲SVN)作爲版本控制的工具。
SVN
SVN是屬於集中型的版本管理系統,其特點是將倉庫集中存放在服務器中,所以只存在一個倉庫。集中型將所有特點是方便管理,但是如果開發者所處的環境無法聯網,則無法獲取到最新的源碼,進而無法進行開發工作。
Git
Git是分散型的版本管理系統。從下圖中我們可以觀察出來,GitHub將倉庫fork給每個用戶。fork的倉庫和原始的倉庫是兩個不同的倉庫,開發者是可以隨意編輯的。
Fork的過程其實就是將某個倉庫複製到自己的賬戶下
什麼GitHub
GitHub是一個基於Git的代碼託管平臺。如果是付費用戶可以建立自己的私人倉庫,一般用戶的話只能建立公用倉庫,也就是說倉庫的代碼必須是公開的。到底Git和GitHub有什麼區別呢?
在Git中,開發者將源代碼存入名叫“Git倉庫”的資料庫中,方便使用;而GitHub則是在網絡上提供Git倉庫的一項服務
GitHub上公開的源代碼都是通過Git進行管理的。
安裝與配置Git
安裝
現在筆者使用的MacOS
系統,是自帶Git
的。關於Windows系統下安裝,請參考如下文章,講解的非常詳細。
Windows系統Git安裝教程(詳解Git安裝過程):
https://www.cnblogs.com/xueweisuoyong/p/11914045.html
配置
首先需要設置使用Git時候的名字和郵箱,名字需要使用英文
git config --global user.name "Firstname Lastname" # 名稱
git config --global user.email "[email protected]" # 郵箱
# ~/.gitconfig中以如下形式輸出文件
[user]
name = Firstname Lastname
email = [email protected]
需要注意的是:
GitHub上公開倉庫的時候,名字和郵箱會一同被公開,所以請不要使用不便公開的隱私信息
程序員來自世界各地,請使用英文,不要使用漢字;如果不想使用真名,可以使用網站的暱稱
如何提高命令輸出的可讀性?
git config --global color.ui auto # 將color.ui 設置成auto
創建賬戶
進入創建用戶的頁面:http://github.com/join,填寫如下的信息在點擊Create an accout
即可
配置SSH
GitHub上連接現有倉庫的認證,是通過使用了SSH的公開密鑰認證方式進行的。現在我們需要創建公開密鑰所需的SSH Key,並將其添加到GitHub。
ssh-keygen -t rsa -C # 創建SSH Key
接下來需要輸入兩次密碼,最終會生成兩個文件:
id_rsa:私有密鑰
id_rsa.pub:公開密鑰
下面我們需要在GitHub中添加公開密鑰,今後就可以使用私有密鑰進行認證。點擊右上角的賬戶設定按鈕:
進入settings之後,添加新的SSH Key
接下來會出現Title和Key兩個輸入框,在Title中輸入適當的密鑰名稱,Key部分複製上面id_rsa.pub文件中的內容
cat ~/.ssh/id_rsa.pub # 查看內容
添加完成之後,會在我們的郵箱中收到一封提示“公開密鑰添加完成”的郵件,確認即可。這樣便完成了整個手中的私人密鑰和GitHub的認證和通信問題,驗證一下:
ssh -T [email protected]
在接下來的頁面中輸入密碼和yes即可完成驗證。
建立倉庫
首先我們必須明白一點:倉庫有兩種
遠程在GitHub上的倉庫:遠程倉庫
在自己本地的倉庫:本地倉庫
本文是以MacOS系統爲例,基於Linux;如果是想學習Windows下的倉庫創建,請參考下文,講解的很詳細:
Git使用(10分鐘入門):
https://www.jianshu.com/p/09f243768cf6
遠程倉庫
1、建立遠程倉庫需要我們先登陸自己的GitHub賬號,再進行建倉。
2、我們創建一個git_start
的倉庫
倉庫的名字
倉庫的簡單描述
不要在遠程倉庫添加README.md文件。我們使用手動push的方式來添加
3、倉庫解釋
打開上面我們創建好的倉庫,會出現如下的內容(先寫上註釋,後面慢慢解釋)
echo "# git_start" >> README.md # 往README.md中寫入內容
git init # 初始化
git add README.md # 添加文件
git commit -m "first commit" # 提交併註釋
git branch -M main # 提交分支
git remote add origin [email protected]:pidada/git_start.git # 建立遠程倉庫與本地倉庫的連接
git push -u origin main # 推送
本地倉庫
1、建立本地倉庫
所謂的本地倉庫,就是你自己電腦客戶端的倉庫。同樣地,筆者在本地建立了同樣名字的本地倉庫
git_start
,其實就是個文件夾
本地倉庫要和遠程倉庫保持一致
mkdir git_start # 創建文件夾,即倉庫
cd git_start # 切換到倉庫中
ls # 查看內容,目前是沒有任何內容
2、初始化操作
echo "學習GitHub的使用,快速入門" >> README.md # 往文件中寫入內容,後面可以更改
git init # 初始化
初始化之後會在當前目錄下自動生成一個.git
的文件。這個文件下存儲着管理當前目錄內容所需要的倉庫數據
3、查看待提交文檔
通過ls
查看已經有了README.md
文檔
git status # 查看待提交的文檔
4、提交文檔
我們將上面的README.md
文檔和生成的.git
文檔一併提交
git add . # 提交全部文件
git add README.md # 單獨提交一個文件
git commmit -m "2021-1-1" # commit提交,同時寫上備註:2021-1-1
# add 和 commit的同步操作
git commit -am "2021-1-1"
注意:執行了add操作,文件還沒有被上傳到Git遠程倉庫中,只是提交到了緩存區域
git commit -m "2021-1-1"
纔是真正地提交內容,同時寫上備註:將文件從緩存區提交到遠程
5、建立遠程倉庫連接並推送
git remote add origin [email protected]:peter/git_start.git # 建立連接
git push -u origin master # 推送到master分支
6、檢查
此時我們刷新遠程倉庫的頁面,會發現頁面更新了,也有了內容:
7、查看提交日誌
git log # 查看提交日誌
git log --pretty=short # 只顯示一行簡述信息
git log README.md # 只顯示指定目錄、文件的日誌
git log -p README.md # 只顯示指定目錄、文件的日誌修改前後的改動
commit
欄旁邊顯示的是指向這個提交的哈希值。Git的其他命令中,在指向提交時會用到這個哈希值
Author欄旁邊是Git設置的用戶名和郵箱地址
Date欄顯示的是執行日期和時間
最下面是提交信息,-m 參數後面的信息
8、修改README.md
文件
通過vim編輯器修改內容如下:
上面使用了Markdown語法,然後我們重新按照上面的命令執行一遍:
git status # 狀態是紅色
git add . # 提交到緩存區
git commit -m "修改README.md" # 記錄提交信息
# git remote add origin [email protected]:peter/git_start.git # 已經建立了連接,所以不必在執行此命令
git push -u origin master # 推到master分支
回顧下整個操作的過程:
建立遠程倉庫
建立本地倉庫
初始化本地倉庫
文檔提交到緩存區
緩存區推送到遠程倉庫
重要命令
我們總結一下上面操作中幾個重要的命令:
1、git status
查看倉庫中文件的狀態。如果有新的文件或者原來的文件有修改過,會出現紅色
2、git add
向緩存區中添加內容,緩存區是提交之前的一個臨時區域(Stage或者Index)
3、git commit [-m]
將暫存區中的文件保存倉庫的歷史記錄中;-m參數後面跟上提交信息:git commit -m "第一次提交"
4、git log
查看以往提交日誌信息:什麼人在什麼時候進行了提交或者合併等,以及操作前後有怎樣的差別
git log # 查看日誌
git log --pretty=short # 只顯示提交信息的第一行
git log README.md # 查看某個文件的提交信息
git log -p README.md # -p參數只查看提交的改動部分
5、git diff
查看工作樹、暫存區、最新提交之間的差別。
git diff # 查看當前工作樹和暫存區的差別
git diff HEAD # 查看本次提交和上次提交的差別;HEAD指向當前分支中的最新一次提交的指針
養成習慣:git commit之前先執行git diff HEAD命令來查看本次提交與上次提交之間的差別;HEAD指向當前分支中最新的一次提交的指針。
6、倉庫操作
-u
作用:將來運行git pull命令從遠程倉庫獲取內容時,本地倉庫就可以直接從origin的master分支中獲取內容,不需要添加其他的參數
git remote add origin [email protected]:github/peter/git_start.git # 添加遠程倉庫
git push # 推送到遠程倉庫
git push -u origin master # 推送到master分支下
git push -u origin feature_A # 推送到分支A
git clone 倉庫地址 # 將某個遠程倉庫的內容複製到本地
git push # 推送
git pull # 獲取最新的遠程分支內容
分支
master分支
master分支是Git默認創建的分支,其他所有的分支都是在這個分支的基礎上進行的。
不同的分支單獨進行各自的作業
該分支的作業完成之後再和master分支合併
進行完作業之後的合併操作:
分支相關命令
1、git branch-顯示分支
顯示分支一覽表:將分支名列表顯示出來,同時確認當前所在的分支;標有星號*
表示當前分支
git branch -a # 查看當前分支的相關信息
2、git branch feature-創建分支
git branch feature
3、git checkout feature-切換分支
git checkout feature
git checkout master # 切換到master分支
git checkout - # 切換到上一個分支
上面兩個命令的合併,創建新的分支並切換到新的分支:
git checkout -b feature # 切換到創建的新分支
4、git merge-合併分支
假設某個分支已經完成了作業需要和主分支master合併,使用如下語句:
git checkout master # 切到主分支
git merge --no-off feature-A # 合併分支
5、git log —graph-圖的形式查看分支
通過圖表的形式查看提交的內容
git log --graph
版本回溯
既然是版本控制系統,那麼對於不同版本的管理肯定是至關重要的。GitHub的另一個特徵便是可以靈活地操作不同的歷史版本。藉助分散倉庫的優勢,可以在不影響其他倉庫的前提下對歷史版本進行操作。
1、回溯到指定狀態
哈希值只要輸入4位以上就可以執行了
git reset --hard [哈希值] # 添加指定的哈希值,代表某個時間點的狀態
2、查看當前倉庫的全部執行過的操作日誌
記錄我們操作的每次命令
git reflog # 針對當前倉庫
git log # 查看以當前狀態爲終點的歷史日誌
所以我們可以先通過git reflog
來查看哈希值,再通過git reset —hard [哈希值]
回到某個狀態
3、修改上一條提交信息
使用git commit --amend
命令
git commit --amend
4、壓縮歷史
在合併特性分支之前,如果發現已經提交的內容中有拼寫等錯誤,可以先提交一個修改,然後將這個修改包含到前一個提交之中,壓縮成一個歷史記錄
git rebase -i
git rebase -i HEAD~2 # 當前分支下的兩個最新歷史記錄進行壓縮
5、添加提交一次完成
git commit -am "add和commit同時完成"
git reset詳解
命令
對版本回溯命令的詳解。git reset 命令用於回退版本,可以指定回退到某個具體的歷史版本。
git reset 命令語法格式具體如下:
git reset [--soft | --mixed | --hard] [HEAD]
--mixed
是默認參數,可以不帶,用於重置暫存區的文件與上一次的提交(commit)保持一致,工作區文件內容保持不變
soft
--soft
參數用於回退到某個版本
git reset --soft HEAD # 回退到上個版本
git reset --soft HEAD~3 # 回退到上上上個版本
hard⚠️
!!!⚠️謹慎使用--hard
參數,它會刪除回退點之前的所有信息
git reset --hard HEAD~3 # 回退到上上上個版本
git reset --hard 1de43 # 回退到指定版本
git reset --hard origin/master # 本地狀態回退到和遠程相同
HEAD
git reset HEAD^ # 回退到所有內容的上一個版本
git reset HEAD^ Git入門.md # 回退到Git入門.md文件的版本的上一個版本(指定版本的上個版本)
git reset 01b42 # 回退到指定版本,需要至少哈希值的前4位;可以通過git reflog命令先查看我們要回退的版本號的哈希值
git reset HEAD還能取消已緩存的內容。當我們對某個文件的內容進行了修改並且已經執行git add
之後,我們想取消緩存區的內容,使用如下命令:
git reset HEAD [filename]
關於HEAD 說明:
HEAD 表示當前版本
HEAD^ 上一個版本
HEAD^^ 上上一個版本
HEAD^^^ 上上上一個版本
以此類推…
可以使用 ~數字表示
HEAD~0 表示當前版本
HEAD~1 上一個版本
HEAD^2 上上一個版本
HEAD^3 上上上一個版本
以此類推…
總結
HEAD
指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id
。穿梭前,用
git log
可以查看提交歷史,以便確定要回退到哪個版本。要重返未來,用
git reflog
查看命令歷史,以便確定要回到未來的哪個版本。
0、重磅!兩萬字長文總結,梳理 Java 入門進階哪些事(推薦收藏)
![]()
本文分享自微信公衆號 - 程序員小躍(runningdimple)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。