簡單介紹Git版本控制Part-3
Tommy
git add -p
選擇部分內容加入暫存區(需有commit過才有效)
s 切割更小區塊
y 加入這個區塊到暫存區
e 取消這個區塊到暫存區
git checkout index.html
復原HEAD的index.html(修改過的檔案還原)
進入暫存區的部分不還原
git checkout commit index.html
復原commit的index.html
(但比對還是HEAD,預設加到暫存區,有修改還是要再次add)
git checkout commit
工作目錄和HEAD更新到這個commit
(不重設暫存區,但異動這個commit改過的檔案無法切換)
git log只會顯示HEAD之前的紀錄,git log --all才可看到全部
git revert commit
復原commit做的事情,重做一個新的commit
(會自動commit喔)
git revert commit -n
復原commit做的事情,不會重做一個新的commit
(不會自動commit喔)

git reset --hard
重設目前HEAD的工作目錄,清除暫存區
git reset commit --hard
(重設HEAD&工作目錄&目前分支)到commit,清除暫存區
git reflog查看HEAD移動的歷史紀錄
git reset --mixed
保持工作目錄不變,清除暫存區
git reset commit --mixed
保持工作目錄不變,重設(目前分支&HEAD)到commit,清除暫存區
用途:打散或合併commit
git reset --soft
基本上沒什麼用
(目前分支&HEAD&工作目錄&暫存區)都沒有改變
git reset commit --soft
重設(HEAD&目前分支)到commit,保留(工作目錄&暫存區)不變

checkout
vs
revert
vs
reset

分支

git branch
列出所有分支
git branch dev
在目前HEAD位置建立dev分支
git branch dev -d
刪除dev分支
git branch dev commit
在commit建立dev分支
建立分支HEAD指向誰?
還記得哪個指令可以移動HEAD嗎?
git checkout dev
因為checkout會將HEAD移到dev分支
(分支必須存在)

git checkout [commit] -b dev
在([commit] or 目前)位置建立dev分支,並且立刻切換過去
某些情況會切不過去
尚未commit並且修改切換目標分支有commit的檔案
此時會無法切換過去

正常切換
提示切換到master
帶異動切換
有修改list.txt並且套用到master

無法切換
因為a.txt在master也有被異動過無法套用
解決方法
1. reset 捨棄
2. commit 提交
3. stash 收藏
git stash save temp
將目前未commit的檔案收藏起來,取名叫temp
git stash list
列出所有收藏清單
git stash pop
取出最後一個收藏
commit越多心越亂
git log --all --graph
顯示有線圖的log紀錄
合併分支

git merge dev
在目前的分支上合併dev分支
git merge --no-ff dev
不使用快進合併分支


快進:只需移動分支
預設merge會使用快進
不快進:一定產生commit
看線圖比較容易分辨是從主線還是分支
衝突處裡
當分支中有改到原分支也正在修改的檔案就會產生衝突
衝突解法:編輯衝突位置
然後重新git commit
有些人就是不喜歡分岔圖
就是喜歡看一條直線
git rebase master
把目前分支重寫到master
如果有衝突一樣先編修好git add加入
再透過git rebase --continue完成

想要提取dev部分commit
git cherry-pick commit
擷取某個commit套用在目前分支上

標籤
紀錄重大里程碑
git tag -a "v1.0" -m "message"
建立v1.0標籤在目前HEAD上
使用git cat-file -p v1.0可查詢紀錄訊息
git tag -d "v1.0"
刪除標籤
複習今天講的指令
git checkout
git revert
git reset
git branch
git stash
git merge
git rebase
git cherry-pick
git tag
下次預告
遠端操作
Q&A
Thank you for listening
簡單介紹Git版本控制Part3
By Yi-Tai Lin
簡單介紹Git版本控制Part3
- 977