Git 和 GitHub 學習指南本地 Git 配置、基礎命令、GitHub 上傳流程、企業開發中 Git 的使用流程、以及如何將代碼部署到生產服務器

Windows 上 Git 安裝與配置

  • 下載安裝:訪問 Git 官方網站下載適用于 Windows 的安裝程序。運行安裝包時會出現許可協議、安裝目錄、組件選擇等界面(如下圖)。在“Select Components”頁面建議勾選 Git Bash Here 等選項,以便在資源管理器中右鍵快速啟動 Git Bash【69?】。
    安裝完成后,可在「開始菜單」或桌面(如果勾選)找到 Git Bash。打開 Git Bash 后,輸入 git --version 可驗證安裝是否成功。

  • 配置全局用戶名和郵箱:安裝完成后,首先配置 Git 的身份信息,這些信息會記錄在每次提交中。在 Git Bash 中運行:

    git config --global user.name "你的名字"
    git config --global user.email yourEmail@example.com
    

    此命令會將用戶名和郵箱寫入 ~/.gitconfig(Windows 通常為 C:\Users\用戶名\.gitconfig)。以后新建的倉庫默認都會使用這個身份信息,除非為某個項目單獨重寫。

  • 生成并配置 SSH 密鑰:為了安全地連接遠程倉庫(如 GitHub),推薦使用 SSH 認證。啟動 Git Bash,運行:

    ssh-keygen -t rsa -b 4096 -C "你的郵箱"
    

    按提示一路回車,新生成的密鑰文件默認位于 ~/.ssh/id_rsa(私鑰)和 ~/.ssh/id_rsa.pub(公鑰)。然后運行 ssh-agent 并添加私鑰:

    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_rsa
    

    將公鑰內容復制到你的 GitHub 賬戶(GitHub 網站 → Settings → SSH keys)中,這樣就可以通過 SSH 方式訪問 GitHub 了。SSH 密鑰用于安全認證,使得 Git 可以在推送或拉取代碼時使用密鑰而非傳統密碼。

  • 測試 SSH 連接:在 Git Bash 中運行:

    ssh -T git@github.com
    

    如果提示 Hi username! You've successfully authenticated... 表示已成功連接 GitHub。若出現錯誤,檢查密鑰是否正確添加,或是否通過 ssh-add 加載了私鑰。

Git 基礎命令教程

Git 提供了一系列命令用于倉庫管理與日常開發。下面列出常用命令及其作用和示例:

  • git init:在當前目錄初始化一個新的 Git 倉庫。如果想把一個已有項目納入版本控制,就在該項目根目錄下運行:

    git init
    

    這會創建一個隱藏的 .git 文件夾,表示此目錄已被 Git 管理。

  • git clone <倉庫地址>:從遠程倉庫復制(克隆)到本地新目錄。比如要獲取 GitHub 上的項目:

    git clone git@github.com:用戶名/倉庫名.git
    

    克隆操作會在本地創建一個與遠程倉庫相同的副本,通常這是開發者獲取項目代碼的最常用方式。

  • git add <文件>:將工作目錄中的修改添加到暫存區。比如添加當前目錄下所有文件:

    git add .
    

    該命令會把指定文件的當前版本記錄到暫存區,等待提交到倉庫中。常用 . 表示所有文件,也可以指定具體文件或目錄。

  • git status:查看工作目錄狀態,包括已修改、已暫存但未提交的文件等:

    git status
    

    運行后會顯示哪些文件已被修改但未加入暫存區、哪些文件已暫存待提交等信息。通過 git status 可以確認當前倉庫狀態。

  • git commit -m "提交信息":將暫存區的內容作為一個新快照提交到倉庫歷史。

    git commit -m "實現了用戶登錄功能"
    

    每次提交都會生成一個唯一的提交記錄,包含開發者信息、時間和提交說明。git addgit commit 構成了 Git 最基本的工作流。

  • git log:查看提交歷史:

    git log
    

    它列出倉庫中所有提交的歷史記錄,包括提交 ID、作者、日期和提交信息。可以加 --oneline--graph 等選項查看更簡潔或圖形化的日志。

  • git branch <分支名>:創建新分支。

    git branch feature-x
    

    該命令會創建一個名為 feature-x 的新分支,其實是開發一條并行的提交歷史線。然后可以運行 git checkout feature-x 切換到該分支進行開發。使用分支可以實現并行開發,各分支之間相互隔離,不會干擾主干。

  • git merge <分支>:將指定分支的修改合并到當前分支。假設在 main 分支上執行:

    git merge feature-x
    

    Git 會把 feature-x 分支的改動合并到 main 分支中。合并是 Git 中的一個強大功能,用于將不同分支的開發成果整合在一起。合并后可能會出現沖突,需要手工解決(參見下文)。

  • git pull:自動化地從遠程獲取并合并代碼。執行:

    git pull origin main
    

    該命令會先從遠程倉庫(如 origin)拉取指定分支(如 main)的更新,然后立即合并到當前分支,就像 git fetchgit merge 的簡寫。通常在開始工作前運行 git pull,確保本地與遠程同步。

  • git push:將本地分支的提交推送到遠程倉庫。一般格式為:

    git push origin main
    

    其中 origin 是遠程倉庫別名,main 是分支名。此操作會把本地 main 分支的最新提交上傳到 GitHub 等遠程倉庫。通常首次推送還需要加上 -u 參數,如 git push -u origin main,以將遠程分支設置為上游分支。

  • git stash:暫存當前工作目錄未提交的修改,以便切換分支或臨時處理其他事務。使用方法:

    git stash
    

    該命令會把所有未提交的改動(包括已暫存和未暫存的)都保存到一個棧中,并恢復工作目錄到干凈狀態。之后可以使用 git stash pop 恢復這些改動。這對中斷當前工作去處理其他緊急任務非常有用。

