# 基本指令
– 初始化
$ git init
– 顯示設定值
$ git config –list
or
$ git config -l
– 設定顯示使用者名稱
$ git config –global user.name (名字)
– 設定顯示信箱
$ git config –global user.email (信箱)
– 清除用戶(慎用)
$ git credential-manager delete https://github.com
– 加入索引(清單)
$ git add (. 全部 | 檔案名)
– 放入儲存庫
$ git commit [檔案名] -m (描述)
– 當前狀態
$ git status
– 詳細 commit 紀錄
$ git log
– 簡易 commit 紀錄
$ git log –oneline
– 將檔案從”工作目錄”移除
$ git rm (檔案名)
– 將檔案從”索引”移除
$ git reset [檔案名]
or
$ git rm –cached (檔案名)
– 返回至指定 commit 的狀態
$ git reset –hard (CommitId前六碼)
– 查看指令
$ git –help
or
$ git (指定功能) -h
# 分支
– 顯示當前分支
$ git branch
– 建立分支
$ git branch (分支名)
– 切換分支
$ git checkout (分支名)
– 建立分支並切換分支
$ git checkout -b (分支名)
– 刪除分支(要先跳出要刪除的分支)
1. $ git branch -d (分支名)
2. $ git branch -D (分支名)
– 恢復刪除的分支
1.查詢指令紀錄
$ git reflog
2.恢復分支至 commit 節點
$ git branch -d (分支名)
# 分支合併
– 將分支合併至主分支(master),先將分支切換至master
1. $ git checkout master
2. $ git merge (分支名)
– 恢復至合併前
$ git reset –hard (合併前最後一次commit節點ID)
or
$ git reset –hard ORIG_HEAD
– 快轉合併(Fast-Forward),前提是開分支後,master沒有提交新的commit
$ git merge (分支名) => 有使用快轉合併
$ git merge –no-ff (分支名) => 不要使用快轉合併
– 分支合併衝突(分別在主分支和分支修改同一檔案)
1. $ git merge (分支名) => 此時會產生衝突,點開衝突檔案並選擇要合併哪個版本
2. $ git add (衝突檔案名)
3. $ git commit [檔案名] -m (描述)
– 重新處理衝突問題,返回至合併前
$ git reset –hard HEAD~1 => 返回至上一個 commit 節點
– 輕量級標籤(在當前的commit加上標籤)
$ git tag (標籤名)
– 含有附註的標籤
$ git tag -a (標籤名) -m (描述)
– 查看當前標籤名及描述
$ git tag -n
– 刪除標籤
$ git tag -d (標籤名)
– 實際開發程式,分支規劃
1. “master” (正式上線分支)
2. “develop” (開發分支)
3. “hotfix” (緊急修補分支)
由 master 分支出來,可合併至 master 和 develop,用途是解決正式版上線的bug
4. “feature” (功能分支)
由 develop 分支出來,可合併至 develop,用途是開發新功能
5. “release” (釋出版本分支)
由 develop 分支出來,可合併至 master 和 develop。用途是開發下一版本,也就是開發完成準備釋出時要建立,此分支只會針對該本版 bug 做修改及 commit 而已,但請不要在 release 繼續開子分支。
# 暫存
– 暫存
$ git stash -u
or
$ git stash save -u (描述)
– 查看暫存清單
$ git stash list
– 恢復暫存
$ git stash pop
– 清除暫存
$ git stash clear
# GitHub建立遠端儲存庫 (初始 commit 由本地建立)
– 先至GtHub建立專案,是否建立 README.md 檔案,選否(不勾選)
– 將專案clone下來
$ git clone https://github.com/:GitHub帳號/:專案名.git
– 此時輸入指令 $ git log 會發現尚未有 commit 紀錄,所以要在本地端建版本(clone 下來時已建立 git 版控)
1. 建立 README.md 描述檔
$ echo “# Git Test” > README.md
2. 加入本地端”索引”
$ git add .
3. 提交 commit 紀錄
$ git commit -m ‘init’
4. 第一次上傳至遠端(GitHub)
$ git push origin master
or
$ git push -u origin master
=> 若加入 -u 參數,下次 pull 時可以直接不指定分支,直接參照 push 的分支
– 只查詢遠端名稱
$ git remote
– 查詢遠端詳細位置
$ git remote -v
# GitHub建立遠端儲存庫 (初始 commit 由遠端建立)
– 先至GtHub建立專案,是否建立 README.md 檔案,選是(勾選)
– 將專案clone下來
$ git clone https://github.com/:GitHub帳號/:專案名.git
– 此時輸入指令 $ git log 會發現已有 commit 紀錄,且資料夾內已有 README.md 檔案(clone 下來時已建立 git 版控)
# 將本地已存在的儲存庫(已有版控),上傳至遠端儲存庫
– 先在 GitHub 建立一個沒有”初始版本(commit)”的儲存庫
– 首先先將本地與遠端儲存庫建立連接
$ git remote add origin https://github.com/{GitHub帳號}/{專案名}.git
=> commad line
$ git remote set-url –add origin https://github.com/{GitHub帳號}/{專案名}.git
=> Git shell
– 確定是否有連成功
$ git remote
or
$ git remote -v
– 將本地上傳至遠端
$ git push -u origin master
※若程式有建立其他分支或是標籤,在 push 時,改以下指令
$ git push –all
or
$ git push –tags
# 遠端多人合作開發 – 單分支(master)
– 當遠端有更新,本地端也要先更新
$ git pull origin master
=> pull 等於同時執行 fetch + merge
or
$ git pull
– pull 下來之後查看圖示會發現像是分支的圖示(有耳朵),不想要的話就使用以下指令
$ git pull –rebase origin master
=> 使用–rebase ,後續 commit 的 ID 有可能會被改變,若新版本尚未 push 上去,則不用擔心其他人版本亂掉的問題。
– 不使用 pull ,改採 fetch + merge 的方式,先用 fetch 將最新版本抓下來
1. $ git fetch origin master
2. $ git merge origin/master
=> 將抓下的更新做合併
– 遠端多人合作使用單分支開發基本流程
1. 一開始先有人在遠端建好儲存庫,接著團隊中的每個人都 clone 一份完整的儲存庫到自己的電腦,接下來若有人寫了新的版本就 push 上遠端,其他人要這個新版本就 pull 下來自己的電腦,如此循環就完成了版本控制。
2. $ git clone https://github.com/{GitHub帳號}/{專案名}.git
3. $ git push -u origin master
4. $ git pull origin master