Git入門到精通:30分鐘掌握核心技巧

目錄

一、基礎理論片

Git簡介

Git安裝

Git倉庫

Git基本命令用法

倉庫別名

二、實操命令篇

遠程分支

分支的新建和合并

實操演示

1 本地新建倉庫

2 gitee新建倉庫

3 建立關系

4 新建分支

5 開發新功能

6 推送新分支

7 合并新分支到主分支

三、可視化工具篇

Gitee倉庫的使用

IDEA的git使用

IDEA與Gitee倉庫

四、Git 安全與配置篇

SSH key 與訪問控制

生成和配置 SSH key

如何設置 Git 倉庫權限(特別是私有倉庫)

.gitignore 和 .gitattributes

五、常見問題篇

如何解決沖突?

1 產生沖突的常見情況:

2 解決步驟:

上傳文件過大導致提交失敗?

如何回滾提交,回滾方式有哪些?

為什么不建議強制提交?

Rebase 與 Merge 的區別?

一、基礎理論篇

Git簡介

Git 是一種分布式版本控制系統,最初由 Linus Torvalds 開發,用于管理 Linux 內核代碼。

與集中式版本控制(如 SVN)不同,Git 每個開發者都有完整代碼倉庫副本,可在本地完成大部分操作。

主要特點:

  • 分布式:支持離線操作。

  • 高效:提交、切換、合并等操作快速。

  • 安全:使用 SHA1 校驗內容完整性。

  • 支持多種工作流:如 Git Flow、Feature Branch 等。

什么是集中式版本控制:

img

  • 版本庫是集中存放在中央服務器的

  • 而干活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然后開始干活

  • 干完活了,再把自己的活推送給中央服務器

  • 中央服務器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然后回到家自己改,改完了,再放回圖書館

缺點

  • 集中式版本控制系統最大的毛病就是必須聯網才能工作

  • 如果在局域網內還好,帶寬夠大,速度夠快

  • 可如果在互聯網上,遇到網速慢的話,可能提交一個10M的文件就需要5分鐘,體驗極其不好

什么是分布式版本控制系統:

img

  • 分布式版本控制系統根本沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫,就不需要聯網了

  • Git 這種系統,客戶端并不只提取最新版本的文件快照, 而是把代碼倉庫完整地鏡像下來,包括完整的歷史記錄

  • 那任何一處協同工作用的服務器發生故障,事后都可以用任何一個鏡像出來的本地倉庫恢復, 因為每一次的克隆操作,實際上都是一次對代碼倉庫的完整備份

  • 它還以指定和若干不同的遠端代碼倉庫進行交互,因此你就可以在同一個項目中,分別和不同工作小組的人相互協作,可以根據需要設定不同的協作流程

Git安裝

Windows 安裝

  • 下載地址:Git - Downloads

  • 安裝步驟:一直默認下一步即可,建議安裝 Git Bash 工具。

  • 驗證是否安裝成功:

git --version #查看git版本

輸出以下內容即為安裝成功:

對于首次安裝git環境的用戶來說需要做以下配置:

git config --global user.name "你的名字" # 配置git的用戶名
git config --global user.email "你的郵箱" # 配置git的郵箱

Git倉庫

1 什么是倉庫?

Git 倉庫是用來記錄代碼歷史版本的地方,分為:

  • 本地倉庫(.git 文件夾)

  • 遠程倉庫(如 Gitee、GitHub)

2 如何初始化git倉庫

git init # 初始化本地倉庫

執行完命令多了個.git文件(文件是隱藏的,需要打開隱藏可見),說明已經初始化好git的本地倉庫

結構圖如下所示:

MyProject/
├── .git/ ? ? ? ?  ← Git 的核心目錄
├── index.html
└── style.css

3 如何克隆遠程倉庫

git clone 遠程倉庫的地址 # 這里可以克隆遠程倉庫的地址 例如gitee gitLab github等代碼托管平臺

Git基本命令用法

git status  # 查看當前狀態
git add  #文件名   暫存文件
git commit -m "說明"  #提交到本地倉庫
git log 查看提交歷史
git diff    #查看改動內容
git pull    #拉取遠程更新
git push    #推送本地提交

以上的命令式git基本命令中最常用到的一些命令

