Git基本使用

舟清颺發表於2024-04-27

目錄
  • 序言
    • Git是什麼?
    • 為什麼要做版本控制?
    • 安裝git
  • 使用
    • 大體流程
    • 回滾
      • 回滾至之前版本
      • 回滾之之後版本
      • 撤銷修改
      • 從暫存區回滾到工作區
    • 商城&緊急修復bug
        • 分支
        • 緊急修復bug方案
        • 命令總結
        • 工作流
  • GitHub
      • 第五階段:進軍三里屯
        • 第一天上班前在家上傳程式碼
        • 初次在公司新電腦下載程式碼
        • 下班回到家繼續寫程式碼
        • 到公司繼續開發
        • 在公司約妹子忘記提交程式碼
        • 回家繼續寫程式碼
        • 到公司繼續寫程式碼
        • 其他
        • rebase的作用?
        • 快速解決衝突
      • 小總結
      • 第六階段:多人協同開發工作流
        • 建立專案&邀請成員
          • 擴充套件:Tag標籤管理
        • 小弟開發
        • code review
        • 提測上線(預釋出)
      • 第七階段:給開源軟體貢獻程式碼
    • 其他
      • 配置
      • 免密碼登入
      • git忽略檔案
      • github任務管理相關
    • 結課

序言

Git是什麼?

Git:分散式 版本控制 的軟體

​ 檔案版本控制的方式:檔案複製--->本地版本控制--->集中式版本控制(中央伺服器, 例:SVN, NAS)--->分散式

image

為什麼要做版本控制?

  1. 放置線上程式碼出問題, 做回滾

安裝git

  • 安裝在自己的電腦上, 只能用這個軟體完成在本地的版本控制, 若要多電腦使用, 需要依賴中心(倉庫: GitHub gitlab )

  • 官網連結 Git - 安裝 Git (git-scm.com)

image

下載完畢後, 一直點next安裝即可, 安裝好後在滑鼠右鍵選單上會有顯示

image

image

使用

大體流程

版本控制--->git管理資料夾

1. 進入要管理的資料夾, 滑鼠右鍵選擇`Git Bash Here`, 在命令框輸入 初始化命令 進行初始化, 會在當前路徑下建立`.git`隱藏資料夾, 該資料夾儲存所有的該資料夾的版本資訊及配置
get init #初始化, 讓git幫助我們管理當前資料夾

輸入檢測當前檔案狀態命令 新的沒有在版本中的檔案會紅色表示

git status #檢測當前目錄下檔案狀態

輸入增加檔案命令 後面是檔名稱, 按tab補全.

git add readme.txt #增加一個檔案
git add . #增加當前路徑下的所有檔案
# 紅色:新增的檔案/修改了原老檔案 --->git add
# 綠色:git已經管理起來了, 檔案未存檔--->git commit -m ''
# 無色或不可見, 表示檔案已被管理且建立了新版本, 檔案已存檔

個人資訊配置:使用者名稱、郵箱 【一次即可】

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

生成版本

git commit -m '描述資訊' #生成版本

若你修改了檔案, 則需要重新檢測檔案改動, 然後增加需要更新到git的檔案或資料夾, 最後生成版本

git log #檢視版本記錄

回滾

若需要恢復到上一個版本, 那麼則需要進行回滾

回滾至之前版本

git log 
git reset --hard 版本號 #回滾

示範:

$ git log
commit 4a7ca6fb18b0a7c728a709759c1a99270f9207f3 (HEAD -> master)#這裡的4a7c...就是版本號
Author: 舟清颺 <2225083194@qq.com>
Date:   Sat Apr 22 17:05:13 2023 +0800

    測試

Super@YU-ROG MINGW64 /c/MyDatabase/00 臨時處理/臨時 (master)
$

回滾之之後版本

git reflog 
git reset --hard 版本號

撤銷修改

git checkout --檔名稱#例如對檔案進行了修改, 當需要恢復之前狀態時.

從暫存區回滾到工作區

git reset HEAD 檔名稱

image

商城&緊急修復bug

分支

分支可以給使用者提供多個環境的可以,意味著你可以把你的工作從開發主線上分離開來 ,以免影響開發主線。 git的檔案只保留修改的檔案, 別的是透過連結的方式儲存的.

緊急修復bug方案

image

主幹線master(線上內容), dev分支(新功能分支)

​ 當專案開發到C3時, 建立分支dev(新功能分支, 會自動將C3快照一份),

​ 然後再C3基礎上開發C4時(測試版新功能), 發現正式版C3有bug

​ 切換為master分支, 然後建立bug分支, 切換到bug分支, 然後臨時建立bug修復版C5

​ 合併: 切換到master分支, 將bug分支C5合併到master, 沒問題後刪除bug分支.

