2014年3月24日 星期一

GitHub 學習資源 & 常用指令


GitHub ==> 一套線上版本控管服務

以下紀錄一些相關的學習網址:


Git 教學(1) : Git 的基本使用

30 天精通 Git 版本控管 (01):認識 Git 版本控管 - iT邦幫忙::IT知識分享社群

Git

Git - Book

Code School - Try Git

GitHub - GitHub初體驗

GitHub 官網




常用指令:
git init             建立Repository
git init --bare            建立Repository(裸)
git clone [REPO_URL]        建立副本Repository
git clone [repo_url] [dir]    建立副本Repository 到目的 Dir
git add .            目錄下所有檔案加入到 Git 版本控管(儲存庫)
git add -u             可以僅將「更新」或「刪除」的檔案變更寫入到「索引檔」中
git rm                刪除檔案
git mv                更名 搬動檔案
git reset             重設工作目錄的索引狀態
git reset --hard        重設工作目錄的索引狀態,還原到目前的最新版
git reset --hard HEAD        (版本尚未被成功合併)
git reset --hard ORIG_HEAD    重設工作目錄的索引狀態,還原到之前最新的版本(回到合併前)
git reset --soft "HEAD^"    「刪除最近一次的版本紀錄,但留下最後一次版本變更的異動內容」
git reset HEAD@{1} --hard    我們如果想要「取消」最近一次的版本紀錄
git status             查詢當前工作目錄的詳細狀態(儲存庫狀態--目前最新版 與 索引檔 之間的差異)
git status -s             查詢當前工作目錄的詳細狀態(簡)
git checkout master [fileName]    還原檔案
git commit            將新增/修改/刪除 提交 建立版本(版本資訊寫入到「物件儲存區」當中)
git commit -m "說明文字"    將新增/修改/刪除 提交 並附加訊息
git commit --amend        重新提交一次最後一個版本 (即 HEAD 版本)
git help [command]        查詢help文件
git log             查詢版本的歷史紀錄
git log -10             查詢版本的歷史紀錄,只查最新的10筆
git ls-files            列出所有目前已經儲存在「索引檔」中的檔案路徑
git ls-files -u            列出所有目前已經儲存在「索引檔」中的檔案路徑(所有已追蹤或未追蹤的檔案)
git gc                執行重新封(repacking)
git fsck            檢查 Git 維護的檔案系統是否完整
git diff            比對的是「工作目錄」與「索引」之間的差異(執行git add . 之前)
git diff [commitOId]        比對的是「工作目錄」與「指定 commit 物件裡的那個 tree 物件」
git diff HEAD            拿「工作目錄」與「當前分支的最新版」比對。不會去比對「索引」的狀態
git diff [oldCOId] [newCOId]    比較 commit Object,可以跳過「索引」與「工作目錄」的任何變更(比對tree 物件)
git diff --cached        等待被 commit 的檔案,按Q可離開,同 git diff --cached HEAD
git diff --cached [commitOId]    比對「當前的索引狀態」與「指定 commit 物件裡的那個 tree 物件」
git diff --cached HEAD        「當前的索引狀態」與「當前分支的最新版」比對。不會比對「工作目錄」的檔案內容
git diff --staged        等待被 commit 的檔案,按Q可離開,同 git diff --cached
git diff HEAD^ HEAD        比較【最新版的前一版】與【最新版】之間的差異
git push            合併/推送 至遠端 Repository
git push originRef masterRef
git push -u origin master    本地推送到遠端,GitHub 上的遠端儲存庫是完全空的 需下-u 參數
git push --set-upstream        加上 --set-upstream 參數 即可將本地分支註冊進 .git\config 設定檔
git push --all
git push --tags
git remote add [tag] [URL]    添加遠地參照(reftag)
git remote -v             可列出目前註冊在工作目錄裡的遠端儲存庫資訊(列出 origin 資訊)
git remote set-url origin git@github.com:doggy8088/frontend-tools.git    重設 origin 對應 url
git pull            合併/推送 至本地 Repository
git pull origin master
git fetch --all --tags
git fetch            將遠端儲存庫的最新版下載回來,下載的內容包含完整的物件儲存庫(object storage)
git ls-remote
git ls-remote origin         可列出所有遠端分支
git branch            顯示分支結構
git branch -a            顯示出所有「本地分支」與「本地追蹤分支」。
git branch -d [BranchName]    刪除分支
git branch -D [BranchName]    刪除沒有執行過「合併」的分支
git branch -r            顯示出【遠端分支】。
git branch [BranchName]        建立分支,但目前工作目錄維持在自己的分支
git checkout -b [BranchName]    建立分支,並將目前工作目錄切換到新的分支
git checkout [BranchName]    切換分支,工作目錄切換到其他分支
git cat-file -p commitOId    查看 commit 物件的內容
git cat-file -p treeid        查看 tree 物件的內容
git log --pretty=oneline    取得較為精簡的歷史紀錄(含commit Object ID及commit message)
git log --pretty=oneline --abbrev-commit    取得較為精簡的歷史紀錄(含commit Object ID及commit message)
git show            取得版本變更紀錄
git update-ref refName [oId]    自由建立「一般參照」,參照名稱可以指向任意 Git 物件,沒有限定非要commit物件不可。
git update-ref -d refName    刪除參照
git show-ref [ref or object_id]    顯示所有參照
git symbolic-ref        若要建立與刪除「符號參照」
git rev-parse            可以把任意「參考名稱」或「相對名稱」解析出「絕對名稱」ex:git rev-parse HEAD^
git stash            會將所有已列入追蹤(tracked)的檔案建立暫存版 同 git stash save
git stash -u            會包括所有已追蹤或未追蹤的檔案,全部都建立成暫存版
git stash pop            將 stash 暫存版本合併回主要版本
git stash list             列出目前所有的 stash 清單
git stash save -u     自訂暫存版的註解
git stash apply            將 stash 暫存版本合併回主要版本,但不清除stash資訊
git stash apply "stash@{1}"    取回「特定一個暫存版」
git stash drop "stash@{1}"     將特定暫存版刪除。
git stash clear            將全部暫存版刪除
git config --list        列出目前設定在 Git for Windows 工具下的所有選項
git config --list --system    篩選出關於系統層級的選項設定
git config --list --global    篩選出關於使用者層級的選項設定
git config --list --local    篩選出關於儲存區層級的選項設定
git config [config_section.config_name]                取得特定選項值 ex:git config user.name
git config --unset --system [config_section.config_name]    刪除特定選項設定
git config --edit --system        直接編輯設定檔
git config --global core.autocrlf true    自動辨識 CRLF 字元
git config --global help.autocorrec    自動訂正打錯的參數
git config --system color.ui auto    啟用訊息顏色
git config --local commit.template "G:\git-commit-template.txt"    自訂 commit 訊息範本(儲存庫層級)
git tag                列出所有標籤:
git tag [tagname]        建立輕量標籤
git tag [tagname] -d        刪除輕量標籤
git cat-file -t [tagname]    查看「輕量標籤」的內容
git tag [tagname] -a        建立標示標籤,需加入 -m
git reflog            印出所有「歷史紀錄」的版本變化
git reflog delete ref@{specifier}    刪除之前紀錄的某些紀錄
git merge [branchName]            執行合併
git merge [branchName] --no-ff        執行合併 停用 Git 的快轉機制
git merge origin/master
git config gc.reflogExpire        修改reflog預設的過期期限
    ex:git config --global gc.reflogExpire "never"