Git 工作區與版本控制結構圖:

工作區(Working Directory)↓ git add
暫存區(Stage/Index)↓ git commit
本地倉庫(Local Repository)↓ git push
遠程倉庫(Remote Repository)

針對以上命令,我們可以用剛剛生成的git倉庫來進行演練一下

倉庫別名

倉庫別名是為了簡化遠程地址的管理,尤其在多個遠程倉庫協同時非常有用

1 添加遠程倉庫

git remote add origin "遠程倉庫的地址url" # 這里可以是gitee gitLab等

這里的origin是本地倉庫,和遠程倉庫關聯在一起,也稱作遠程的別名

二、實操命令篇

遠程分支

遠程分支是對遠程 Git 倉庫中分支狀態的引用,本地并不能直接修改它們。Git 允許你從遠程倉庫獲取更新、創建追蹤分支(tracking branch),并推送你的更改。

概念描述
origin默認的遠程倉庫名(可以自定義別名)。
遠程分支存儲在遠程倉庫中的分支,不能直接檢出修改,通常以 origin/branch 形式存在。
追蹤分支本地分支與遠程分支關聯,一般用于同步遠程分支狀態(如:main 跟蹤 origin/main)。
同步遠程分支狀態通過 git fetchgit pull 等命令獲取最新狀態。

可通過一下命令查看遠程分支和本地分支的關系

git branch -r # 查看所有遠程分支

輸出示例:

origin/main
origin/dev
origin/feature/login

其中origin為本地分支,main、dev、login均為遠程分支

分支的新建和合并

#查看本地分支:
git branch#查看遠程分支:
git branch -r#查看本地 + 遠程所有分支:
git branch -a#新建分支并且切換分支
git branch feature/login
git checkout feature/login#等價于:
git checkout -b feature/login

實操演示

接下來我將從新建遠程倉庫和本地倉庫來進行代碼的分支。推送的演示,遠程倉庫我將采用gitee 代碼采用一個前端的工程項目

1 本地新建倉庫

我已經新建了一些文件,并且初始化了倉庫

2 gitee新建倉庫

已經在git上新建了遠程倉庫,接下來跟著上面的提示綁定關系

3 建立關系

通過下面的命令我們將我們的工程第一添加到gitee上面去

4 新建分支

這里我們新建分支并且切換到了新建的分支上去

5 開發新功能

這里模擬開發新功能,就是將代碼修改一下,可以新建一個login.html文件

6 推送新分支

這里我進行了新功能的分支添加

我們可以看見遠程倉庫有新的分支上面有登錄模塊的新功能

7 合并新分支到主分支

master分支上面是沒有最新的代碼的這里我們需要合并分支

合并分支之后還需要我們去推送代碼

git checkout master #切換到master分支
git merge feature/change #合并分支
git push # 推送最新代碼

三、可視化工具篇

Gitee倉庫的使用

上面已經向大家介紹了如何使用gitee倉庫去新建一個遠程倉庫,接下來我們將從編程工具IDEA去教大家如何去使用可視化界面操作git

IDEA的git使用

我們使用IDEA去打開我們剛剛創建的git倉庫

這里我改變登錄界面代碼 用IDEA去推送代碼

可以看見推送成功

接下來我們將推送的代碼合并到feature/change上面去

IDEA與Gitee倉庫

JetBrains 出品的 IDEA(IntelliJ IDEA) 是一款功能強大的 Java 集成開發環境,不僅支持豐富的編程功能,還內置了對 Git 版本控制系統 的深度集成,極大地方便了開發者的日常協作與代碼管理工作。

IDEA 與 Gitee 倉庫配合使用,

四、Git 安全與配置篇

SSH key 與訪問控制

Git 支持兩種方式訪問遠程倉庫:HTTPSSSH

  • HTTPS:每次操作都需要輸入用戶名和密碼(可以配合 Token 簡化)。

  • SSH:使用密鑰對加密認證,更安全便捷,是企業和團隊首選。

優點

  • 避免頻繁輸入賬號密碼;

  • 安全性更高(基于公鑰加密);

  • 適合自動化部署和多設備操作。

生成和配置 SSH key

