Git基本操做和GtHub 特殊技巧

《GitHub 入門與實踐》 筆記git

瞭解GitHub

Git 和 GitHub 的區別

在Git中,開發者將源代碼存入名爲「Git倉庫」的資料庫中,並加以使用。而GitHub則是在網絡上提供Git倉庫的一項服務。這也就是說Github上公開的軟件源代碼都是有Git進行管理。程序員

社會化編程

SOCIAL CODING.隨着GitHub的出現,讓全部人都平等的擁有了更改源代碼的權利,軟件開發者們才真正意義上擁有了源代碼.github

Git 操做

Git 基本操做

  • git init ——初始化倉庫
  • git status ——查看倉庫狀態
  • git add ——向暫存區添加文件
  • git commit ——保存倉庫的歷史記錄,.能夠將當前暫存區中的文件實際保存到倉庫的歷史記錄中.經過這些記錄,咱們能夠在工做樹中復原文件
    • -m參數:參數後爲提交信息的概述(單行)
    • 若是想要記述得更加詳細,不加-m,執行後編輯器會啓動,格式以下shell

      第一行:用一行文字簡述提交的更改內容
        第二行:空行
        第三行之後:記述更改的緣由和詳細內容
  • 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 .  /或者指定文件

分支操做api

#建立新分支,而且切換到新分支
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 —— 建立、切換分支
    • 建立分支,並切換到分支,並提交ruby

      $ 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 - , 用"-" 能夠代替分支名markdown

  • 特性分支:是集中實現單一特性(主題),初次以外不進行任何做業的分支。
  • 主幹分支:能夠發佈軟件的穩定分支。有時能夠用標籤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

相關文章
相關標籤/搜索