《GitHub 入門與實踐》 筆記
了解GitHub
Git 和 GitHub 的區別
在Git中,開發者將源代碼存入名為“Git倉庫”的資料庫中,並加以使用。而GitHub則是在網絡上提供Git倉庫的一項服務。這也就是說Github上公開的軟件源代碼都是有Git進行管理。
社會化編程
SOCIAL CODING.隨着GitHub的出現,讓所有人都平等的擁有了更改源代碼的權利,軟件開發者們才真正意義上擁有了源代碼.
Git 操作
Git 基本操作
-
git init ——初始化倉庫
-
git status ——查看倉庫狀態
-
git add ——向暫存區添加文件
-
git commit ——保存倉庫的歷史記錄,.可以將當前暫存區中的文件實際保存到倉庫的歷史記錄中.通過這些記錄,我們可以在工作樹中復原文件
-
-m參數:參數后為提交信息的概述(單行)
-
如果想要記述得更加詳細,不加-m,執行后編輯器會啟動,格式如下
第一行:用一行文字簡述提交的更改內容 第二行:空行 第三行以后:記述更改的原因和詳細內容
-
-
git log —— 查看提交日志
- 只顯示提交信息的第一行 git log --pretty=short
- 只顯示指定目錄/文件的日志 git log README.md
- 顯示文件前后的改動 git log -p README.md
-
git diff —— 查看更改前后的差別
- 查看工作樹和暫存區的差別 git diff
- 查看工作樹和最新提交的差別 git diff HEAD.(不妨養成這樣一個好習慣:在執行git commit前,執行git diff HEAD命令,查看本次提交和上次提交的差別,確認后再提交)
其他常用操作
#(項目在github上)直接clone 遠程倉庫
git clone git@github.com:michaelliao/gitskills.git
#(本地已有項目)上傳本地文件到遠程倉庫
git init
git remote add origin git@xxxx.git
git add .
git commit -m 'something'
git push origin master
git status
#可以丟棄工作區的修改 (commit 之前
git checkout -- file
#把暫存區的修改撤銷掉(unstage),重新放回工作區
git reset HEAD file
#從遠程倉庫更新最新代碼
git pull origin master
#清除提交緩存,然后可以重新添加
git rm -r --cached . /或者指定文件
分支操作
#創建新分支,並且切換到新分支
git checkout -b dev
# 查看當前分支
git branch
# 提交到當前分支
git push origin dev
# 合並到主分支,先切換到 主分支,再merge
git checkout master
git merge dev
#合並后,還需要再push一次
git push origin master
#刪除分支
git branch -d dev
git push origin :dev
tag 操作
git tag -a v1.0 -m 'some message'
git show v1.0
git push origin v1.0
# 刪除 tag
git tag
git tag -d v1.1
git push origin --delete tag v1.1
Git: 分支操作
-
git branch —— 顯示分支一覽表
-
git checkout -b —— 創建、切換分支
-
創建分支,並切換到分支,並提交
$ git checkout -b feature-A Switched to a new branch 'feature-A' //實際上等同於下面兩條命令 $ git branch feature-A $ git checkout feature-A
-
切回到master, git checkout master
-
切回到上一個分支,git checkout - , 用"-" 可以代替分支名
-
-
特性分支:是集中實現單一特性(主題),初次之外不進行任何作業的分支。
-
主干分支:可以發布軟件的穩定分支。有時可以用標簽Tag等創建版本信息,同時管理多個版本的發布。
-
git merge ——合並分支
-
假設 feature-A 已經開發完,先需要將它合並到master。
$ git checkout master $ git merge --no--ff feature-A // 為了在歷史記錄中明確記錄本次分支合並,我們需要創建合並提交。因此需要加上 --no--ff 參數
-
-
git log --graph —— 以圖表的形式查看分支。*該命令可以用圖表形式輸出提交日志,非常直觀
更改提交的操作
-
git reset ——回溯歷史版本
- 要讓倉庫的HEAD、暫存區、當前工作樹回溯到指定狀態,需要用到git reset --head 命令。只需要提供hash值,就可以完全恢復至該時間點的狀態
- git log 只能查看當前狀態為終點的歷史日志。用**git reflog **可以查看當前倉庫的操作日志。通過log查找hash值,通過reset --hard 命令恢復到回溯歷史前的狀態
-
消除沖突
-
解決沖突后,執行git add 和git commit命令
<<<<<<< HEAD -feature-A ======= -fix-B >>>>>>> fix-B
-
-
git commit --amend ——修改提交的comment (上一條),執行命令后,會啟動編輯器。執行 git log --graph 可以查看是否修改成功。
-
**git rebase -i ** —— 壓縮歷史日志。
-
git rebase -i HEAD~2 : 可以選定當前分支中包含HEAD(最新提交)在內的兩個最新歷史記錄對象,並在編輯器中打開
pick 7a33333 Add feature-C pick 6f11111 Fix typo #p,pick = use commit #r,reword = use commit,but edit the commit message #e,edit = use commit,but stop for emending #s,squash = use commit, but meld into previous commit #f,fixup = like 'squash',but discard this commit`s log message #x,exec = run command (the rest of the line) using shell //將6f11111 Fix typo的歷史記錄,壓縮到7a33333的Add feature-C里。將pick刪除,改寫為fixup pick 7a33333 Add feature-C fixup 6f11111 Fix typo
-
遠程倉庫操作
-
git remote add ——添加遠程倉庫
$ git remote add origin git@github.com:github-book/git-tutorial.git
-
git push —— 推送至遠程倉庫
-
git clone —— 獲取遠程倉庫
- 執行clone 命令后,默認處於master分支
- git check -b feature -D origin/feature-D
-
git pull —— 獲取最新的遠程倉庫分支
如果兩人同時修改了統一部分源代碼,push時就很容易發生沖突。所以多名開發者在同一個分支中進行作業時,為減少沖突情況發生,建議頻繁地進行push和pull操作
GITHUB 特殊技巧
搜索文件
在倉庫頁面按 ‘t’鍵,然后輸入要找的目錄或者文件的部分名稱,篩選器會在倉庫目錄和文件中進行篩選,搜索出要找的文件。這種方式比一級級查看目錄和文件要快得多。
查看差別
在github上,直接修改URL就可以讓用戶以多種形式查看差別。
查看分支之間的差異
https://github.com/rails/rails/compare/4-0-stable...5-0-stable
這樣就可以查看兩個分支之間的差異了。上面的網頁可以看到,兩個版本之間提交有上萬次,Files changed 有3315....
查看與幾天前的差別
https://github.com/rails/rails/compare/master@{7.day.ago}...master
這樣就可以查看這段期間內的差別。day 還有其他幾種形式。
- day
- week
- month
- year
查看與指定日期之間的差異
https://github.com/rails/rails/compare/master@{2016-09-01}...master
這樣便可以查看與指定日期之間的差別。
由於可以從多種角度查看差別,所以github也稱得上是一款優秀的源代碼查看器。善於利用上述技巧,能節省不少時間。
GMF 語法特殊用法
GMF github-flavored-markdown.MD語法不做過多介紹,只介紹其中一些特性。
語法高亮
def hello_world
puts 'hello world'
end
這樣一來,代碼就會被添加語法高亮,變得直觀易讀。
TaskList 語法
//本月計划的任務
- [ ] 完成ES6語法改造
- [ ] 完成非正常單詞改造
- [x] 學完GITHUB特殊技巧
- [ ] 完成ES6語法改造
- [ ] 完成非正常單詞改造
- [x] 學完GITHUB特殊技巧
這樣一來 ,這段文字就會標記成復選列表的樣式。這個復選樣式可以直接勾選或者取消。不必打開編輯器重新編輯,非常方便
在評論中應用表情
在評論中輸入 ":" 便會啟動表情自動補全功能。只需要輸入幾個與表情相關的字母,系統就會為您篩選自動補全的對象。具體表情見:http://www.emoji-cheat-sheet.com
Issue 技巧
在相關Issue中顯示提交信息
在Issue一覽表中,可以看到,每個Issue的標題下面都帶了諸如 “#21” 的編號。這樣只要在提交信息時,帶上 "#21" 就可以在Issue中看到該提交信息,使關聯的提交一幕了然
Close Issue
在提交信息中以下列任一一種格式描述提交信息,對應的Issure就會被close。
- fix #21
- fixes #21
- fixed #21
- close #21
- closes #21
- closed #21
- resolve #21
- resolves #21
- resolved #21
利用該方式,每次提交並且push后,就不必大費周章到GitHub的Issue中尋找相應的Issue 再手動Close。
GitHub 的其他功能
GitHub Pages
Github pages 主要用於在Github上托管靜態HTML,以便發布項目的Web頁。
由於可以綁定獨立的域名,人們也經常利用結合這個功能的Octopress 來搭建博客
Github Jobs
面向全世界招聘程序員的職位公告板。Jobs
Github Enterprise
企業版
Github API
GitHub 面向開發者公開了API。 具體見 https://developer.github.com
Pull Request
按部就班地創建GitHub賬號並公開自己的源碼並不是什么難事。Pull Request 是社會化編程的象征,可以說給開源開發世界帶來了一場革命。不會用這個功能,就等於不會用GitHub。。。(作者吹得有點過。。)
Pull Request 是GitHub的核心功能
Conversation
(以下技巧同樣可以應用在其他評論中,如Issue)
在評論中應用表情
(同樣應用在其他評論中,如Issue)在評論中輸入 ":" 便會啟動表情自動補全功能。只需要輸入幾個與表情相關的字母,系統就會為您篩選自動補全的對象。具體表情見:http://www.emoji-cheat-sheet.com
引用評論
只要選中需要引用的語句,然后按“R鍵”便會自動以引用的形式添加到評論欄,這樣一來就可以輕松便捷地引用評論了
讓Pull Request 更加有效的方法
在開發過程中發送Pull Request進行討論
避免一個功能在開發完成后才收到來自設計或者實現方面的指正,導致代碼需要大幅更改或者重新實現
**明確標出 “正在開發過程中” **
為了防止開發到一半的Pull Request 被合並,一般在標題前加上 “[WIP]” 字樣,WIP 是 Work In Progress的簡稱
不進行Fork 直接從分支發送Pull Request
一般來說,在Github上修改對方的代碼時,需要先將倉庫Fork到本地,然后再修改代碼,發送Pull Request。
但是,如果用戶對該倉庫有編輯權限,則可以直接創建分支,從分支發送 Pull Request