在gitee倉庫的頁面選擇ssh克隆地址,選擇生成RSA密鑰 確保C盤下面有.ssh文件 沒有可以新建一個

輸出以下內容就是配置成功

如何設置 Git 倉庫權限(特別是私有倉庫)

創建私有倉庫

  • 在 Gitee 上新建倉庫時選擇 “私有”;

  • 私有倉庫默認僅創建者可訪問。

添加協作者權限

  • 打開你的倉庫 → 設置 → 成員管理;

  • 邀請他人加入,分配權限(只讀、寫入、管理員)。

.gitignore 和 .gitattributes

.gitignore:忽略哪些文件不提交

  • 作用:告訴 Git 哪些文件不需要納入版本控制;

  • 常用于:臨時文件、日志文件、編譯產物、操作系統自動生成文件等。

    # 忽略編譯產物
    *.class
    *.exe
    *.jar
    ?
    # 忽略 node_modules 目錄
    node_modules/
    ?
    # 忽略日志文件
    *.log
    ?
    # 忽略 IDE 配置
    .idea/
    .vscode/

五、常見問題篇

如何解決沖突?

沖突是指在多個分支合并時,Git 無法自動決定哪個版本應該保留。

1 產生沖突的常見情況:
  • 兩個分支修改了同一文件的同一行內容;

  • 一個分支刪除了某文件,另一個分支卻修改了該文件。

2 解決步驟:
  1. 執行合并操作(例如:)

    git merge feature/login #合并修改了的分支
  2. 出現沖突時 Git 會提示哪些文件沖突

  3. 打開沖突文件,查看沖突標識:

    text復制編輯<<<<<<< HEAD
    當前分支的內容
    =======
    被合并分支的內容
    >>>>>>> feature/login
  4. 手動選擇保留哪一部分內容,然后刪除沖突標記。

  5. 標記沖突已解決,提交即可:

    git add .
    git commit -m "解決沖突"

接下來我將從用剛才上面展示的項目去模擬沖突,接下來我將用IDEA去操作

1 在master分支修改login.html文件并且提交

2 在feature/change分支修改login.html文件并且提交

3 嘗試合并分支

上傳文件過大導致提交失敗?

git一般默認不提交較大的文件(最大100M),如果需要可以嘗試分階段提交,也可以在配置文件中去修改參數、在隱藏的.git文件中config文件修改參數即可

如何回滾提交,回滾方式有哪些?

Git 提供多個回滾手段,視場景而定:

命令用途是否會改歷史提交
git reset重置到某個提交點是(慎用)
git revert撤銷某次提交,生成一個新的“反向提交”否(推薦)
git checkout -- 文件名撤銷工作區的修改
git restore新版本替代了 checkout 的功能

例子:

  • 回滾到上一次提交(保留工作目錄):

    git reset --soft HEAD~1
  • 回滾某次提交(保留記錄):

    git revert <commit-id>

使用以下命令可以回滾提交并且撤銷commit和add 保留工作區的內容

git reset --mixed HEAD~1

關于 git revert:

我們不小心提交了“增加登錄功能”,現在想撤銷該提交的影響,但不想破壞提交歷史(比如已經 push 到遠程)。

git revert c7d23bb

為什么不建議強制提交?

風險:

  • git push -f(強制推送)會覆蓋遠程分支歷史,破壞團隊協作

  • 其他成員無法拉取或丟失歷史記錄;

  • 容易導致不可恢復的數據丟失。

建議:

  • 在多人協作項目中,不要輕易使用 -f,除非全員知情或在 feature 分支上開發。

  • 如果需要清理歷史,使用 rebase 并確認只有你使用該分支時才推送。

Rebase 與 Merge 的區別?

特點MergeRebase
定義將兩個分支的歷史合并,產生一個新的“合并提交”(merge commit)。把一個分支的提交“移動”到另一個分支的最新提交之后,重寫提交歷史。
提交歷史保留了兩個分支的完整歷史,會出現分叉和合并節點。會生成一條線性的提交歷史,看起來更“干凈”。
合并過程創建一個新的合并提交,把兩個分支的改動合并起來。將目標分支的最新提交“放到前面”,再依次應用當前分支的提交。
沖突處理沖突在合并提交時處理一次。沖突可能在每個提交應用時都要處理。
是否改寫歷史不改寫已有提交歷史。改寫提交歷史(對公共分支使用需謹慎)。
適用場景適合保留分支的所有合并歷史,適合多人協作時使用。適合想讓提交歷史更清晰,或者需要整理提交記錄時使用。

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

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

