Sitcon workshop:Git 入門到進階與實務經驗談
Git 入門到進階與實務經驗談
workshop網頁
sitcon這次舉辦的為期五天的workshop
每天不一樣的主題,我參加的有
- 8/11 Git 入門到進階與實務經驗談
- 8/14 那些學校沒教的黑魔法攻防
- 8/15 學習設計:從一個網站的設計開始
這是第一天 Git workshop 的學習筆記
主講人:Denny
投影片: 連結
第零部分:前置設定
1. 讓你的termenal可以顯示出精美的彩色branch樹狀圖
1 |
|
這些設定會存在.gitconfig ,因為指令加上–global,會加到user的設定上,而不是rep。
設定完成後以後輸入git lg
就會顯示樹狀圖與commit詳細資訊。
1 |
|
將commit再終端機中顯示成樹狀圖。
2. 在terminal顯示branch名稱
1 |
|
將以上程式碼貼到.bashrc profile,
第一部分:git基本操作
1 |
|
顯示資料夾內的隱藏檔案。
認識git儲存的結構
working space是你的工作目錄
staging area 代表這些檔案等著進rep
repository則是儲存庫
牛刀小試
1 |
|
輸入git add
. 將檔案抓進staging area。
1 |
|
輸入git reset
,將staging area把檔案拿出來。
1 |
|
輸入git status
可以查看目前的狀態。
untracked files內的資料代表在staging area的檔案。
gitingnore與gitkeep
1.使用gitignore來設定不需要版本控制的檔案
1 |
|
像binary這種佔空間且無法比較,就不存放在rep裡。
2.使用gitkeep將資料夾加進版本控制之中
1 |
|
建造一個空資料夾時,git並不會把它直接加進版本控制中,而加入gitkeep後讓這個新的資料夾加入版本控制中。
使用git diff來檢查差異
1 |
|
可以看到目前版本與前一個版本的差異
1 |
|
可以看到rep和staging area的差異
git commit與patch commit
1 |
|
除了第一行外,其他部分可以寫詳細的演算法、作法,可以使用git log來看完整的內容。(git status只看的到第一行)
1 |
|
當commit不需太多說明時,使用單行的commit可以使用此指令。
1 |
|
youtube - Intro to git add patch mode tutorial
1 |
|
對某幾行commit而非整個檔案。
1 |
|
跳過staging area從work directory直接丟進rep。
使用 git show 顯示 commit 資訊
1 |
|
HEAD表示最新的一筆,所以git show就是顯示最新的一個commit。
1 |
|
表示HEAD的前一筆
認識git rm
git rm不只能夠刪除檔案還能夠取消追蹤檔案。
1 |
|
Remove file
1 |
|
Untrack file
認識 git checkout
git checkout HEAD^
HEAD變成前一筆。
1 |
|
返回最新版
1 |
|
把以前版本的單一檔案拿回來。
認識git stash
1 |
|
把工作區原封不動的保存起來(本地沒有變動的時候會不給暫存)。
1 |
|
看到目前暫存的東西
1 |
|
把暫存的東西拿出來
1 |
|
顯示修改後的檔案
1 |
|
顯示修改後的檔案內容
1 |
|
把暫存區的東西刪掉
認識git reset
1 |
|
刪掉一筆commit,但會保留目前檔案的內容。
1 |
|
刪掉一筆commit,連檔案內容都刪掉。
認識git revert
1 |
|
將別人所做的commit取消,讓revert的東西存在commit之中。
第二部分:推上遠端rep(Github)
1 |
|
本地會跟著名稱相同的遠端rep
1 |
|
讓本機知道要跟著origin這條,以後只要打git push就可以推上去。這個路徑檔寫入在.git/config裡面。
1 |
|
看所有的-a -avv看更詳細
1 |
|
可以看到目前有的分支
1 |
|
可以看到目前分支的詳細資訊
1 |
|
Cache https password
使用cache記錄帳號密碼,可以設定可維持的時間。
1 |
|
ssh小概念
id_rsa.pub 公鑰 - 可以發給網路上的人
id_rsa 私鑰 - 絕對不可以流出去
本機不知道該跟哪條branch的時候
使用XXX可以修改指令。
練習:解決衝突
先來製造點衝突
開兩個terminal 分別是原來是repo與用git clone回來的repo
接下來各下一個新的commit,修改同一檔案。
並且push上遠端。
第二個修改的commit需要先使用git pull把新版本拉回來,解決完衝突才能繼續push。
(git pull = git fetch + git merge)
第三部分:初探branch
branch的用法很廣泛,一般來說分為三種主要的branch。不同branch的東西是不會互相污染的。
developer branch - 主要人員都在developer branch上開發。
release branch - 穩定版本
feature branch - 開發新功能
git pull 與 git pull –rebase 的差異
1 |
|
merge 完的 branch 會顯示分支
1 |
|
merge 完的branch不會顯示不必要的分支。(因為本來就是同一個branch)
更詳細的介紹請參照
Create a branch
1 |
|
直接跳過去dev順便創造。
查詢branch的資訊
1 |
|
顯示的資訊最詳細,所以用這個就好
把branch推上遠端rep
1 |
|
把dev推上去
把dev merge回master
git merge dev
Fast forward
- 當master未新增東西時,branch有新東西。這時會發生fast forward現象。也就是branch直接接回master。
- 想保持branch的資訊依然存在,這時可以使用
1 |
|
刪除一個branch
1 |
|
把branch砍掉。
使用cherry-pick
1 |
|
把某一個branch的其中一個commit拿過來用。
第四部分:其他常用指令
Modify commit history
1 |
|
修改commit message,commit時會產生的commit id,建議只有在還沒推到server的時候做。
1 |
|
修改commit的時間
1 |
|
用 git relog 把 git reset –hard 的東西救回來
- git reflog
- git reset –hard 要切回的分支id
More about git log
1 |
|
查詢某人對專案的貢獻
1 |
|
查詢時間內的log
search by regex
1 |
|
想知道誰動了哪一行
1 |
|