簡單介紹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

  • 869