相關文章

零基礎設計模式——結構型模式 - 代理模式

第三部分&#xff1a;結構型模式 - 代理模式 (Proxy Pattern) 在學習了享元模式如何通過共享對象來優化資源使用后&#xff0c;我們來探討結構型模式的最后一個模式——代理模式。代理模式為另一個對象提供一個替身或占位符以控制對這個對象的訪問。 核心思想&#xff1a;為其…

【OSS】 前端如何直接上傳到OSS 上返回https鏈接,如果做到OSS圖片資源加密訪問

使用阿里云OSS&#xff08;對象存儲服務&#xff09;進行前端直接上傳并返回HTTPS鏈接&#xff0c;同時實現圖片資源的加密訪問&#xff0c;可以通過以下步驟實現&#xff1a; 前端直接上傳到OSS并返回HTTPS鏈接 設置OSS Bucket&#xff1a; 確保你的OSS Bucket已創建&#xf…

TDenigne 集群可視化管理

可視化管理工具 為方便用戶更高效地使用和管理 TDengine&#xff0c;TDengine 3.0 版本推出了一個全新的可視化組件 taosExplorer。這個組件旨在幫助用戶在不熟悉 SQL 的情況下&#xff0c;也能輕松管理 TDengine 集群。通過 taosExplorer&#xff0c;用戶可以輕松查看 TDengi…

Centos7安裝gitlab

環境準備&#xff1a; 操作系統&#xff1a;Centos7 內存&#xff1a;2G以上 磁盤&#xff1a;50G 安全&#xff1a;關閉防火墻&#xff0c;selinux 1、安裝GitLab所需依賴 yum -y install policycoreutils openssh-server openssh-clients postfix 2、設置postfix開機自啟…

【前端面經】云智慧一面

寫在前面&#xff1a;面經只是記錄博主遇到的題目。每題的答案在編寫文檔的時候已經有問過deepseek&#xff0c;它只是一種比較普世的答案&#xff0c;要學得深入還是靠自己 Q&#xff1a;手撕代碼&#xff0c;兩個有序數組排序 A&#xff1a; function mysort(arr1, arr2) {…

Leetcode 3568. Minimum Moves to Clean the Classroom

Leetcode 3568. Minimum Moves to Clean the Classroom 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3568. Minimum Moves to Clean the Classroom 1. 解題思路 這一題我的核心思路就是廣度優先遍歷遍歷剪枝。 顯然&#xff0c;我們可以給出一個廣度優先遍歷來給出所有可能…

Spring Boot,注解,@RestController

RestController 是 Spring MVC 中用于創建 RESTful Web 服務的核心注解。 RestController 核心知識點 REST 作用: RestController 是一個方便的組合注解&#xff0c;它結合了 Controller 和 ResponseBody 兩個注解。 Controller: 將類標記為一個控制器&#xff0c;使其能夠處理…

【計算機網絡】Linux下簡單的UDP服務器(超詳細)

套接字接口 我們把服務器封裝成一個類&#xff0c;當我們定義出一個服務器對象后需要馬上初始化服務器&#xff0c;而初始化服務器需要做的第一件事就是創建套接字。 &#x1f30e;socket函數 這是Linux中創建套接字的系統調用,函數原型如下: int socket(int domain, int typ…

Fashion-MNIST LeNet訓練

前面使用線性神經網絡softmax 和 多層感知機進行圖像分類&#xff0c;本次我們使用LeNet 卷積神經網絡進行 訓練&#xff0c;期望能捕捉到圖像中的圖像結構信息&#xff0c;提高識別精度&#xff1a; import torch import torchvision from torchvision import transforms f…

EasyRTC嵌入式音視頻通信SDK助力1v1實時音視頻通話全場景應用

一、方案概述? 在數字化通信需求日益增長的今天&#xff0c;EasyRTC作為一款全平臺互通的實時視頻通話方案&#xff0c;實現了設備與平臺間的跨端連接。它支持微信小程序、APP、PC客戶端等多端協同&#xff0c;開發者通過該方案可快速搭建1v1實時音視頻通信系統&#xff0c;適…

