git基礎指令總結持續更新之git分支簡介和基本操作,解決合并和沖突,回退和rebase(變基),分支命名和分支管理,學習筆記分享

git 分支簡介和基本操作

Git 分支是 Git 的核心特性之一,它允許開發者在不同的開發線上工作,而不會影響主代碼庫。以下是 Git 分支的簡介和一些基本操作:

分支的概念:

分支是 Git 中的一個獨立開發線。創建分支時,Git 會記錄當前的狀態并創建一個新的開發線。分支允許開發者進行實驗或修復錯誤,而不會影響主分支(通常是 master 或 main)。

分支的類型:

  • 本地分支:僅在本地倉庫中存在,未推送到遠程倉庫。
  • 遠程分支:由遠程倉庫推送更新而來,通常以 origin/ 前綴表示。
  • 跟蹤分支:與遠程分支相關聯的本地分支,可以自動與遠程分支進行合并。

分支的優點:

  • 允許同時進行多個任務或修復。
  • 便于代碼審查和合并。
  • 可以安全地進行實驗性開發。

基本操作

創建分支:

git branch <branch-name>:創建一個新分支。
git checkout -b <branch-name>:創建新分支并切換到該分支。

切換分支:

git checkout <branch-name> 或者 git switch <branch-name>:切換到指定分支。

查看分支:

git branch:列出所有本地分支。
git branch -a:列出所有本地和遠程分支。

合并分支:

git merge <branch-name>:將指定分支的更改合并到當前分支。

刪除分支:

git branch -d <branch-name>:刪除本地分支(已合并)。

git branch -D <branch-name>:刪除未合并分支

git push <remote-name> :<branch-name>:刪除遠程分支。

推送分支到遠程倉庫:

git push <remote-name> <branch-name>:將本地分支推送到遠程倉庫。

拉取遠程分支更新:

git pull:拉取遠程分支的最新更改并自動合并到當前分支。

設置跟蹤分支:

git branch --set-upstream-to=<remote>/<branch-name>:設置當前分支的上游分支。

查看分支合并圖:

git log --graph --decorate --oneline --all:以圖形方式顯示分支的合并歷史。

使用分支可以提高開發效率,允許多個開發者同時在不同功能或修復上工作,最終通過合并將更改集成到一起。正確使用分支是 Git 工作流程的關鍵部分。

解決合并和沖突

當合并時出現沖突,Git 會停止合并并讓開發者手動解決沖突。解決后,使用 git add 將解決后的文件暫存,然后 git commit 提交更改。

總結:
兩個分支未修改同一個文件的同一處位置:git自動合并
兩個分支修改了同一個文件的同一處位置:產生沖突

解決方案:
1.手工修改沖突文件,合并沖突內容
2.添加至暫存區 git add file
3.提交修改 git commit -m "message"

中止合并:當不想繼續執行合并操作時可以使用下面的命令來中止合并過程。git merge --abort

回退和rebase(變基)

在 Git 中,回退(Revert)和變基(Rebase)是兩種不同的操作,它們都可以用來修改或改進提交歷史,但它們的目的和工作方式有所不同。

Git 回退(Revert)

定義:回退是一個安全的操作,用來撤銷一個或多個已經存在的提交。它會創建一個新的提交,這個提交是被撤銷提交的逆操作。這意味著回退不會改變歷史,而是在歷史中添加一個新的提交來“反做”之前的更改。

使用場景:

  • 當你想要撤銷一個已經合并到主分支的提交,但這個提交可能已經被其他分支或開發者所依賴。
  • 當你想要撤銷一個錯誤的提交,但不想重新編寫歷史。

命令:
git revert <commit-hash>:撤銷單個提交。
git revert --no-commit <commit-hash>:執行變更但不立即提交,允許進一步修改。

特點:

  • 回退操作是可逆的,即你可以再次回退一個回退操作。
  • 它不會改變歷史,因此對于共享分支來說是一個安全的選擇。

Git 變基(Rebase)

定義:變基是一個更激進的操作,它將一系列的提交從一個分支上摘下來,然后應用到另一個分支上。這可以用來整合來自不同分支的更改,或者清理提交歷史。

使用場景:

  • 當你想要更新你的分支以包含主分支的最新更改,同時保持你的提交獨立。
  • 當你想要清理或重新排序提交,例如在提交被推送之前。

命令:
git rebase <base-branch>:將當前分支的提交變基到 。

特點:

  • 變基可能會引入合并沖突,需要手動解決。
  • 它可以改變歷史,因此在已經共享的分支上使用時需要謹慎。
  • 變基可以是交互式的,允許你編輯、合并或刪除提交。

總結

回退是一個安全的操作,用于撤銷已經發生的更改,而不會改變歷史。

變基是一個更靈活的操作,可以用來整合更改或清理提交歷史,但它可能會改變歷史,因此在團隊協作中使用時需要小心。

選擇使用回退還是變基,取決于你的具體需求和團隊的工作流程。在團隊中,通常建議使用回退來撤銷已經合并的更改,而使用變基來更新和清理尚未合并的分支。

分支命名和分支管理

分支命名規范

推薦使用帶有意義的描述性名稱來命名分支:

  • 使用有意義的名稱,確保分支名稱能夠描述分支的目的,例如 feature/login-page 或 bugfix/issue-123。
    避免使用主分支名稱:

  • 不要使用 master 或 main 作為其他分支的名稱,以避免混淆。
    使用小寫字母:

  • 分支名稱通常使用小寫字母,避免使用大寫字母。
    使用連字符或下劃線:

  • 使用連字符(-)或下劃線(_)來分隔單詞,例如 user-profile 或 user_profile。
    避免使用特殊字符:

  • 不要在分支名稱中使用空格或特殊字符,這可能會導致命令行問題。
    分支類型:

根據分支的用途,可以有不同的命名約定。例如:

feature/:新功能開發。
bugfix/
:修復錯誤。
release/:準備發布的版本。
hotfix/
:緊急修復。
版本號:

對于發布分支,可以在名稱中包含版本號,例如 release/1.2.0

分支管理

  • 創建分支:
    在創建新分支之前,確保你的本地倉庫是最新的,通過 git pull 獲取最新更改。

  • 定期拉取更新:
    在分支開發過程中,定期拉取遠程分支的更新,通過 git pull 或 git fetch 避免長時間未同步。

  • 合并還是變基:
    決定是使用 git merge 來合并更改,還是使用 git rebase 來整合更改并保持線性歷史。

  • 代碼審查:
    在合并到主分支之前,確保代碼經過了審查,可以使用 Pull Request 進行代碼審查。

  • 刪除分支:
    一旦分支的目的已經完成并且合并到了主分支,使用 git branch -d 刪除本地分支,使用 git push --delete 刪除遠程分支。

  • 避免在主分支上直接開發:
    避免在 master 或 main 分支上直接進行開發,所有的開發工作都應該在分支上完成。

  • 使用分支策略:
    采用分支策略,如 Git Flow 或 GitHub Flow,以標準化分支的創建、合并和管理流程。

  • 保持分支簡潔:
    盡量保持分支的生命周期短且目的單一,避免一個分支用于多個不相關的功能。

  • 溝通協作:
    在團隊中明確溝通分支的使用和合并策略,確保所有成員都遵循相同的工作流程。

  • 分支保護規則:
    對于重要的分支(如 master 或 main),可以設置保護規則,要求 Pull Request 必須經過審查和測試。

定期合并已經成功驗證的分支,及時刪除已經合并的分支保持合適的分支數量,為分支設置合適的管理權限。

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

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

相關文章

rtt設備驅動框架學習——內核對象基類object

內核對象基類object 這個基類是內核所有對象的基類 在rt-thread/include/rtdef.h文件里有對內核對象基類object的定義 /*** Base structure of Kernel object*/ struct rt_object {char name[RT_NAME_MAX]; /**< name of kernel object */rt…

清新簡約之美,開源個人博客:Jekyll Theme Chirpy

Jekyll Theme Chirpy&#xff1a;簡約不簡單&#xff0c;Chirpy 讓你的博客煥發新意- 精選真開源&#xff0c;釋放新價值。 概覽 Jekyll Theme Chirpy 是為Jekyll靜態網站生成器設計的現代主題&#xff0c;以其清新、簡約的設計風格和用戶友好的交互體驗受到開發者和博客作者的…

為企業知識庫選模型?全球AI大模型知識庫RAG場景基準測試排名

大語言模型常見基準測試 大家對于AI模型理解和推理能力的的基準測試一定非常熟悉了&#xff0c;比如MMLU&#xff08;大規模多任務語言理解&#xff09;、GPQA&#xff08;研究生級別知識問答&#xff09;、GSMSK&#xff08;研究生數學知識考察&#xff09;、MATH&#xff08…

Zabbix監控軟件

目錄 一、什么是Zabbix 二、zabbix監控原理 三、zabbix 安裝步驟 一、什么是Zabbix ●zabbix 是一個基于 Web 界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。 ●zabbix 能監視各種網絡參數&#xff0c;保證服務器系統的安全運營&#xff1b;并提供靈活的…

python讀取寫入txt文本文件

讀取 txt 文件 def read_txt_file(file_path):"""讀取文本文件的內容:param file_path: 文本文件的路徑:return: 文件內容"""try:with open(file_path, r, encodingutf-8) as file:content file.read()return contentexcept FileNotFoundError…

Swagger的原理及應用詳解(十)

本系列文章簡介&#xff1a; 在當今快速發展的軟件開發領域&#xff0c;特別是隨著微服務架構和前后端分離開發模式的普及&#xff0c;API&#xff08;Application Programming Interface&#xff0c;應用程序編程接口&#xff09;的設計與管理變得愈發重要。一個清晰、準確且易…

【多線程】進程與線程

&#x1f3c0;&#x1f3c0;&#x1f3c0;來都來了&#xff0c;不妨點個關注&#xff01; &#x1f3a7;&#x1f3a7;&#x1f3a7;博客主頁&#xff1a;歡迎各位大佬! 文章目錄 1. 操作系統1.1 什么是操作系統1.2 操作系統主要的功能 2. 進程2.1 什么是進程2.2 通過PCB描述一…

jEasyUI 創建菜單按鈕

jEasyUI 創建菜單按鈕 jEasyUI(jQuery EasyUI)是一個基于jQuery的用戶界面插件集合,它為用戶提供了一系列的UI組件,如菜單、按鈕、表格等,以簡化Web頁面的開發過程。在本文中,我們將重點介紹如何使用jEasyUI創建菜單按鈕。 1. 環境準備 在開始之前,請確保您的開發環境…

使用Python繪制甘特圖

使用Python繪制甘特圖 甘特圖效果代碼 甘特圖 甘特圖是一種項目管理工具&#xff0c;用于展示項目進度和任務安排。它通過條狀圖形表示各任務的起止時間&#xff0c;便于直觀地查看項目的各個任務的進度和相互關系。 效果 [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片…

(void) (_x == _y)的作用

在閱讀宋寶華的《Linux設備驅動開發詳解》一書時&#xff0c;看到下面這段代碼&#xff1a; #define min(x, y) ({ \ const typeof(x) _x (x); \ const typeof(y) -y (y); \ (void) (&_x &_y); \ _x < _y ? _x : _y; }) 這段代碼可以理解如…

變量和標識符

一、變量 變量 數據類型 變量名初始值 常量的定義方式 1.#define 宏常量 (Day是常量&#xff0c;一旦修改就會報錯) /2.const修飾的變量 #include <iostream> using namespace std; //變量 數據類型 變量名初始值 //常量的定義方式 //1.#define 宏常量 (Day是常量&…

Vue.js 基礎入門指南

前言 在前端開發的廣闊領域中&#xff0c;Vue.js 無疑是一顆璀璨的明星&#xff0c;以其漸進式框架的特性吸引了無數開發者的目光。Vue.js 旨在通過簡潔的 API 實現響應式的數據綁定和組合的視圖組件&#xff0c;使得構建用戶界面變得既快速又簡單。本文將帶你走進 Vue.js 的世…

學習探索RASP:下一代應用安全防護技術

在當今數字化浪潮中&#xff0c;各類信息系統、應用程序不僅是企業數字化轉型的驅動力&#xff0c;也成為了網絡攻擊的集中地帶。面對日益復雜多變的網絡安全威脅&#xff0c;防火墻等傳統防護手段逐漸顯得力不從心。在此背景下&#xff0c;尋求一種更為智能、高效且能深度融入…

代碼隨想錄算法訓練營第22天|LeetCode 77. 組合、216.組合總和III、17.電話號碼的字母組合

1. LeetCode 77. 組合 題目鏈接&#xff1a;https://leetcode.cn/problems/combinations/description/ 文章鏈接&#xff1a;https://programmercarl.com/0077.組合.html 視頻鏈接&#xff1a;https://www.bilibili.com/video/BV1ti4y1L7cv 思路&#xff1a;利用遞歸回溯的方式…

Codeforces Round 954 (Div. 3)

這里寫自定義目錄標題 A. X Axis題意&#xff1a;題解&#xff1a;代碼&#xff1a; B. Matrix Stabilization題意&#xff1a;題解&#xff1a;代碼&#xff1a; C. Update Queries題意&#xff1a;題解&#xff1a;代碼&#xff1a; D. Mathematical Problem題意&#xff1a;…

nanodiffusion代碼逐行理解之diffusion

目錄 一、diffusion創建二、GaussianDiffusion定義三、代碼理解def __init__(self,model,img_size,img_channels,num_classes,betas, loss_type"l2", ema_decay0.9999, ema_start5000, ema_update_rate1,):def remove_noise(self, x, t, y, use_emaTrue):def sample(…

MySQL 集群

MySQL 集群有多種類型&#xff0c;每種類型都有其特定的用途和優勢。以下是一些常見的 MySQL 集群解決方案&#xff1a; 1. MySQL Replication 描述&#xff1a;MySQL 復制是一種異步復制機制&#xff0c;允許將一個 MySQL 數據庫的數據復制到一個或多個從服務器。 用途&…

bug——多重定義

bug——多重定義 你的問題是在C代碼中遇到了"reference to data is ambiguous"的錯誤。這個錯誤通常發生在你嘗試引用一個具有多重定義的變量時。 在你的代碼中&#xff0c;你定義了一個全局變量data&#xff0c;同時&#xff0c;C標準庫中也有一個名為data的函數模板…

【云原生】Kubernetes部署高可用平臺手冊

部署Kubernetes高可用平臺 文章目錄 部署Kubernetes高可用平臺基礎環境一、基礎環境配置1.1、關閉Swap1.2、添加hosts解析1.3、橋接IPv4流量傳遞到iptables的鏈 二、配置Kubernetes的VIP2.1、安裝Nginx2.2、修改Nginx配置文件2.3、啟動服務2.4、安裝Keepalived2.5、修改配置文件…

Linux 定時任務詳解:全面掌握 cron 和 at 命令

Linux 定時任務詳解&#xff1a;全面掌握 cron 和 at 命令 Linux 系統中定時任務的管理對于運維和開發人員來說都是至關重要的。通過定時任務&#xff0c;可以在特定時間自動執行腳本或命令&#xff0c;提高系統自動化程度。本文將詳細介紹 Linux 中常用的定時任務管理工具 cr…