​ 繼續開發: 切換到dev分支, 繼續開發C6功能(但是bug還沒修復, 因為是繼承於C3), 切換到master分支, 將dev分支合併到master分支上

​ 衝突: 若在合併時, 同一檔案均做了不同修改, 例如C6沒有修復bug但有新功能, C5修復了bug但無新功能. 系統會將C5和C6衝突檔案放在一起, 等待你手動修改為唯一, 然後自己建立為C7版本

因為C5和C3指向同一個源頭, 故而合併無衝突. 而C6指向C3, C5在master且比C3高階, 所以不同源, 會衝突

命令總結

  • 檢視分支

    git branch #檢視分支,  預設主分支為master
    
  • 建立分支

    git branch 分支名稱
    # git branch dev
    
  • 切換分支

    git checkout 分支名稱
    # git checkout dev
    
  • 分支合併(可能產生衝突)

    git merge 要合併的分支#這裡是將要被合併分支合併到現在所在分支, 所以要切換到合併分支 git merge  C5
    
    注意:切換分支再合併
    
  • 刪除分支

    git branch -d 分支名稱#git branch -d bug  修復bug以後, bug分支就沒用了, 可以刪除了
    

工作流

工作的思維

至少有2個分支, 一個master, 一個dev(開發 )

image

GitHub

程式碼託管的倉庫

GitHubs程式碼託管平臺, 公共開發的免費, 私有的協同的需要租賃

gitlab是程式碼託管工具,可以自己搭建程式碼託管倉庫

第五階段:進軍三里屯

有錢之後就要造呀,一個人在三里屯買了一層樓做辦公室。

image

第一天上班前在家上傳程式碼

首先,需要註冊github賬號,並建立遠端倉庫,然後再執行如下命令,將程式碼上傳到github。

image

1. 給遠端倉庫起別名
	git remote add origin 遠端倉庫地址
2. 向遠端推送程式碼
	git push -u origin 分支

初次在公司新電腦下載程式碼

1. 克隆遠端倉庫程式碼
	git clone 遠端倉庫地址 (內部已實現git remote add origin 遠端倉庫地址)
2. 切換分支
	git checkout 分支

在公司下載完程式碼後,繼續開發

1. 切換到dev分支進行開發
	git checkout dev 
2. 把master分支合併到dev [僅一次]
	git merge master
3. 修改程式碼
4. 提交程式碼
	git add . 
	git commit -m 'xx'
	git push origin dev 

下班回到家繼續寫程式碼

1. 切換到dev分支進行開發
	git checkout dev 
2. 拉程式碼
	git pull origin dev 
3. 繼續開發

4. 提交程式碼
	git add . 
	git commit -m 'xx'
	git push origin dev 

到公司繼續開發

1. 切換到dev分支進行開發
	git checkout dev 
2. 拉最新程式碼(不必再clone,只需要透過pull獲取最新程式碼即可)
	git pull origin dev 
3. 繼續開發

4. 提交程式碼
	git add . 
	git commit -m 'xx'
	git push origin dev 

開發完畢,要上線

1. 將dev分支合併到master,進行上線
	git checkout master
	git merge dev 
	git push origin master
2. 把dev分支也推送到遠端
	git checkout dev
	git merge master 
	git push origin dev 

在公司約妹子忘記提交程式碼

1. 拉程式碼
	git pull origin dev 
2. 繼續開發

3. 提交程式碼
	git add . 
	git commit -m 'xx'

注:忘記push了

回家繼續寫程式碼

1. 拉程式碼,發現在公司寫的程式碼忘記提交...
	git pull origin dev 
	
2. 繼續開發其他功能
	
3. 把dev分支也推送到遠端
	git add . 
	git commit -m 'xx'
	git push origin dev 

到公司繼續寫程式碼

1. 拉程式碼,把晚上在家寫的程式碼拉到本地(有合併、可能產生衝突)
	git pull origin dev 
	
2. 如果有衝突,手動解決衝突
	
3. 繼續開發其他功能
	
4. 把dev分支也推送到遠端
	git add . 
	git commit -m 'xx'
	git push origin dev 

其他

git pull origin dev
等價於
git fetch origin dev
git merge origin/dev 

image

rebase的作用?

rebase可以保持提交記錄簡潔,不分叉。

image

快速解決衝突

  1. 安裝beyond compare

  2. 在git中配置

    git config --local merge.tool bc3
    git config --local mergetool.path '/usr/local/bin/bcomp'
    git config --local mergetool.keepBackup false
    
  3. 應用beyond compare 解決衝突

    git mergetool 
    

小總結

  • 新增遠端連線(別名)

    git remote add origin 地址
    
  • 推送程式碼

    git push origin dev 
    
  • 下載程式碼

    git clone 地址
    
  • 拉取程式碼

    git pull origin dev 
    等價於
    git fetch origin dev
    git merge origin/dev 
    
  • 保持程式碼提交整潔(變基)

    git rebase 分支
    
  • 記錄圖形展示

    git log --graph --pretty=format:"%h %s"
    

第六階段:多人協同開發工作流

image

建立專案&邀請成員

協同開發時,需要所有成員都可以對同一個專案進行操作,需要邀請成員並賦予許可權,否則無法開發。github支援兩種建立專案的方式(供多人協同開發)。

  1. 合作者,將使用者新增到倉庫合作者中之後,該使用者就可以向當前倉庫提交程式碼。
    image

  2. 組織,將成員邀請進入組織,組織下可以建立多個倉庫,組織成員可以向組織下倉庫提交程式碼。

擴充套件:Tag標籤管理

為了能清晰的管理版本,在公司不會直接使用commit來做版本,會基於Tag來實現:v1.0 、 v1.2 、v2.0 版本。

git tag -a v1.0 -m '版本介紹'        建立本地建立Tag資訊
git tag -d v1.0                     刪除Tag
git push origin  --tags             將本地tag資訊推送到遠端倉庫
git pull origin  --tags             更新本地tag版本資訊

git checkout v.10                   切換tag
git clone -b v0.1 地址               指定tag下載程式碼

小弟開發

  • 小弟註冊Github 或 Gitlab賬號

  • 邀請小弟進入組織(預設對組織中的專案具有讀許可權)
    image

  • 邀請小弟成為某專案的合作者

image

  • 小弟在自己電腦上下載程式碼並開發

    git clone https://github.com/oldboy-org/dbhot.git
    cd dbhot
    git checkout dev
    git checkout -b dzz 
    寫程式碼...
    
    git add .
    git commit -m '鬥地主功能開發完成'
    git push origin ddz
    

code review

  1. 配置,程式碼review之後才能合併到dev分支。
    image
    image

  2. 小弟提交 code review申請
    image
    image

  3. 組長做 code review
    image

image

提測上線(預釋出)

由專門團隊或團隊leader執行以下步驟:

  1. 基於dev分值建立release分值

    git checkout dev
    git checkout -b release
    
  2. 測試等

  3. 合併到master

    使用pull request
    或
    本地將release合併到master分支
    
  4. 在master分支打tag

    git tag -a v2 -m '第二版 鬥地主功能'
    git push origin --tags
    
  5. 運維人員就可以去下載程式碼做上線了

    git clone -b v2 地址
    

第七階段:給開源軟體貢獻程式碼

  1. fork原始碼
    將別人原始碼複製到我自己的遠端倉庫。
  2. 在自己倉庫進行修改程式碼
  3. 給原始碼的作者提交 修復bug的申請(pull request)

其他

配置

  • 專案配置檔案:專案/.git/config

    git config --local user.name '武沛齊'
    git config --local user.email 'wupeiqi@xx.com'
    
  • 全域性配置檔案: ~/.gitconfig

    git config --global user.name 'wupeiq'
    git config --global user.name 'wupeiqi@xx.com'
    
  • 系統配置檔案:/etc/.gitconfig

    git config --system user.name 'wupeiq'
    git config --system user.name 'wupeiqi@xx.com'
    
    注意:需要有root許可權
    

應用場景:

git config --local user.name '武沛齊'
git config --local user.email 'wupeiqi@xx.com'

git config --local merge.tool bc3
git config --local mergetool.path '/usr/local/bin/bcomp'
git config --local mergetool.keepBackup false

git remote add origin 地址 ,預設新增在本地配置檔案中(--local)

免密碼登入

  • URL中體現

    原來的地址:https://github.com/WuPeiqi/dbhot.git
    修改的地址:https://使用者名稱:密碼@github.com/WuPeiqi/dbhot.git
    
    git remote add origin https://使用者名稱:密碼@github.com/WuPeiqi/dbhot.git
    git push origin master 
    
  • SSH實現

    1. 生成公鑰和私鑰(預設放在 ~/.ssh目錄下,id_rsa.pub公鑰、id_rsa私鑰)
       ssh-keygen
    2. 複製公鑰的內容,並設定到github中。
    3. 在git本地中配置ssh地址
    	git remote add origin git@github.com:WuPeiqi/dbhot.git
    	
    4. 以後使用
    	git push origin master 
    
  • git自動管理憑證

git忽略檔案

讓Git不再管理當前目錄下的某些檔案。

*.h
!a.h
files/
*.py[c|a|d]

更多參考:https://github.com/github/gitignore

github任務管理相關

  • issues,文件以及任務管理。
  • wiki,專案文件。

結課

感謝各位同學的關注和學習,希望git實戰課程對你能夠有所幫助,更多資源關注:

  • 小猿圈 <www.apeland.cn>
  • 路飛學城 <www.luffycity.com>
  • 老男孩IT教育 <www.oldboyedu.com>

相關文章