Git
- 一套分散式版本控制系統,可無窮盡的開branch(分支),無論是在開發新功能、Debug都非常方便。
- 基本語法(最前方需加git)
- 建立初始容器(Repository)
|
init |
建立初始容器(Repository) |
|
status |
查詢git目前狀態(是否有檔案更新或產生新檔案) |
|
commit |
執行剛剛的動作(add、rm…etc) Commit –m “xxx”,快速commit,不用進入編輯畫面 |
|
add |
將檔案加入git中 |
|
rm |
將檔案移除追縱名單 |
- 查詢Git內容
|
Show-branch –more=10 |
顯示最新的10個版本的內容 |
|
Git ls-files –stage |
查詢檔案的SHA1碼 |
- 讓Git忽略不重要之檔案
- 可將檔案名稱紀錄於 .gitignore檔中,如此對檔案修改時,git不會發現也不會加入未更新的追蹤名單。
- 但如果該檔案已經加入Git,然後才將其寫入.gitignore檔,Git仍會持續追蹤。必需先進行刪除並commit,告知git這檔案不需在追蹤(避免檔案不見,需先備份)。
- 合併(merge)
- 當程式需要進行Debug或增加新功能,Git可以建立出新的branch來處理,並於完成時再merge起來。
|
Git checkout branch |
切換至不同的branch |
|
Git merge otherBranch |
將另一個branch與自己merge起來 |
- 當合併時有兩個相同的檔案,且內容不同時,merge會產生衝突的現像。
- 內容會切成兩塊:<<<<<<與=====之間是自己branch的內容;=====與>>>>>之間是另一個branch的內容。
- 當發生衝突時,需要自行去編輯檔案,選擇需要的內容被把<<<<<與=====的部份刪除。
- merge後的如果反悔,也可以取消merge的結果
|
Git reset --hard HEAD |
Merge後未commit前,可返回前一commit狀態 |
|
Git reset --hard ORIG_HEAD |
Merge後已commit,可返回前一commit狀態 |
- 返回上個版本 (reset)
- 透過git每次commit的內容都會保存下來,可隨時切換回上一個版本的內容。
- 除了返回版本外,也可以用來取消已經add、modify與mixed的特定檔案內容,返回上一版本的狀態。
- 返回時的HEAD也可以用HEAD^、HEAD~2來返回前幾個版本的內容
- 使用reset會有add、modify與mixed的情況。
- Hard:代表返回後,該commit修改的內容將會完全移除
- Soft:代表返回後,該commit修改的內容會保存下來
- Mixed:原始設定,當不加hard或soft時就是此狀態,將內容返回至未add的狀態
|
Git reset HEAD fileName |
將已經add的檔案取消掉 |
|
Git reset -- fileName |
將修改過的檔案返回上一狀態的內容 |
- 若我們建立了兩個branch,並建立兩個檔案,此時卻在master用git reset –soft otherBranch。會產生以下情況
- 在master中HEAD卻指向另一個branch,此時若下commit會發生模凌兩可的情況。
- 直接用git reset –hard HEAD^ 也不能回到master的狀態,反而是回到otherBranch的前一個commit。
- 可以用git reflog來查詢所有的HEAD情況,並找出剛剛設定指向另一個branch的位置。
- 重新下git reset –hard HEAD@{X},x表示第幾個head,重新回到未指錯的狀態。
- 複製commit(cherry-pick)
- 若現在有master跟rel2_3兩個branch,而master發現一個bug並已經解決,但是在開發新功能的rel2_3的branch也有相同問題,此時可以複製master已解決的commit到rel2_3來。
Git checkout rel2_3
Git cherry-pick master~2//找出修改後的commit並將其複製過來
- 此作法會產生一個新的commit在rel2_3的branch中。
- 也可以透過此方式將不同branch的commit全部複製到新的branch。
- 還原commit(revert)
- 與reset的做法類似,但是回覆時是產生新的commit,而舊有的改變仍然可以保存。
|
Git revert HEAD |
回覆先前的狀態(產生新的commit) |
- Reset、revert和checkout
- Reset:用在返回某個commit的狀態
- Revert:產生新的commit來進行回復,可保存先前修改之過程
- Checkout:切換branch時可用
- 修改最上層的commit內容
- 可以修改最上層的commit注解,也可以修改裡面的內容。
- 例如上一個commit修改了newFile內容,但是卻寫錯,可透過此方式修改上一個commit中newFile的修改。
Git add newFile
Git commit //發現改錯
Vim newFile//改正
Git add newFile
Git commit –amend //修改上一個commit內容,而非產生新的commit
文章標籤
全站熱搜
