Git操作總結

可以直接看實踐

總結自施磊老師課程

Git與SVN對比

在這里插入圖片描述

svn操作流程

  1. 寫代碼。

  2. 從服務器拉回服務器的當前版本庫,并解決服務器版本庫與本地代碼的沖突。

  3. 將本地代碼提交到服務器。

Git操作流程

  1. 寫代碼, 然后添加(add)到暫存區。

  2. 提交(commit)到本地版本庫。

  3. 從服務器拉取(pull)服務器的當前版本庫,并解決服務器版本庫與本地代碼的沖突。

  4. 將遠程庫與本地代碼合并結果提交(commit)到本地版本庫。

  5. 將本地版本庫推送(push)到服務器

注意:推送代碼前一定要拉代碼,不然把別人代碼沖沒了,還要花時間找

對比可以看出:分布式版本管理僅僅是增加了本地庫這個概念,其余的概念與集中管理并無區別。——但是 svn 在與服務器同步之前無法提交代碼,因而本地修改更容易出問題。

Git常用命令

正常流程基本命令

  • git clone -b master git@github.com:luzhenren/GitLearn.git

? 將遠程倉庫指定分支克隆到本地

? 會自動創建遠程倉庫名稱origin 和 本地倉庫

  • git branch

    查看分支

  • git status

    查看哪些代碼變化

  • 總流程如下

    在這里插入圖片描述

  • git add <要提交的代碼>

    將工作區代碼提交到了暫存區

  • git commit -m "feat: 初始化提交代碼"

    將暫存區代碼提交到本地倉庫

  • git pull origin <分支名>

    拉取遠程倉庫代碼,合并代碼

    如果有沖突,則需要重新處理代碼,使其能夠編譯過,此時處理過后的代碼又是新代碼,需要再一次 add commit pull。

    確認本地倉庫代碼一定是最新的了再push,不然會導致別人代碼被沖掉。

  • git push origin <本地倉庫分支>:<遠程倉庫分支>

    倉庫分支名一致,則可以git push origin <分支名>

    將本地倉庫推送到遠程倉庫

重要!!!

 **提交之前一定要確定代碼編譯沒問題提交之前一定要確定代碼編譯沒問題
提交之前一定要確定代碼編譯沒問題**

異常流程版本回退命令

  • 未使用git add 的時候----在工作區

    git checkout -- <filepathname> # 放棄修改某個文件
    例如: git checkout -- readme.md
    git checkout .  # 放棄所有修改的文件
    git restore .  # 放棄所有修改的文件
    
  • 已經使用git add 的時候----在暫存區

    git reset HEAD <filepathname> # 恢復某個文件到工作區
    例如: git reset HEAD readme.md
    git reset HEAD . # 恢復所有文件到工作區
    git  reset  # 恢復所有文件到工作區
    

    注意:這里只是恢復到了工作區,如果想放棄修改的代碼還需要執行上述(放棄工作區)中的操作

  • 已經使用git commit提交的了代碼----在本地倉庫

    git log查看本地倉庫提交記錄,記錄會帶有每次提交的版本號(commit id)

    git reset --hard <commit id> 退到暫存區

  • 已經git push 到了遠程分支----在遠程倉庫

    git push -f origin <分支名>

    確認只有自己更新了,先回退本地倉庫,然后強制更新(本地落后于遠程只能強制)遠程倉庫即可

    (如果此期間別人提交了代碼,需要協商處理,所以意識到問題后立即告知大家)

代碼沖突處理

沖突發生在兩個人操作同一個文件的時候

gut pull后文件就會變成如下

<<<<<<<<<<<<<<<<<< HEAD (當前更改)
我的代碼
=====================
你的代碼
>>>>>>>>>>>>>>>>>>>>>> dsfahowihowqerhqoir2143 (傳入更改)

就是看采用你的代碼還是我的代碼、或者兩個人的都要一部分(溝通!!!)

Git分支管理

總結:對于開發,本地分支數與遠程分支數一一對應,可以避免很多問題,開發很可靠

本地分支管理

git本地創建多個分支,互不干擾。

情景:在做某個需求a時,先需要修改緊急bug b;發版時發的是遠程dev的代碼。

方式一(推薦):

(1)本地已有分支dev,寫了需求a,先commit,即將工作區的內容提交到版本庫中,否則切換到其他分支時,就會覆蓋當前工作區的代碼。(這步很重要)

(2)在本地創建dev_bug分支,從遠程dev分支中check(git checkout -b dev_bug origin/dev)

(3)在本地dev_bug上修改bug,并commit、push到遠程dev上

(4)在本地變換到dev,繼續做需求a

為了開發新功能不影響master穩定的代碼,創建一個新分支來開發

19393@LAPTOP-L9L4QE0T MINGW64 /d/code/github/GitLearn (master)
$ git checkout -b sortdev
Switched to a new branch 'sortdev'19393@LAPTOP-L9L4QE0T MINGW64 /d/code/github/GitLearn (sortdev)
$ git branchmaster
* sortdev

git checkout -b sortdev創建并切換分支sortdev,我在這個分支開發排序功能

使用git pull origin master 指定此分支的遠程倉庫,并拉取代碼

開發完成后,發現推送不成功

解決方案

將sortdev分支,合并到master分支

git checkout master git merge sortdev

PS D:\code\github\GitLearn> git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
PS D:\code\github\GitLearn> git merge sortdev
Updating 4e9ad19..db08cf8
Fast-forwardmain.cpp | 13 +++++++++++++1 file changed, 13 insertions(+)

繼續推送

PS D:\code\github\GitLearn> git push origin master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 16 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 510 bytes | 510.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:luzhenren/GitLearn.git4e9ad19..db08cf8  master -> master

合并分支后,刪除原有分支

PS D:\code\github\GitLearn> git branch -d sortdev
Deleted branch sortdev (was db08cf8).
PS D:\code\github\GitLearn> git branch
* master

合并分支沖突

1. 確保工作目錄干凈

在合并分支之前,確保當前分支的工作目錄是干凈的(沒有未提交的更改),以免產生額外的合并問題。你可以使用以下命令查看當前工作目錄狀態:

git status
2. 切換到 master 分支(或目標分支)

切換到你希望合并到的目標分支(通常是 master):

git checkout master
3. 合并 dev 分支到 master 分支

使用以下命令將 dev 分支合并到 master 分支中:

git merge dev

如果 devmaster 分支有沖突,Git 會提示你沖突的文件和位置。

4. 解決沖突

編輯沖突的文件,手動解決沖突部分。沖突的代碼塊通常格式如下:

<<<<<<< HEAD
內容來自當前分支(master)
=======
內容來自合并分支(dev)
>>>>>>> dev

你需要根據實際情況,決定保留哪一部分,或者手動合并它們的內容。修改后的文件可能是這樣:

合并后的最終代碼內容

完成每個沖突文件的修改后,保存文件并退出編輯器。

5. 標記沖突已解決并提交

解決所有沖突后,執行以下命令將修改添加到暫存區(staging area):

git add <沖突文件1> <沖突文件2> ...

然后提交解決沖突后的更改:

git commit -m "解決 dev 與 master 的沖突"
6. 繼續合并或推送

完成合并后,你可以將 master 分支推送到遠程倉庫:

git push origin master

遠程分支管理

版本迭代結束后開啟新迭代時,需要新開一個分支作為新版本開發分支

在這里插入圖片描述

一般做法:我本地也創建一個新分支,追蹤遠程的新分支

PS D:\code\github\GitLearn> git checkout -b dev origin/dev1.01.00
Switched to a new branch 'dev'
branch 'dev' set up to track 'origin/dev1.01.00'.

指定了遠程倉庫后,以后git pull和push就不用使用origin指定遠程倉庫了

在這里插入圖片描述

可以看到追蹤關系很明確

如果創建分支時沒有設置追蹤的遠程倉庫分支,使用git branch -u <遠程倉庫名>/<遠程分支名>補救

Tag處理

如何使用Git將標簽推送到遠程倉庫|極客筆記

Git工作流實踐(!!!)

項目代碼遠程倉庫分支

  • master主分支
  • dev開發分支
  • release:發布分支

個人開發分支

  • feature特性分支
  • bugfix缺陷修改分支
  • hotfix熱更新分支

在這里插入圖片描述

開發階段流程總結

  1. 創建個人本地開發分支:git checkout -b feature/add_new_line origin/dev
  2. 個人本地分支推送到遠程分支:git push origin feature/add_new_line:feature/add_new_line
  3. 提交個人遠程代碼分支和目標代碼合入分支的MR,相關負責人進行CR
  4. 相關負責人提出意見,本地修改相應的代碼,推送到對應的遠程代碼分支上
  5. 代碼CR意見處理完,相關負責人進行代碼merge,代碼修改從feature/add_new_line合入dev分支完成
  6. 刪除個人遠程代碼分支

bug回歸階段操作同上

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

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

相關文章

直流開關電源技術及應用二

文章目錄 8 PFC8.1 基本概念8.1.1 功率因數8.1.2 功率因數偏低帶來的影響8.1.3 特點 8.2 有源功率因數校正原理8.2.1不連續工作模式的矯正原理恒頻控制技術控制目標控制關鍵要素控制過程實現方式公式Boost電路和boost pfc電路的聯系和區別聯系區別 恒導通時間控制 8.2.2 連續工…

UNI-APP_i18n國際化引入

官方文檔&#xff1a;https://uniapp.dcloud.net.cn/tutorial/i18n.html vue2中使用 1. 新建文件 locale/index.js import en from ./en.json import zhHans from ./zh-Hans.json import zhHant from ./zh-Hant.json const messages {en,zh-Hans: zhHans,zh-Hant: zhHant }…

typora+picgo core+minio自動上傳圖片

1. 在服務器上安裝docker版本minio 創建/docker/minio文件夾 mkdir -p /docker/minio在此文件夾創建docker-compose.yml version: "3.5" services:minio:image: quay.io/minio/minio:latestcontainer_name: minioprivileged: truerestart: alwaysports:# API接口訪…

論文筆記:DepthLab: From Partial to Complete

是一篇很精煉的論文&#xff0c;不知道咋總結了&#xff0c;就差全文翻譯了&#xff0c;不過在這里我主要關注3D部分&#xff0c;因為他的pipeline是基于SD的&#xff0c;框圖也比較清晰易懂&#xff0c;非常細節的內容可以回頭看論文&#xff0c;哈哈哈&#xff0c;給作者大佬…

LeetCode--排序算法(堆排序、歸并排序、快速排序)

排序算法 歸并排序算法思路代碼時間復雜度 堆排序什么是堆&#xff1f;如何維護堆&#xff1f;如何建堆&#xff1f;堆排序時間復雜度 快速排序算法思想代碼時間復雜度 歸并排序 算法思路 歸并排序算法有兩個基本的操作&#xff0c;一個是分&#xff0c;也就是把原數組劃分成…

ShardingSphere-Proxy分表場景:go測試案例

接續上篇文章《ShardingSphere-Proxy分表場景測試案例》 go測試用例&#xff1a; package mainimport ("fmt""math/rand""time""github.com/bwmarrin/snowflake""gorm.io/driver/mysql""gorm.io/gorm""gor…

主流在售AI電子寵物產品

市面上已經有許多類型的AI電子寵物產品&#xff0c;它們各具特色&#xff0c;旨在提供情感陪伴、教育娛樂以及智能互動等功能。以下是幾款在市場上較為知名的AI電子寵物玩具&#xff0c;涵蓋了不同的形態和技術特點&#xff1a; 1. Moflin 制造商&#xff1a;日本消費電子公司…

Debian-linux運維-docker安裝和配置

騰訊云搭建docker官方文檔&#xff1a;https://cloud.tencent.com/document/product/213/46000 阿里云安裝Docker官方文檔&#xff1a;https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance 天翼云常見docker源配置指導&#xff1a;htt…

【機器學習 | 數據挖掘】時間序列算法

時間序列是按時間順序排列的、隨時間變化且相互關聯的數據序列。分析時間序列的方法構成數據分析的一個重要領域&#xff0c;即時間序列分析。以下是對時間序列算法的詳細介紹&#xff1a; 一、時間序列的分類 時間序列根據所研究的依據不同&#xff0c;可有不同的分類&#…

Qt6.8.1 Mingw13.1 編譯opencv4.10時cannot convert ‘char*‘ to ‘LPWSTR

當選擇build_world時出錯 G:\ForOpencv4.10\opencv-4.10.0\modules\core\src\utils\filesystem.cpp: In function cv::String cv::utils::fs::getCacheDirectory(const char*, const char*): G:\ForOpencv4.10\opencv-4.10.0\modules\core\src\utils\filesystem.cpp:442:43: e…

MIT S081 Lab 2 System Calls

Lab鏈接 一 實現trace功能 1 題目要求 In this assignment you will add a system call tracing feature that may help you when debugging later labs. You’ll create a new trace system call that will control tracing. It should take one argument, an integer “ma…

[Linux] 服務器CPU信息

&#xff08;1&#xff09;查看CPU信息&#xff08;型號&#xff09; cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c輸出&#xff1a;可以看到有128個虛擬CPU核心&#xff0c;型號是后面一串 128 Intel(R) Xeon(R) Platinum 8336C CPU 2.30GHz&#xff08;2&…

通過無障礙服務(AccessibilityService)實現Android設備全局水印顯示

一、無障礙功能簡介 首先我們先來了解下無障礙功能的官方介紹&#xff1a; 無障礙服務僅應用于幫助殘障用戶使用 Android 設備和應用。它們在后臺運行&#xff0c;并在觸發 AccessibilityEvents 時接收系統的回調。此類事件表示用戶界面中的某些狀態轉換&#xff0c;例如焦點已…

java中多線程的一些常見操作

Java 中的多線程是通過并發編程來提高應用程序的效率和響應速度。Java 提供了多個機制和類來支持多線程編程&#xff0c;包括繼承 Thread 類、實現 Runnable 接口、使用線程池等。以下是 Java 中一些常見的多線程操作和應用場景。 1. 創建線程 1.1 通過繼承 Thread 類創建線程…

使用 Docker 搭建 Hadoop 集群

1.1. 啟用 WSL 與虛擬機平臺 1.1.1. 啟用功能 啟用 WSL并使用 Moba 連接-CSDN博客 1.2 安裝 Docker Desktop 最新版本鏈接&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本鏈接&#xff1a;Docker Desktop release notes | Do…

【每日學點鴻蒙知識】廣告ID、NFC手機充值、CSS支持語法、PC與模擬器交互、SO熱更新等

1、HamonyOS 樣機獲取成功返回Oaid為00000000-0000-0000-0000-000000000000&#xff1f; 請求授權時需要觸發動態授權彈窗,看一下是不是沒有觸發授權彈窗。 可以參考以下代碼以及文檔&#xff1a; // ets import identifier from ohos.identifier.oaid; import hilog from oh…

【YOLO 項目實戰】(12)紅外/可見光多模態目標檢測

歡迎關注『youcans動手學模型』系列 本專欄內容和資源同步到 GitHub/youcans 【YOLO 項目實戰】&#xff08;10&#xff09;YOLO8 環境配置與推理檢測 【YOLO 項目實戰】&#xff08;11&#xff09;YOLO8 數據集與模型訓練 【YOLO 項目實戰】&#xff08;12&#xff09;紅外/可…

logback日志框架源碼分析

目錄 (一)入口:slf4j選擇日志框架 (二)日志框架初始化 (1)logback的3種配置方式 a、BasicConfigurator默認配置 b、SPI方式配置的Configurator實現類 c、通過配置文件初始化 (2)xml配置文件初始化 (三)Logger的創建 (四)打印日志 本文源碼基于:logback版…

國產數據庫OceanBase從入門到放棄教程

1. 介紹 是由螞蟻集團&#xff08;Ant Group&#xff0c;原螞蟻金服&#xff09;自主研發的分布式關系型數據庫。它旨在解決海量數據存儲和高并發訪問的問題&#xff0c;特別適合金融級應用場景&#xff0c;如支付寶等對數據一致性、可靠性和性能有極高要求的服務。以下是關于…

連接Milvus

連接到Milvus 驗證Milvus服務器正在偵聽哪個本地端口。將容器名稱替換為您自己的名稱。 docker port milvus-standalone 19530/tcp docker port milvus-standalone 2379/tcp docker port milvus-standalone 192.168.1.242:9091/api/v1/health 使用瀏覽器訪問連接地址htt…