Git 基礎架構
Git 基礎指令
- 查看版本:
git --version
- 設定個人資料
- 姓名:
git config --global user.name "nick"
- mail:
git config --global user.email "mail"
- 查看git設定檔:
git config --list
- 姓名:
- 初始化:
git init
- 查詢當前狀態:
git status
- 將檔案加到索引:
git add .
- 將索引檔加入Commit:
git commit -m "異動內容"
- 查詢Commit紀錄:
git log
- 下載遠端Repository:
git clone 遠端網址
- 拉取遠端Repository:
git pull
- 更新遠端Repository:
git push origin master
Git 遠端 Repository
Git 和 GitHub
- Git 是一個分散式版本控制軟體,可藉由它產生一個*儲存庫( git Repository)*。
- Github:支援 git 程式碼存取和遠端託管儲存庫的平台服務
- 關係像是本地端有一個 index.html,但可以放到 dropbox、Google Drive 進行雲端託管
熱門遠端儲存庫
- GitHub:擁有 GitHub Pages 功能,可擁有私人數據庫,免費方案是 3 人以下
- Bitbucket:可擁有私人數據庫,免費方案是五人以下團隊
- GitLab:自架 Git 伺服器,有提供 web 視覺化管理介面,常用於企業內部開發
賴人包:公司專案的小型團隊可用 Bitbucket,想要有一個公開對外網站的話,可用 GitHub
遠端儲存庫(Repository)操作
- 註冊遠端儲存庫:
git remote add origin 遠端儲存庫網址
- 更新資料到遠端 master 分支:
git push -u origin master
-u
是指他預設會推到哪個遠端數據庫服務(平常可省略)- origin 可以改成它的遠端數據庫名稱,例如
git push -u github master
Git 版本觀念
- branch:分支,預設分支叫
master
- HEAD:指標,代表目前版本的停留位置
- origin:預設遠端儲存庫名稱
- 查看版本內容:
git checkout 編號
- 返回最新版本:
git checkout master(分支名稱)
Git 還原觀念
- 新增檔案,檔案還沒加入追蹤,清空工作目錄
- 顯示這次操作會刪除的檔案:
git clean -n
- 強制刪除檔案:
git clean -f
- 顯示這次操作會刪除的檔案:
- 檔案已加入追蹤,清空工作目錄
- 還原工作目錄上已更改的檔案:
git checkout -- <file>
- 還原工作目錄上已更改的檔案:
- 檔案已加入到索引,退到工作目錄
git reset HEAD
版本還原
- 還原上個版本:
git reset HEAD^
- 還原前兩個版本:
git reset HEAD^^
- 還原前兩個版本,所有更新檔案都放棄:
git reset HEAD^^ --hard
- 觀看詳細歷史紀錄:
git reflog
- 還原到特定 commit:
git reset commit編號 --hard
- git reset 參數介紹
checkout 與 reset 差異
- checkout:移動
HEAD
- reset:移動
branch
Git 分支 (branch)
為什麼要分支
- 多人協作時,不可能都在 master
- 可以讓 master 都是正式版資料,可以開分支來做測試或開發,藉此不影響正式主機分支
分支簡介
- 分支就像便利貼,貼在某個commit上
- 分支合併:兩個commit進行合併
開分支
- 新增分支:git branch 分支名稱 (遠端分支名稱)
- 查看分支:
git branch
- 切換分支:
git checkout 分支名稱
- 刪除分支:
git branch -d 分支名稱 、-D 是強制刪除
常見分支
- master:預設分支
- develop(dev):開發分支
- fetaure:開發新功能分支
合併分支
- 合併分支:
git merge 分支名稱
- 取消快轉:
git merge 分支名稱 --no-ff
- 觀看線圖:
git log -—oneline --graph
- 還原合併前狀態:
git reset —hard ORIG_HEAD
快轉機制?
- 使用快轉(
預設
):本地端與遠端兩條相同branch合併時,可使用快轉 - 取消快轉(
--no-ff
):兩個不同branch合併時,建議取消快轉
,在線圖上會跑出支線
解決衝突
HEAD 是當前 HEAD 分支位置,develop 是你想合併的分支
1 | <<<<<<< HEAD |
取消 merge 衝突狀態:
git merge --abort
rebase
另一種合併方式
語法: git rebase 分支名稱
rebase前
rebase後
看起來是
剪下、貼上
,實際上是復製、貼上(SHA1值不一樣)
還原方式
git reset ORIG_HEAD --hard
git reflog
cherry-pick
撿別的分支的 Commit 過來合併
語法:git cherry-pick 編號1 編號2 編號3
參數:--no-commit
:撿過來但先不合併
Git 其它狀況
做到一半,臨時要切換到別的任務
- 先Commit,稍候再使用
git reset HEAD^
回來做 - 使用
git stash
暫存工作git stash list
:查看當前分支stash列表git stash pop stash@{編號}
:回來進行stash@{編號}的工作,並==移除==stashgit stash apply stash@{編號}
:拿取工作==不移除==stashgit stash pop "不指定stash@{編號}"
:從編號最小開始拿git stash drop stash@{編號}
:移除stash
不小心把ignore的檔案加進版控
加進版控會導致
.ignore
對該資料夾或檔案的ignore失效
1 .移除跟蹤
移除指定文件夾即文件夾下所有文件:git rm --cached --force -r .idea
移除指定文件:
git rm --cached --force ydq-api/ydq-api.iml
2. 進行commit,再下次commit就可ignore了
補充
Generating a new SSH key:
1 | ssh-keygen -t rsa -b 4096 -C "trojanhorse0077@gmail.com" |
Cli 終端機 基本指令
Windows | Mac/Linux | 說明 |
---|---|---|
cd 路徑 | cd 路徑 | 前往資料夾路徑 |
cd | pwd | 取得目前所在的位置 |
dir | ls | 顯示資料夾裡的檔案 |
mkdir | mkdir | 新增資料夾 |
無 | touch | 開新檔案 |
copy | cp | 複製檔案 |
move | mv | 移動檔案 |
del | rm | 刪除檔案 |
cls | clear | 清除畫面上內容 |