Hits: 218
什麼是Git
git就是一種開源的版本控制系統,以前還在學校時,跟同學合作一份報告,檔案傳來傳去,改來改去,常常會有這樣的檔名: 期末報告
、期末報告_A1版
、期末報告_A2版
、期末報告_B1版
、期末報告_A1B2版
、期末報告_最終完成版
,不但檔名混亂,也無法確定內容到底有何變更,這時候,版本控制系統就可以派上用場了。
多數公司在開發產品/服務時,都是多人協作的狀態,因此會有個遠端的空間(repository),存放這些開發過程中的修改,簡單來說,git就是用來,讓每個開發者的本機端與遠端,進行檔案交換,並完成追蹤任何修訂紀錄的工具
。
設定SSH
幾個重點
- 在終端機輸入
ssh-keygen
- 到代碼託管的網站上(github/bitbucket…et al.),新增SSH key
簡單流程
- 先選擇自己本機的開發位置
- 在cmd中,使用
cd d:\test
指令來更換資料夾(change directory)到test,若要變更硬碟,範例為d:
- 選好之後
git add .
,即可將所有要add到github上的檔案在本機準備好- 也可add部分檔名,方法為
git add 檔案名稱
- 也可add部分檔名,方法為
- 要commit到遠端前,要先設定自己在遠端的帳號密碼
git config --global user.email "[email protected]"
git config --global user.name "ooxx"
- 接下來
git commit -m "輸入git 訊息"
,完成後即表示這些檔案在本機準備好了,並要發送到遠端的 - 最後,
git push origin master
,即完成將檔案push到github上 - 懶人包:
folder -> add -> commit -> push
網路上參考了這位作者的git work flow,覺得淺顯易懂。
從這張圖可以看到,git的指令大概分成作業、回復(revert)、比較(compare)
,以下會根據這三大部分紀錄。
還原
使用情境:我已經commit我的修改版本後push到遠端的repo上,現在怎麼辦?
# 方法A
## 1. 先在local端reset前一次的commit
git reset --hard HEAD~
### 也可指定要回到的commit位置
git log # 查出要回到地commit編碼(假設是ee66ee)
git reset ee66ee
## 2. local端變更完成後,使用 push -f的參數強迫更新遠端
git push origin -f
# 方法B
git revert ee66ee
git push origin -f
分支
什麼情況下會用到git的分支呢?當我在修改現有運行的程式碼時,怕改動會影響到現有的程式架構,會透過建立分支 → 將修改紀錄提交到該分支 → 、發起pull request
並通過code review
→ 將分支合併(merge)到主線上(master)。善用分支,對於開發的維護可說是Z > B。
查詢現有分支,若加入 -a
可列出所有 local 與 remote 的分支
git branch
git branch -a
創建新分支
git branch your_new_branch_name
創建新分支並直接移動到該分支
git checkout -b your_new_branch_name
若想將 local branch 與遠端同步,則使用下列指令,可以在 local 創建 feature branch 後,並與 remote 同步。
git checkout feature
這時我們用 git branch
查看,可發現 feature 已從 remote 端同步到 local 端了。
在local端創建新分支後直接push到遠端
git push -u origin your_branch_name
git push --set-upstream origin your_branch_name
讓local端跟remote端的分支內容同步
git fetch origin
或是使用下列方法
- git pull origin master
- git fetch origin master; git rebase origin/master
- git fetch origin master; git cherry-pick origin/master
詳細請參閱這篇文章
標籤
新增標籤
git tag -a v1.4 -m "my version 1.4"
對以前的 commit 貼標籤
git tag -a v1.2
將標籤推到 remote
git push --tags
查詢指令
git config # 查詢git的設定檔
git status # 查詢現在的git工作狀態
git log # 檢視提交的歷史
git log --oneline # 將提交歷史以一行寫出
git show # 檢視上一次git修改的內容
git remote -v # 列出追蹤的遠端
設定遠端
先在遠端從GUI新增一個repo,接下來透過下列指令,在local端設定一個名字(remote_name)用來追蹤遠端的repo
git remote add [email protected]/xxx.git
接下來當我下達push
指令時,就可以指定local端的上傳位置,在branch_name輸入local端所要上傳的branch即可
git push
查詢本地與遠端是否同步
多人開發的情境下,常常因為沒有彼此同步到最新而產生衝突,所以得養成習慣,在每次修改前先看看本地端的 source 與遠端的差別,有兩種查詢方法可以比較:
git remote show origin
: 這個指令可以列出本地端與遠端 repo 的差異,如下圖
從截圖中黃色框框可看出,我本地端的 master 是落後於遠端的 master ,因此會無法推送至遠端,此時得先讓本地 master 與遠端同步後,我才可推送我的修改至遠端。
git fetch --dry-run
: 這個指令的意思是執行 git fetch 但不實際的影響本地的 repo ,算是試跑看看 fetch 會發生什麼事。
從截圖來看,他執行了 fetch 後會進行更新,表示遠端的 repo 是比本地端還更新的,如此就可以執行 git pull
或 git fetch
把本地端的 source 與遠端同步。
一些情境
取消追蹤檔案
git rm --cached_filename
git rm -r --cached_foldername
同台本機設定雙帳號
- 把兩個帳號都開了ssh
- 這篇連結提到了git的設定有三種層級:system, global, local
- 在local的repo裡面,設定
git config user.name "new_user_name"
git config user.email "new_user_email"
- 輸入指令
git config --local credential.helper
- 爾後,每次push該local repo都會要輸入帳號密碼
刪除現有的 credential
git credential-manager uninstall
Comments