查看make命令執行后涉及的預編譯宏定義的值

要查看 make 命令執行后涉及的預編譯宏定義&#xff08;如 -D 定義的宏&#xff09;及其值&#xff0c;可以采用以下方法&#xff1a; 1. 查看 Makefile 中的宏定義 直接檢查 Makefile 或相關構建腳本&#xff08;如 configure、CMakeLists.txt&#xff09;&#xff0c;尋找 -…

【C/C++】面試常考題目

面試中最常考的數據結構與算法題&#xff0c;適合作為刷題的第一階段重點。 ? 分類 & 推薦題目列表&#xff08;精選 70 道核心題&#xff09; 一、數組 & 字符串&#xff08;共 15 題&#xff09; 題目類型LeetCode編號兩數之和哈希表#1盛最多水的容器雙指針#11三數…

【芯片學習】555

一、引腳作用 二、原理圖 三、等效原理圖 1.比較器 同相輸入端大于反相輸入端&#xff0c;輸出高電平&#xff0c;反之亦然 2.三極管 給它輸入高電平就可以導通 3.模擬電路部分 4.數字電路部分 這部分的核心是RS觸發器&#xff0c;R-reset代表0&#xff0c;set是置位代表1&am…

Linux《文件系統》

在之前的系統IO當中已經了解了“內存”級別的文件操作&#xff0c;了解了文件描述符、重定向、緩沖區等概念&#xff0c;在了解了這些的知識之后還封裝出了我們自己的libc庫。接下來在本篇當中將會將視角從內存轉向磁盤&#xff0c;研究文件在內存當中是如何進行存儲的&#xf…

Java-代碼段-http接口調用自身服務中的其他http接口(mock)-并建立socket連接發送和接收報文實例

最新版本更新 https://code.jiangjiesheng.cn/article/367?fromcsdn 推薦 《高并發 & 微服務 & 性能調優實戰案例100講 源碼下載》 1. controller入口 ApiOperation("模擬平臺端現場機socket交互過程,需要Authorization")PostMapping(path "/testS…

基于遞歸思想的系統架構圖自動化生成實踐

文章目錄 一、核心思想解析二、關鍵技術實現1. 動態布局算法2. 樣式規范集成3. MCP服務封裝三、典型應用場景四、最佳實踐建議五、擴展方向一、核心思想解析 本系統通過遞歸算法實現了Markdown層級結構到PPTX架構圖的自動轉換,其核心設計思想包含兩個維度: 數據結構遞歸:將…

Python包管理器 uv替代conda?

有人問&#xff1a;python的包管理器uv可以替代conda嗎? 搞數據和算法的把conda當寶貝&#xff0c;其他的場景能替代。 Python的包管理器有很多&#xff0c;pip是原配&#xff0c;uv是后起之秀&#xff0c;conda則主打數據科學。 uv替代pip似乎只是時間問題了&#xff0c;它…

使用pnpm、vite搭建Phaserjs的開發環境

首先&#xff0c;確保你已經安裝了 Node.js 和 npm。然后按照以下步驟操作&#xff1a; 一、使用pnpm初始化一個新的 Vite 項目 pnpm create vite 輸入名字 選擇模板&#xff0c;這里我選擇Vanilla,也可以選擇其他的比如vue 選擇語言 項目新建完成 二、安裝相關依賴 進入項…

JS逆向案例—喜馬拉雅xm-sign詳情頁爬取

JS逆向案例——喜馬拉雅xm-sign詳情頁爬取 聲明網站流程分析總結 聲明 本文章中所有內容僅供學習交流&#xff0c;抓包內容、敏感網址、數據接口均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff0c;若有侵權&am…

姜老師的MBTI課程:MBTI是可以轉變的

我們先來看內向和外向這條軸&#xff0c;I和E內向和外向受先天遺傳因素的影響還是比較大的&#xff0c;因為它事關到了你的硬件&#xff0c;也就是大腦的模型。但是我們在大五人格的排雷避坑和這套課程里面都強調了一個觀點&#xff0c;內向和外向各有優勢&#xff0c;也各有不…