[git] git學習筆記 (基本概念/分支操作/標籤操作)

點閱: 141

什麼是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 "[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,覺得淺顯易懂。
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。

查詢現有分支,若加入 -a 可列出所有 local 與 remote 的分支

git branch
git branch -a

file

創建新分支

git branch your_new_branch_name

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

git checkout -b your_new_branch_name

若想將 local branch 與遠端同步,則使用下列指令,可以在 local 創建 feature branch 後,並與 remote 同步。

git checkout feature

file

這時我們用 git branch 查看,可發現 feature 已從 remote 端同步到 local 端了。

file

在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 的差異,如下圖

file

從截圖中黃色框框可看出,我本地端的 master 是落後於遠端的 master ,因此會無法推送至遠端,此時得先讓本地 master 與遠端同步後,我才可推送我的修改至遠端。

git fetch --dry-run: 這個指令的意思是執行 git fetch 但不實際的影響本地的 repo ,算是試跑看看 fetch 會發生什麼事。

file

從截圖來看,他執行了 fetch 後會進行更新,表示遠端的 repo 是比本地端還更新的,如此就可以執行 git pullgit fetch 把本地端的 source 與遠端同步。

一些情境

修改/修正我的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