[git] git學習筆記

點閱: 99

什麼是Git

git就是一種開源的版本控制系統,以前還在學校時,跟同學合作一份報告,檔案傳來傳去,改來改去,常常會有這樣的檔名: 期末報告期末報告_A1版期末報告_A2版期末報告_B1版期末報告_A1B2版期末報告_最終完成版,不但檔名混亂,也無法確定內容到底有何變更,這時候,版本控制系統就可以派上用場了。

多數公司在開發產品/服務時,都是多人協作的狀態,因此會有個遠端的空間(repository),存放這些開發過程中的修改,簡單來說,git就是用來,讓每個開發者的本機端與遠端,進行檔案交換,並完成追蹤任何修訂紀錄的工具

設定SSH

幾個重點

  1. 在終端機輸入ssh-keygen
  2. 到代碼託管的網站上(github/bitbucket…et al.),新增SSH key

REF

簡單流程

  • 先選擇自己本機的開發位置
  • 在cmd中,使用cd d:\test指令來更換資料夾(change directory)到test,若要變更硬碟,範例為d:
  • 選好之後 git add .,即可將所有要add到github上的檔案在本機準備好
    • 也可add部分檔名,方法為git add 檔案名稱
  • 要commit到遠端前,要先設定自己在遠端的帳號密碼
    • git config --global user.email "ooxx@gmail.com"
    • git config --global user.name "ooxx"
  • 接下來 git commit -m "輸入git 訊息",完成後即表示這些檔案在本機準備好了,並要發送到遠端的
  • 最後,git push origin master,即完成將檔案push到github上
  • 懶人包:folder -> add -> commit -> push

網路上參考了這位作者的git work flow,覺得淺顯易懂。
file
從這張圖可以看到,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。

查詢現有分支

git branch

創建新分支

git branch your_new_branch_name

創建新分支並直接移動到該分支

git checkout -b your_new_branch_name

在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 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 <remote_name> git@xxx.com/xxx.git

接下來當我下達push指令時,就可以指定local端的上傳位置,在branch_name輸入local端所要上傳的branch即可

git push <remote_name> <branch_name>

一些情境

修改/修正我的commit,並重新發送

取消追蹤檔案

git rm --cached_filename
git rm -r --cached_foldername

同台本機設定雙帳號

  1. 把兩個帳號都開了ssh
  2. 這篇連結提到了git的設定有三種層級:system, global, local
  3. 在local的repo裡面,設定
    git config user.name "new_user_name"
    git config user.email "new_user_email"
  4. 輸入指令
    • git config --local credential.helper
  5. 爾後,每次push該local repo都會要輸入帳號密碼

刪除現有的 credential

git credential-manager uninstall

參考網址1: 為你自己學Git – 高見龍

About the Author

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts