【Git】本地版本控制

Git 是一個分布式版本控制系統,用于跟蹤文件的更改,通常用于源代碼管理。它的設計目的是為了協同工作和版本管理,讓多個開發人員能夠高效地合作開發和維護代碼。

Git環境配置

在官網可以找到對應下載:Git - Downloads (git-scm.com)。安裝選項均默認即可

也可以在Windows命令行輸入:

winget install --id Git.Git -e --source winget 

對于Ubuntu來說,這個PPA提供了最新的穩定的上游Git版本:

add-apt-repository ppa:git-core/ppa  #可以通過添加 Git Core PPA 來安裝最新的穩定版 Git
apt update  #添加 PPA 后,更新你的包列表:
apt install git  #安裝最新版本的 Git

打開 Git Bash(可以在開始菜單中找到)

設置用戶名和郵箱:

git config --global user.name "你的名字"
git config --global user.email "你的郵箱地址(可隨意填寫)"

驗證配置:

git config --list

創建新的本地倉庫

在 Git Bash 中導航到你想創建新倉庫的目錄。例如:

cd D:\Test  #或者在目錄下右鍵打開 Git Bash 窗口

初始化一個新的 Git 倉庫:

git init [目錄]  #缺省則為當前目錄

這將在 D:\Test 目錄下創建一個新的 Git 倉庫

Git基礎操作

在 Git 中,工作目錄下文件的修改(增加、刪除、更新)會經歷幾個狀態,這些狀態會隨著你執行不同的 Git 命令而發生變化。主要的狀態包括:未追蹤(Untracked)已暫存(Staged)已提交(Committed)

git status 命令的作用是查看當前 Git 倉庫中文件的狀態

git status

未追蹤(Untracked)

未追蹤狀態指的是 Git 不跟蹤該文件的任何變化。這些文件存在于你的工作目錄中,但尚未被 Git 跟蹤。當你在工作目錄中新增一個文件時,它就處于未追蹤狀態。

處理方法:

  • 添加到暫存區(Stage):將未追蹤的文件添加到 Git 的暫存區,使其成為已暫存狀態,準備提交到倉庫中。

    git add <文件名>
    

    或者,如果要添加所有未追蹤的文件:

    git add .
    

已暫存(Staged)

已暫存狀態指的是文件已經被添加到 Git 的暫存區,準備被提交到倉庫中。當你執行 git add 命令后,文件就會進入這個狀態。

處理方法:
  • 提交到倉庫:將已暫存的文件提交到 Git 倉庫中。

    git commit -m "提交說明"
    
  • 撤銷暫存:如果你想撤銷暫存,可以使用 git reset 命令。這會將文件從暫存區移除,但保留在工作目錄中的修改。

    git reset <文件名>
    
  • **恢復工作區文件:**恢復文件到暫存區或特定提交的狀態:

    git restore <文件名>
    
  • 恢復暫存區文件:從特定提交或暫存區恢復文件到工作區:

    git restore --source=<提交ID> --staged <文件名>
    

已提交(Committed)

已提交狀態指的是文件的修改已經被成功提交到 Git 倉庫中,成為歷史記錄的一部分。

  • 查看提交歷史:使用 git log 命令查看提交歷史記錄。

    git log [option]
    
    • –all 顯示所有分支
    • –pretty=oneline 將提交信息顯示為一行
    • –abbrev-commit 使得輸出的commitId更簡短
    • –graph 以圖的形式顯示
  • 回滾到歷史版本:如果需要回滾到過去的某個版本,可以使用 git checkoutgit reset 命令,具體取決于是否想保留歷史記錄。

    git checkout <提交ID> <文件名>  # 恢復單個文件到特定提交狀態
    git restore --source=<提交ID> <文件名>  # 恢復單個文件到特定提交狀態
    git reset --hard <提交ID>       # 回滾整個倉庫到特定提交狀態
    

git checkout是一個功能強大但復雜的命令,包含了切換分支、恢復文件等多種操作。Git 2.23.0 版本中引入新命令git switchgit restore將這些功能分離,使得使用更加直觀和明確。

其他狀態和命令:

  • 修改但未暫存:如果文件已經被 Git 跟蹤,但在提交前又有新的修改,它們會處于修改但未暫存的狀態。你可以使用 git diff 查看工作目錄和暫存區之間的差異,并決定是否要添加修改到暫存區。

    git diff
    
  • 刪除文件:如果你刪除了工作目錄中的文件,Git 會將其標記為已刪除狀態。你可以使用 git rm 命令從暫存區中刪除文件,并提交該變更。

    git rm <文件名>
    
  • 顯示日志:即倉庫中所有的引用更新歷史。它記錄了本地倉庫中 HEAD 和分支引用的變動,包括提交、合并、重置等操作,即使在分支已被刪除或者重置后也能查看到相應的引用歷史。

    git reflog
    

添加文件忽略

將文件添加到 Git 的忽略列表可以防止它們被 Git 跟蹤和提交到版本控制系統中。這在某些情況下非常有用,比如臨時文件、日志文件、編譯生成的文件等不需要進行版本控制的文件。

添加要忽略的文件模式

在工作目錄創建并打開 .gitignore 文件,并在其中添加你想要忽略的文件或目錄的模式。模式可以是文件名、文件夾名或使用通配符來匹配多個文件。Git 將根據 .gitignore 文件中的規則來忽略相應的文件或目錄。以下是一些示例:

  • 忽略特定文件或目錄:

    # 忽略臨時文件
    temp.txt
    temp/# 忽略編譯生成的文件
    *.exe
    *.dll# 忽略日志文件
    *.log
    
  • 使用通配符:

    • * 表示零個或多個字符。
    • ? 表示任意單個字符。
    • ! 表示取消忽略指定模式。

確保 .gitignore 文件本身被跟蹤并提交到倉庫中,以便所有團隊成員都能享有相同的忽略規則。

分支

查看本地分支

使用 git branch 命令可以查看本地倉庫中的所有分支。這個命令會列出當前倉庫中所有的分支,并且會標注出當前所在的分支(前面帶有 * 號)。

命令形式:

git branch

示例輸出:

假設你有兩個分支:masterfeature/new-feature,其中 master 是當前分支。

* masterfeature/new-feature

在這個示例中,* 標志表示當前所在的分支是 master

創建本地分支

使用 git branch <分支名> 命令可以創建一個新的本地分支,但是創建后并不會自動切換到該分支,需要使用 git checkoutgit switch 命令切換到新創建的分支。

命令形式:

git branch <分支名>

示例:

創建一個名為 feature/new-feature 的新分支:

git branch feature/new-feature

切換分支

使用 git checkout <分支名> 命令可以切換到已經存在的本地分支。

命令形式:

git checkout <分支名>
git switch <分支名>

示例:

切換到 feature/new-feature 分支:

git checkout feature/new-feature

創建并切換到分支

如果要創建一個新的分支并立即切換到該分支,可以使用 git checkout -b <分支名>git switch -c <新分支名>命令。

命令形式:

git checkout -b <新分支名>
git switch -c <新分支名>

示例:

創建并切換到名為 bugfix/123-fix 的新分支:

git checkout -b bugfix/123-fix
git switch -c bugfix/123-fix

這個命令相當于執行了以下兩個命令:

git branch bugfix/123-fix    # 創建新分支
git checkout|switch bugfix/123-fix  # 切換到新分支

合并分支

使用 git merge <分支名> 命令可以將指定分支的更改合并到當前分支。

命令形式:

git merge <分支名>

示例:

假設你當前在 master 分支,想將 feature/new-feature 分支合并到 master

git checkout master  # 確保當前在 master 分支
git merge feature/new-feature

刪除分支

使用 git branch -d <分支名> 命令可以刪除一個已經存在的本地分支。需要注意的是,不能刪除當前所在的分支,刪除分支前需要切換到其他分支。

命令形式:

git branch -d <分支名>

如果要強制刪除一個分支(即使它包含未合并的更改),可以使用 git branch -D <分支名> 命令。

示例:

刪除名為 bugfix/123-fix 的分支:

git branch -d bugfix/123-fix

如果想強制刪除 bugfix/456-fix 分支,可以使用:

git branch -D bugfix/456-fix

沖突解決

當你執行 git mergegit pull 操作時,如果存在沖突,Git 會在合并的過程中停止,并提示你手動解決沖突。沖突會在合并操作的輸出中顯示。

沖突文件:

Git 會將沖突標記為帶有特殊標記的文件,標記的部分指示了沖突發生的位置。你需要手動編輯這些文件來解決沖突。

例如,一個沖突標記可能看起來像這樣:

<<<<<<< HEAD
這是當前分支的內容
=======
這是要合并的內容
>>>>>>> 分支名
  • <<<<<<< HEAD======= 之間的部分是當前分支(通常是你所在的分支)的修改。
  • =======>>>>>>> 分支名 之間的部分是要合并的分支(通常是你要合并進當前分支的其他分支)的修改。

操作:

  • 解決沖突:在沖突標記之間編輯文件,選擇或合并你需要的更改。你可以選擇保留當前分支的更改、使用要合并的分支的更改,或者合并兩者的內容。

  • 保存文件:解決沖突后,保存文件并關閉編輯器。

  • 添加解決后的文件:將解決沖突后的文件標記為已解決狀態,使用 git add 命令將文件添加到暫存區。

    git add <沖突文件>
    
  • 完成合并:繼續執行合并操作,使用 git commit 提交已解決的合并。

    git commit
    
  • 如果你不想保留默認的合并提交消息,可以通過編輯器提供的界面來編輯提交消息。

分支使用原則與流程

在軟件開發中,通常會采用一些標準化的分支管理策略,以便有效地管理和協作。以下是常見的分支使用原則與流程:

分支名稱描述主要用途合并目標分支
master線上生產環境的主分支,存放穩定的、經過測試的代碼。發布到生產環境的代碼版本
developmaster 分支派生,主要用于整個開發團隊的集成開發。所有開發人員的日常工作基礎master(發布)
feature/xxxxdevelop 分支派生,用于開發新功能或進行特定任務的臨時分支。同期并行開發不同功能或任務develop
hotfix/xxxxmaster 分支派生,用于緊急修復線上生產環境中的問題。緊急修復線上的 bugmaster, develop
testdevelopmaster 分支派生,用于代碼集成測試和驗收測試。確保開發的功能符合預期且不影響現有功能的測試develop, master
predevelop 分支派生,用于預上線環境測試,準備進行線上發布前的最終驗證。預發布階段的最終測試和驗證master
release/xxxxdevelop 分支派生,用于準備發布新版本的臨時分支。發布前的準備工作,包括版本號更新、文檔編寫等master
  • 發布到生產環境的代碼版本master 分支存放著經過測試并準備發布到生產環境的穩定代碼版本。只有經過充分測試和驗證的代碼才能合并到 master 分支。
  • 所有開發人員的日常工作基礎develop 分支是所有開發人員進行日常開發的基礎分支,新功能的開發和測試都在這個分支上進行。
  • 同期并行開發不同功能或任務feature/xxxx 分支用于并行開發不同的功能或任務,每個分支對應一個特定的開發任務,完成后合并回 develop 分支。
  • 緊急修復線上的 bughotfix/xxxx 分支通常由 master 分支派生,用于緊急修復線上生產環境中的問題,修復完成后需要合并回 masterdevelop 分支。
  • 確保開發的功能符合預期且不影響現有功能的測試test 分支用于進行集成測試和驗收測試,確保開發的功能與預期一致且不會影響現有功能的穩定性。
  • 預發布階段的最終測試和驗證pre 分支用于進行預上線環境的最終測試和驗證,確認準備發布到生產環境的代碼版本穩定可靠。
  • 發布前的準備工作release/xxxx 分支用于準備發布新版本,包括版本號的更新、文檔的編寫、最終的測試和驗證等工作,完成后將代碼合并到 master 分支進行發布。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41377.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41377.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41377.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【WebRTC實現點對點視頻通話】

介紹 WebRTC (Web Real-Time Communications) 是一個實時通訊技術&#xff0c;也是實時音視頻技術的標準和框架。簡單來說WebRTC是一個集大成的實時音視頻技術集&#xff0c;包含了各種客戶端api、音視頻編/解碼lib、流媒體傳輸協議、回聲消除、安全傳輸等。對于開發者來說可以…

avcodec_send_packet函數阻塞

用ffmpeg4.1.4開發一個播放器&#xff0c;解碼過程如下&#xff0c;在每個函數前設置標志&#xff0c;測試發現程序阻塞在avcodec_send_packet函數。 while(true){av_read_frameavcodec_send_packetavcodec_receive_frameav_packet_unref } 解釋如下&#xff1a; avcodec_se…

嵌入式Linux:如何學好嵌入式?

目錄 方法步驟 1、 基礎知識 2、 學習linux 3、 學習嵌入式linux 4、深入學習 嵌入式書籍推薦 Linux基礎 Linux內核 研發方向 硬件基礎 方法步驟 1、 基礎知識 目的:能看懂硬件工作原理,但重點在嵌入式軟件,特別是操作系統級軟件。 科目:數字電路、計算機組成原理…

Unity3D游戲 RPG

叢林探險游戲 人物進行探險游戲 擁有登錄&#xff0c;首頁&#xff0c;3D物體旋轉瀏覽的功能&#xff0c;還能進行種植樹等功能

【異常錯誤】‘NoneType‘ object has no attribute ‘GetSubstructMatches‘

出現的錯誤信息&#xff1a; AttributeError: Caught AttributeError in DataLoader worker process 0. Original Traceback (most recent call last): File "/home/mapengsen/anaconda3/envs//lib/python3.8/site-packages/torch/utils/data/_utils/worker.py", l…

【matlab 路徑規劃】基于改進遺傳粒子群算法的藥店配送路徑優化

一 背景介紹 本文分享的是一個基于訂單合并的訂單分配和路徑規劃聯合優化&#xff0c;主要背景是騎手根據客戶需求&#xff0c;從藥店取藥之后進行配送&#xff0c;配送的過程中考慮路徑的長度、客戶的服務時間窗、車輛的固定成本等要素&#xff0c;經過建模和優化得到最優的配…

C# WinForm —— 38 SplitContainer介紹

1. 簡介 將頁面拆分成兩個大小可以調整的區域&#xff0c;中間有一個拆分條&#xff0c;可以拖動拆分條來調整左右區域的大小 2. 屬性 屬性解釋(Name)控件ID&#xff0c;在代碼里引用的時候會用到BoderStyle邊框樣式&#xff1a;None、FixedSingle、Fixed3DAutoScroll當控件…

力扣 225 用隊列實現棧 記錄

題目描述 請你僅使用兩個隊列實現一個后入先出&#xff08;LIFO&#xff09;的棧&#xff0c;并支持普通棧的全部四種操作&#xff08;push、top、pop 和 empty&#xff09;。實現 MyStack 類&#xff1a; void push(int x) 將元素 x 壓入棧頂。 int pop() 移除并返回棧頂元素…

C++ 引用做函數返回值

作用&#xff1a;引用是可以作為函數的返回值存在的 注意&#xff1a;不要返回局部變量引用 用法&#xff1a;函數調用作為左值 示例&#xff1a; 運行結果&#xff1a;

程序員熬夜看歐洲杯被“凍住”,呼吸困難……

2024歐洲杯接近尾聲&#xff0c;更是激發球迷興趣。由于時差關系&#xff0c;很多球迷熬夜看球&#xff0c;啤酒、宵夜成了標配。然而&#xff0c;在這份歡樂背后&#xff0c;也隱藏著健康風險。 日前&#xff0c;浙江杭州29歲的程序員單先生熬夜與朋友看完球賽后開車回家&…

零基礎STM32單片機編程入門(九)IIC總線詳解及EEPROM實戰含源碼視頻

文章目錄 一.概要二.IIC總線基本概念1.總體特征2.通訊流程 三.EEPROM介紹1.M24C08基本介紹2.向M24C08寫一個字節時序圖3.從M24C08讀一個字節時序圖 四.GPIO模擬IIC驅動M24C08讀寫五.CubeMX工程源代碼下載六.講解視頻鏈接地址七.小結 一.概要 IIC(Inter&#xff0d;Integrated …

黑馬|最新AI+若依 |初識項目

本章主要內容是&#xff1a; 1.快速搭建了若依前后端項目在本地 2.實現了單表的增刪改查快速生成 文章目錄 介紹1.若依介紹2.若依的不同版本3.項目運行環境 初始化前后端項目1.下載若依項目2.初始化后端a.把表導入到數據庫中b.更改application.yml文件 3.初始化前端a.安裝依賴…

基于LoFTR_TRT項目實現LoFTR模型的trt推理與onnx推理,3060顯卡下320圖像30ms一組圖

本博文主要記錄了使用LoFTR_TRT項目將LoFTR模型導出為onnx模型&#xff0c;然后將onnx模型轉化為trt模型。并分析了LoFTR_TRT與LoFTR的基本代碼差異&#xff0c;但從最后圖片效果來看是與官網demo基本一致的&#xff0c;具體可以查看上一篇博客記錄。最后記錄了onnx模型的使用【…

WebAssembly場景及未來

引言 從前面的文章中&#xff0c;我們已經了解了 WebAssembly&#xff08;WASM&#xff09; 的基本知識&#xff0c;演進歷程&#xff0c;以及簡單的使用方法。通過全面了解了WebAssembly的設計初衷和優勢&#xff0c;我們接下來要知道在什么樣的場景中我們會使用 WASM 呢&…

在門店里造綠色氧吧!康養行業也這么卷了?

拼啥不如拼健康&#xff0c;現在的人算是活明白了&#xff0c;不但中老年人這樣想&#xff0c;年輕人也這樣干。你可能不知道&#xff0c;現在眾多健康養生門店&#xff0c;逐漸成了年輕人“組團養生”的好去處&#xff0c;也是他們吃喝玩樂之外的新興消費趨勢。 而在看得見的…

原理圖設計工作平臺:capture和capture CIS的區別在于有沒有CIS模塊

1環境:design entry CIS 2.參數設置命令options——preference&#xff08;7個選項卡colors/print&#xff0c;grid display&#xff0c;miscellaneous&#xff0c;pan and zoom&#xff0c;select&#xff0c;text editor和board simulation&#xff09; 1)顏色設置colors/p…

應急響應--網站(web)入侵篡改指南

免責聲明:本文... 目錄 被入侵常見現象: 首要任務&#xff1a; 分析思路&#xff1a; 演示案例: IIS&.NET-注入-基于時間配合日志分析 Apache&PHP-漏洞-基于漏洞配合日志分析 Tomcat&JSP-弱口令-基于后門配合日志分析 (推薦) Webshell 查殺-常規后門&…

linux內核定時器

文章目錄 一、jiffies定時器1.1 工作原理1.2 timer_list結構體1.3 相關接口1.3.1 初始化和啟動定時器1.3.2 修改定時器1.3.3 刪除定時器1.3.4 jiffies相關接口 二、高精度定時器2.1 hrtimer結構體2.2 相關接口2.2.1 初始化和啟動定時器2.2.2 取消定時器2.2.3 通過定時器實現周期…

shell-awk語法整理

shell-awk語法整理 前言基本語法內置變量1. $02. NF3. NR4. FS5. RS6. OFS7. ORS8. FILENAME9. FNR10. ARGV11. ENVIRON12. IGNORECASE13. RSTART 和 RLENGTH示例解釋 內置函數循環語句&#xff08;后面的;可不加&#xff09;條件語句高級特性示例 特殊模式BEGINEND組合示例BEG…

R語言實戰—圓形樹狀圖

話不多說&#xff0c;先看最終效果&#xff1a; 圓形樹狀圖是樹狀圖的一個變型&#xff0c;其實都是層次聚類。 接下來看代碼步驟&#xff1a; 首先要先安裝兩個包&#xff1a; install.packages("ggtree") install.packages("readxl") 咱就別問問什么…