# ===========================================================
# Course notes
# Site: Udemy
# Title: 掌握 Git & Github 程式時光機
# Lecturer: 廖洧杰 (六角學園)
# https://www.udemy.com/learninggit/learn/v4/overview
# last edit: 2018/03/10
# ===========================================================
01. install git: https://www.git-scm.com/
02. windows command lines:
- 開新檔案與展開列表在 git bash 上執行。
# 避免 windows 預設的命令提示字元沒辦法使用,一律都使用 git bash 。
- 移動路徑: cd [folder-path] # 可以直接輸入路徑或是用拖曳資料的方式較快
- 回上一層: cd .. PS:是兩個.. 不是一個 . (cd 和..中間有一個空格)
- 展開列表: ls
- 新增新資料夾: mkdir [folder-name]
- 刪除資料夾: rmdir [folder-name]]
- 新增新檔案:touch [folder-name]]
- 刪除檔案: rm [file-name]]
03. 初始設定git user name 及 user email address
> git config --global user.name ["user-name"] #設定使用者姓名
> git config --global user.email ["user-email"] #設定使用者email
> git config --list #查看設定
> git version #查看git安裝版本
- git 在windows 設定檔的位置 C:\Users\xxxxxx\.gitconfig
04. 建立本地數據庫 (lcoal repository)
- 建立資料夾,並進到資料夾。
> git init # initialized empty git repository
- 在 git bash裡會顯示 (master), 資料夾裡會產生 .git的資料夾
05. 工作目錄是保存目前正在處理檔案的目錄,Git 相關的操作都會在這個目錄下完成。索引位於工作目錄和數據庫之間,是為了向數據庫提交作準備的暫存區域,又被稱為staging area。
基本流程:
- 在工作目錄(working directory)下新增或編輯檔案後
- 加入索引(staging area)
- 提交更新到本地數據庫 (local repository)
> git add . #將全部檔案加入索引 (add後有一格空白才接 . )
> git add [file-name] #加入單一檔案進入索引
> git commit -m ["Description"] #將索引提交到數據庫並加上更新敘述
> git status #查詢資料夾內檔案更新的狀態
> git log #查詢提交到本地數據庫的紀錄, 到文件底部按"q"離開
06. 在工作目錄下建立 .gitignore 檔(文字檔),所有被記錄在 .gitignore的檔案/資料夾都會被git忽略記錄。語法可以是:
- index.html #直接記錄單一檔案名稱
- *.html #忽略全部附檔名為HTML的檔案
- css/ #忽略css資料夾及其內全部檔案
- https://github.com/github/gitignore #gitignore 大全
07. 有時候當檔案加到索引之後想要取消回到未加入前的狀態時,可以使用取消索引的指令。
> git reset HEAD #全部檔案取消索引
> git reset HEAD [file-name] #單一檔案取消索引
08. 在git中可以將檔案還原到最後一次做commit的狀態。
> git checkout [file-name] #恢復單一檔案到最後一次commit的狀態
> git reset --hard #還原整個工作目錄與索引,到最後一次commit的狀態
09. git & github 連結的基本操作 (全新empty的repository)
- 首先先在 github 上建立一個新的 repository (example: git_practice)
- 複製 github 上 repository 的連結 (example: https://github.com/hkshu001/git_practice.git)
- 使用 gitbash 進入想將 repository 存放的目錄 (如桌面上的"github")
> cd /c/Users/xxxxxxx/Desktop/github
- 將github上的reposiory 抓取下來
> git clone https://github.com/hkshu001/git_practice.git
- 用git bash進入到剛剛的的資料夾即可發現,此資料夾已成為git的本地數據庫。
> cd git_practice/
xxxx@xxxxx MINGW64 ~/Desktop/github/git_practice (master)
- 接著所有的操作跟在本地數據庫一樣,最後加上一個上傳更新遠端資料庫的步驟。
> git push
10. HEAD:目前所在位置的指標,是指出現在修改的某一個commit的位置,當我們checkout的時候其實就是移動HEAD,使其跳到另外一個commit或branch上。
> git branch #可以查看目前 HEAD 所在的分支
> git checkout [前4碼] #前四碼指的是 git log 上每次commit產生亂數的前4碼,可以移動 HEAD 到不同的 commit 位置
> git checkout master #將 HEAD 移動到 branch 'master'
> git checkout [branch-name] #將 HEAD 移動到 branch 上
因為HEAD被移動的時候會造成工作目錄的檔案內容改變,所以如果有檔案被修改過但是沒有commit或stash的檔案存在時會不能夠移動HEAD,也就是不能使用git checkout。
> git branch [branch-name] #新增一個分支
11. 在合併分支的基本流程:
> git checkout master #需先回到master branch
> git merger [branch-name] #合併分支
- 在合併分支時,若兩個檔案之間沒有衝突 (更動的code不在同一處),git 會做automerge,如果有衝突,則需在檢視存檔後,再做一次 add & commit。
12. 就像大多數的版本管理系統,git具備在特定commit時間點加入標籤去註明其重要性的功能。一般而言,我們會使用這個功能去標記出發行版本(如V1.0等等)。
> git tag #查詢目前既有標籤
> git tag [tagname] #新增標籤
> git tag -am ["tag Description"] [tagname] #新增標籤並具有敘述
> git tag -n #查詢標籤及其敘述內容
> git tag -d [tagname] #刪除標籤
> git checkout [tagname] #將 HEAD 移動到[tagname]的commit位置
13. 有時工作做到一半需要暫時的離開目前工作點,但是有不想把做一半的工作提交,則可以使用stash 做資料的暫存
> git stash #暫時儲存當前目錄
> git stash list #瀏覽git stash 列表
> git stash pop #還原最後一次的暫存
> git stash drop #清除最後一次暫存
> git stash clear #清除全部暫存
14. 在之前所提到上傳到遠端數據庫所使用的 git push,只有在單一遠端數據庫及單一分支master的單純使用環境下適用,當有多個遠端數據庫及分支時,則需要寫出完整的數據庫名稱與分支名稱。
> git remote #查詢遠端數據庫名稱
> git remote -v #查詢遠端數據庫名稱且在名稱後方顯示其URL
- 當我們從github clone資料下來,git 複製儲存數據庫會使用預設的名稱 "origin"
> git push [remote-name] [branch-name] #將檔案發佈到遠端數據庫上
> git remote rename [original remote-name] [new remote-name] #更名遠端儲存庫
15. 另外,執行 git pull 一般來說會從當初複製時的來源儲存庫擷取資料並自動試著合併到目前工作的版本。在多人遠端協同工作的情形下,保持本地端數據庫與遠端數據庫同步是十分重要的事情。
> git pull #擷取遠端數據庫資料
16. github亦可以當作一個網頁空間,來存放靜態的網站。在進到github的repository內,選擇
settings在GitHub pages的欄位裡,將 source 選 "master branch"
----------------------------------------------------------------------------
沒有留言:
張貼留言