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 (公鑰)
沒有留言:
張貼留言