git config gc.reflogExpireUnreachable    修改預設reflog的過期期限
    ex:git config --global gc.reflogExpireUnreachable "7 days"
git reflog expire --expire=now --all    立即清除所有歷史紀錄
git revert [commit object id]        還原某一個版本的紀錄(某個版本的變更,透過「相反」的步驟把變更給還原)
git revert -n        使用 git revert 命令套用變更,但不執行 commit 動作
git revert --continue    代表你已經完成所有操作,並且建立一個新版本,就跟執行 git commit 一樣。
git revert --abort    代表你準備放棄這次復原的動作,執行這個命令會讓所有變更狀態還原,也就是刪除的檔案又會被加回來。
git revert [commit_id] -s    在訊息內容加上目前使用者的簽署名稱
git revert [commit_id] -e    在完成版本之前顯示編輯訊息的視窗
git cherry-pick [commit_id]    「手動挑出」你想套用的變更
git cherry-pick [commit_id] -e    「手動挑出」你想套用的變更 建立版本前先編輯訊息
git cherry-pick [commit_id] -n    「手動挑出」你想套用的變更 不建立版本 僅套用變更
git cherry-pick    [commit_id] -x    「手動挑出」你想套用的變更 並加註由哪個分支過來的訊息
git log [branchName]    查詢分支的紀錄
git rebase -i [commit_id]
git rebase ---continue
git config --global push.default simple  
    Git 的預設行為將會在 Git 2.0 之後發生改變,建議你透過設定 push.default 選項的方式明確指定 push 的方法