將本地項目上傳到 GitHub

  1. 在本地項目根目錄執行:

    git init
    git add .
    git commit -m "首次提交"
    

    這會把當前項目初始化成 Git 倉庫,并將所有文件提交為第一個版本。

  2. 在 GitHub 網站上新建一個空的倉庫(Repository),記錄下倉庫的 SSH 地址(如 git@github.com:用戶名/倉庫名.git)。

  3. 本地添加遠程倉庫地址并推送:

    git remote add origin git@github.com:用戶名/倉庫名.git
    git branch -M main    # 將本地默認分支名改為 main(可選)
    git push -u origin main
    
    • git remote add origin <URL> 用于添加遠程倉庫別名 origin
    • git branch -M main 將當前分支重命名為 main(如果默認是 master)以與 GitHub 上的默認分支名一致。
    • git push -u origin main 將本地的 main 分支推送到遠程的 main 分支。執行后,GitHub 上就會出現項目的文件列表。
  4. 此后每次更新代碼后,使用 git addgit commit 提交,再運行 git push origin main 將改動同步到 GitHub。第一次 push 后已經指定了上游分支,可以直接使用 git push

企業級開發中的 Git 協作流程

  • 功能分支工作流:團隊通常采用 Feature Branch(功能分支)工作流,即新功能在單獨的分支(如 feature/login)上開發,完成后通過 Pull Request 合并到主干(main)。這樣可以確保主干始終保持可運行狀態,同時多個開發者可以并行工作而互不干擾。下圖示意了一個典型的功能分支流程:開發者從主干或開發分支切出新分支,完成后合并回主干。

  • Gitflow 工作流:對于發布周期較長或版本管理嚴格的項目,可采用 Gitflow 分支模型。Gitflow 在 main(發布)和 develop(開發)兩個長期分支基礎上,創建更多短期分支:每個功能新建 feature/* 分支從 develop 分出來,開發完成后合并回 develop;發布時從 develop 分出 release/* 分支進行最終測試,再合并到 main 并打標簽;生產環境發現問題時從 main 分出 hotfix/* 分支修復后再合并回 maindevelop。Gitflow 明確了各類分支的職責,適合需要嚴格版本控制的大型項目。

  • 多人協作與分支管理:在團隊協作時,應統一分支命名規范(如 feature/功能名bugfix/編號 等),并定期同步主干變更。每位開發者都從遠程倉庫克隆項目后創建本地分支進行開發。使用 git pull 保持與主干一致,避免分支差異過大導致沖突。

  • 代碼評審(Pull Request):大多數團隊通過 GitHub、GitLab 或 Bitbucket 等平臺發起 Pull Request(拉取請求) 來審查代碼。在 Pull Request 中,開發者可以邀請同事對自己的改動進行 review,討論并提出改進意見,再合并到主干。審核時可以查看改動的 diff、運行自動化測試狀態等,確保代碼質量。正如知名經驗所述,“Pull requests 提供了一種從同事那里請求代碼審查的方法,并檢查最近一次提交的構建狀態”。

  • 沖突解決:合并分支時可能遇到 沖突,即不同分支在同一文件同一位置做了不同修改。Git 無法自動合并此類沖突,需要人工介入。通常的做法是打開沖突文件,手動編輯保留正確的代碼,刪除沖突標記,然后使用 git add 標記沖突已解決,再執行 git commit 完成合并。在解決沖突前,也可以通過 git merge --abort 放棄此次合并,或用 git checkout --ours/--theirs <file> 臨時選擇某一方版本。及時與團隊成員溝通,避免頻繁沖突,盡量在合并前拉取最新代碼減少沖突發生幾率。

從 Windows 部署代碼到 Linux 服務器

在企業環境下,常需將代碼從開發機部署到遠程 Linux 服務器。常見方式包括使用 SSH 進行文件傳輸或直接在服務器上拉取代碼:

  • 使用 SCP 復制文件scp 命令利用 SSH 協議安全地復制文件。例如在 Git Bash 或 PowerShell 中運行:

    scp -r C:\path\to\project user@server.example.com:/var/www/project
    

    其中 -r 表示遞歸復制整個目錄。該命令會要求輸入服務器密碼,或使用已有的 SSH 密鑰免密碼登錄。SCP 適用于一次性快速復制整個項目目錄。

  • 使用 Rsync 同步文件rsync 是一個高效的遠程同步工具,只傳輸改變的文件部分,適合頻繁更新時使用。例如:

    rsync -avz -e "ssh -p 22" /c/path/to/project/ user@server.example.com:/var/www/project/
    

    選項中 -a 表示歸檔模式保留權限等,-v 顯示詳細過程,-z 啟用壓縮傳輸。-e 指定使用 ssh。rsync 僅傳輸修改過的內容,效率更高。在 Windows 上可以通過 Git Bash 或 WSL 安裝并使用 rsync

  • 在服務器上直接克隆/更新倉庫:如果服務器可以訪問 Git 代碼托管平臺,也可以在服務器上執行 git clonegit pull。例如:

    ssh user@server.example.com
    cd /var/www
    git clone git@github.com:用戶名/倉庫名.git
    # 之后如果需要更新,進入項目目錄運行:
    git pull origin main
    

    這種方式需要服務器安裝好 Git,并確保服務器的 SSH 公鑰已被 GitHub 授權。優點是只傳輸代碼改動,不需要每次手工復制整個項目。

注意事項與提示

  • 在 Windows 上使用 scprsync 時,需要在系統中安裝 OpenSSH(Windows 10/11 通常已內置),或使用 Git Bash 等工具。
  • 傳輸前最好先確認服務器目標目錄存在并有正確權限。
  • 在首次使用 Git 方式部署時,可能需要先配置服務器端的 SSH key 或運行 ssh-keygen
  • 無論哪種方式,保持文件權限和依賴安裝一致很重要,可在服務器上用腳本處理部署后的編譯、重啟等操作。

參考資料:Git 官方文檔、Atlassian 和 GitHub 教程提供了豐富示例和說明。

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

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

相關文章

航空航天領域對滾珠絲桿的精度要求有多高?

航空航天領域對滾珠絲桿的精度要求非常高&#xff0c;尤其是飛行器、火箭和衛星等載具的導航和定位系統都需要高精度的滾珠絲桿&#xff0c;以確保高精度的位置控制和穩定的導航性能。那么&#xff0c;航空航天領域對滾珠絲桿的精度要求有多高&#xff1f; 1、定位精度&#xf…

技術篇-2.5.Matlab應用場景及開發工具安裝

Matlab 在數學建模和數值分析等領域具有無可替代的地位。它幾乎涵蓋所有常見數學算法的內置函數庫&#xff0c;使得從數據預處理、方程求解到優化算法的實現&#xff0c;無需編寫大量底層代碼即可快速完成&#xff1b;同時&#xff0c;Matlab 強大的可視化能力&#xff0c;可以…

Vtk概覽1

vtk環境搭建 見&#xff08;VTK開發環境配置(Visual Studio C)-詳細圖文教程-CSDN博客&#xff09; 在學習vtk圖形圖像進階的第二章時&#xff0c;通過vs2022建的控制臺程序&#xff0c;編寫運行示例2.1 發現 不顯示圖像。 #include <iostream> #include<vtkRenderW…

【數據集】基于ubESTARFM法的100m 地溫LST數據集(澳大利亞)

目錄 數據概述一、輸入數據與處理二、融合算法1. ESTARFM(Enhanced STARFM)2. ubESTARFM(Unbiased ESTARFM)代碼實現數據下載參考根據論文《Generating daily 100 m resolution land surface temperature estimates continentally using an unbiased spatiotemporal fusion…

Lucide:一款精美的開源矢量圖標庫,前端圖標新選擇

名人說:博觀而約取,厚積而薄發。——蘇軾《稼說送張琥》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 目錄 一、前言:為何選擇 Lucide?二、Lucide 是什么?1. 基本介紹2. Lucide vs Feather三、如何在項目中使用 Lucide?1. 安裝圖標包(以 React 為例)2…

BeanUtil和BeanUtils有什么區別

BeanUtil 和 BeanUtils 是兩個常見的工具類&#xff0c;通常用于 Java 開發中處理對象之間的屬性復制或轉換。它們的功能可能看起來相似&#xff0c;但實際上它們來自不同的庫&#xff0c;并且在實現細節和使用方式上存在一些差異。 以下是它們的主要區別&#xff1a; 1. 來源…

【CF】Day66——Edu 168.D + CF 853 (Div. 2).C (樹 + 二分 + 貪心 | 組合數學)

D. Maximize the Root 題目&#xff1a; 思路&#xff1a; 樹上二分&#xff0c;中下題 我們可以發現如果 x 可以&#xff0c;那么 x - 1 肯定也可以&#xff0c;所以可以直接二分答案 具體的&#xff0c;我們每次二分能增加的值 mid &#xff0c;如果 a[i] < mid&#xf…

生成對抗網絡(GANs)中的損失函數公式 判別器最優解D^*(x)的推導

https://www.bilibili.com/video/BV1YyHSekEE2 這張圖片展示的是生成對抗網絡&#xff08;GANs&#xff09;中的損失函數公式&#xff0c;特別是針對判別器&#xff08;Discriminator&#xff09;和生成器&#xff08;Generator&#xff09;的優化目標。讓我們用Markdown格式逐…

分布式爬蟲架構設計

隨著互聯網數據的爆炸式增長&#xff0c;單機爬蟲已經難以滿足大規模數據采集的需求。分布式爬蟲應運而生&#xff0c;它通過多節點協作&#xff0c;實現了數據采集的高效性和容錯性。本文將深入探討分布式爬蟲的架構設計&#xff0c;包括常見的架構模式、關鍵技術組件、完整項…

[java]eclipse中windowbuilder插件在線安裝

目錄 一、打開eclipse 二、打開插件市場 三、輸入windowbuilder&#xff0c;點擊install 四、進入安裝界面 五、勾選我同意... 重啟即可 一、打開eclipse 二、打開插件市場 三、輸入windowbuilder&#xff0c;點擊install 四、進入安裝界面 五、勾選我同意... 重啟即可

sass,less是什么?為什么要使用他們?

理解 他們都是css的預處理器,允許開發者通過更高級的語法編寫css代碼(支持變量,嵌套),然后通過編譯成css文件 使用原因 結構清晰,便于擴展提高開發效率,便于后期開發維護

Java設計模式之模板方法模式:從基礎到高級的全面解析(最詳解)

文章目錄 一、模板方法模式基礎概念1.1 什么是模板方法模式1.2 模板方法模式的核心結構1.3 模板方法模式中的方法分類1.4 模板方法模式的簡單示例二、模板方法模式的深入解析2.1 模板方法模式的核心原理2.2 模板方法模式的優勢與適用場景優勢分析適用場景2.3 模板方法模式與其他…

【C/C++】如何在一個事件驅動的生產者-消費者模型中使用觀察者進行通知與解耦

文章目錄 如何在一個事件驅動的生產者-消費者模型中使用觀察者進行通知與解耦?1 假設場景設計2 Codes3 流程圖4 優劣勢5 風險可能 如何在一個事件驅動的生產者-消費者模型中使用觀察者進行通知與解耦? 1 假設場景設計 Producer&#xff08;生產者&#xff09;&#xff1a;生…

MVC和MVVM架構的區別

MVC和MVVM都是前端開發中常用的設計模式&#xff0c;都是為了解決前端開發中的復雜性而設計的&#xff0c;而MVVM模式則是一種基于MVC模式的新模式。 MVC(Model-View-Controller)的三個核心部分&#xff1a;模型、視圖、控制器相較于MVVM(Model-View-ViewModel)的三個核心部分…

蘭亭妙微 | 圖標設計公司 | UI設計案例復盤

在「33」「312」新高考模式下&#xff0c;選科決策成為高中生和家長的「頭等大事」。蘭亭妙微公司受委托優化高考選科決策平臺個人診斷報告界面&#xff0c;核心挑戰是&#xff1a;如何將復雜的測評數據&#xff08;如學習能力傾向、學科報考機會、職業興趣等&#xff09;轉化為…

有銅半孔的設計規范與材料創新

設計關鍵參數 孔徑與間距限制 最小孔徑需≥0.6mm&#xff0c;孔邊距≥0.5mm&#xff0c;避免銅層脫落&#xff1b;拼版時半孔區域需預留2mm間距防止撕裂。 阻焊橋設計 必須保留阻焊橋&#xff08;寬度≥0.1mm&#xff09;&#xff0c;防止焊錫流入孔內造成短路。 獵板的材料…

Engineering a direct k-way Hypergraph Partitioning Algorithm【2017 ALENEX】

文章目錄 一、作者二、摘要三、相關工作四、算法概述五、實驗結果六、主要貢獻 一、作者 Yaroslav Akhremtsev, Tobias Heuer, Peter Sanders, Sebastian Schlag 二、摘要 我們開發了一種快速且高質量的多層算法&#xff0c;能夠直接將超圖劃分為 k 個平衡的塊 —— 無需借助遞…

視頻問答功能播放器(視頻問答)視頻彈題功能實例

視頻問答播放器是一種互動教學工具&#xff0c;在視頻播放過程中彈出題目卡&#xff0c;學員答題后才能繼續觀看&#xff0c;提升學習參與度。視頻問答功能播放器(視頻問答)視頻彈題功能實例&#xff1a; 視頻播放器的視頻問答功能&#xff08;也叫問答播放器、視頻彈題、視頻問…

2025年AI代理演進全景:從技術成熟度曲線到產業重構

2025年AI代理演進全景&#xff1a;從技術成熟度曲線到產業重構 一、技術成熟度曲線定位&#xff1a;AI代理的“期望膨脹期” 根據Gartner技術成熟度曲線&#xff08;Hype Cycle?&#xff09;&#xff0c;AI代理&#xff08;Agentic AI&#xff09;當前正處于期望膨脹期向泡沫…

基于python的機器學習(八)—— 評估算法(一)

目錄 一、機器學習評估的基本概念 1.1 評估的定義與目標 1.2 常見評估指標 1.3 訓練集、驗證集與測試集的劃分 二、分離數據集 2.1 分離訓練數據集和評估數據集 2.2 k折交叉驗證分離 2.3 棄一交叉驗證分離 2.4 重復隨機評估和訓練數據集分離 三、交叉驗證技術 3.…