git shortlog -sne        取得版本庫中所有人的 commit 次數統,-n 參數還可以按照 commit 數量進行降冪排序
git shortlog            顯示出每個人最近 commit 過的歷史紀錄
git clean -n            從工作目錄清除不在版本庫中的檔案
git push origin :branchName    刪除遠端分支 同 git push origin --delete branchName
git blame            找出改壞程式的兇手
git blame [filename]
git blame -L [開始行數],[結束行數] [filename]

PS.
「目錄資訊」/「檔案內容」,即為 tree 物件與 blob 物件
blob 物件就是把原本的「檔案內容」當成 blob 檔案的內容 (blob 物件其實就是一個實體檔案)
--blob 物件就是只有內容的檔案,檔名是由內容產生
tree 物件,則是用來儲存特定資料夾下包含哪些檔案,以及該檔案對應的 blob 物件的檔名為何。
在 tree 物件中,除了可以包含 blob 物件的檔名與相關資訊,還可以包含其他的 tree 物件。所以
--tree 物件其實就是「資料夾」的代名詞
參照:
30 天精通 Git 版本控管 (05):了解儲存庫、工作目錄、物件與索引之間的關係
http://ithelp.ithome.com.tw/question/10133653

常見的 git 屬性範例:
0100000000000000 (040000): Directory
1000000110100100 (100644): Regular non-executable file
1000000110110100 (100664): Regular non-executable group-writeable file
1000000111101101 (100755): Regular executable file
1010000000000000 (120000): Symbolic link
1110000000000000 (160000): Gitlink

git diff 說明
git diff            => 工作目錄 vs 索引
git diff HEAD          => 工作目錄 vs HEAD
git diff --cached HEAD      => 索引 vs HEAD
git diff --cached         => 索引 vs HEAD
git diff HEAD^ HEAD       => HEAD^ vs HEAD

Git 參照名稱又有區分「一般參照」與「符號參照」,兩者的用途一模一樣,只在於內
容不太一樣。「符號參照」會指向另一個「一般參照」,而「一般參照」則是指向一個
 Git 物件的「絕對名稱」。

我們手邊改到一半的檔案,可能會有以下狀態:
* 新增檔案 (尚未列入追蹤的檔案) (untracked files)
* 新增檔案 (已經加入索引的檔案) (tracked/staged files)
* 修改檔案 (尚未加入索引的檔案) (tracked/unstaged files)
* 修改檔案 (已經加入索引的檔案) (tracked/staged files)
* 刪除檔案 (尚未加入索引的檔案) (tracked/unstaged files)
* 刪除檔案 (已經加入索引的檔案) (tracked/staged files)

救回誤刪的分支
1. 先利用 git reflog 找出該分支(最後一個版本的 object id (也就是 SHA1 格式的物件絕對名稱)
2. 執行 git branch feature 即可

在 Git 裡面,是透過 .gitignore 檔案來進行定義「忽略清單」,主要的目的是排除一些
不需要加入版控的檔案,列在裡面的檔名或路徑 (可包含萬用字元),都不會出現在
git status 的結果中,自然也不會在執行 git add 的時候被加入。不過,這僅限於
Untracked file 而已,那些已經列入版控的檔案 (Staged file),不受 .gitignore
檔案控制。

使用git rebase 如果你的分支是從遠端儲存庫下載回來的,請千萬不要透過 Rebase 修
改版本歷史紀錄,否則你將會無法將修改過後的版本送到遠端儲存庫!

Rebase 能做的事
1. 調換 commit 的順序
2. 修改 commit 的訊息
3. 插入一個 commit
4. 編輯一個 commit
5. 拆解一個 commit
6. 壓縮一個 commit,且保留訊息紀錄
7. 壓縮一個 commit,但丟棄版本紀錄
8. 刪除一個 commit

將遠端儲存庫的 master 分支取回,並合併到本地儲存庫的 master 分支,有兩種方法:
1. 使用 git pull origin master 指令
    git pull 指令幫我們一次做到 git fetch 與 git merge origin/master 這個動作
2. 使用 git fetch 指令後再執行 git merge origin/master 合併動作

轉換Subversion to GIT
http://ithelp.ithome.com.tw/question/10140481

第一次使用 GitHub for Windows 工具的時候,如果你有照著步驟登入與設定,這套工具會
預設幫你產生一對金鑰,然後該工具會自動上傳到 GitHub 的 SSH Key 專區,讓你日後不用
再輸入帳號密碼,就能順利的操作 GitHub 上的遠端儲存庫。

這一對金鑰,預設就放在 %USERPROFILE%\.ssh 資料夾下,如果你的 Windows 登入使用者名
稱為 Will 的話,這個路徑就位於 C:\Users\Will\.ssh 目錄下。這對金鑰的檔名分別是
 github_rsa (私鑰) 與 github_rsa.pub (公鑰)

沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...