【實習總結】快速上手Git:關鍵命令整理

目錄

git的四大工作區域

git首次配置

克隆遠程倉庫

提交代碼到遠程倉庫

查看文件狀態(可選)

添加文件到暫存區

將暫存區的內容提交到本地倉庫

將本地的提交上傳到遠程倉庫

拉取并合并代碼

第一種方式

第二種方式

分支管理

查看與創建分支

切換分支

合并分支

刪除分支

撤銷與修改

修改最后一次提交

版本回退 (本地)?

撤銷提交

臨時儲藏(好用)

追溯代碼

git blame

git log

git show


git的四大工作區域

在開始介紹git常用操作之前,我們先對git四大工作區域進行介紹,方便后續理解。

1、工作區

是什么:工作區就是我們在電腦上能直接看到的項目文件夾,包含所有源代碼、圖片等文件,也就是我們直接用編譯器進行修改的地方。

文件狀態:文件可能處于“已修改”或者“未跟蹤”狀態。

2、暫存區

是什么:一個位于.git目錄中、看不見的特殊文件,它像一個購物車或者待提交清單。

作用:我們如果在工作區做了很多修改,但是我們只想提交其中兩個,這時,把這兩個文件的快照添加(git add)到暫存區,暫存區能夠讓我們精確的控制下一次提交要包含哪些內容。

3、本地倉庫

是什么: 位于 .git 目錄中的另一個部分,它保存了項目所有版本(提交)的完整歷史記錄。可以把它想象成一個個人電腦上的“版本檔案館”。

作用: 當我們執行 git commit 時,Git 會把 暫存區 里的所有內容,打包成一個永久性的版本快照(一個 commit 對象),并存入本地倉庫。這個過程完全在本地電腦上完成,不需要聯網。

4、遠程倉庫

是什么: 托管在網絡服務器上的項目倉庫(例如 Gitee、GitHub)。

作用: 這是團隊成員之間共享代碼、同步進度的“中央服務器”。我們可以把本地倉庫的提交“推送 (push)”到遠程倉庫,也可以從遠程倉庫“拉取 (pull)”別人的提交。

git首次配置

在我們提交前,需要先署名,這個簽名會嵌入后續的每一次提交中,方便后期代碼追溯。

# 設置你的用戶名 (這個名字會顯示在提交歷史里)
git config --global user.name "名字或昵稱"# 設置你的郵箱 (最好和 Gitee/GitHub 賬號郵箱一致)
git config --global user.email "your.email@example.com"#查看當前 Git 的所有配置信息
git config --list

這個操作只要在剛開始執行一次就好了,效果如下:

克隆遠程倉庫

在一開始,我們通常需要從遠程服務器完整地復制一個項目代碼文件以及所有歷史到本地電腦上。

命令如下:

git clone <url>

示例:

git clone https://github.com/example/project.git

這個url,我們去git項目目錄下獲取即可,如下:

提交代碼到遠程倉庫

查看文件狀態(可選)

查看狀態,以此可以看到當前每個文件處于哪個區域

git status

添加文件到暫存區

將工作區地修改“快照”并添加到待提交清單中

# 添加一個指定文件
git add main.cpp# 添加一個指定目錄
git add src/# 添加所有當前目錄下的已修改或新創建的文件
git add .

將暫存區的內容提交到本地倉庫

將暫存區的所有內容生成一個永久性的快照,并保存到本地倉庫的版本歷史中。

# 提交并打開默認編輯器來填寫提交信息
git commit# 提交并直接在命令行中附帶提交信息 (最常用)
git commit -m "修復了用戶登錄的bug"# 將 add 和 commit 合并為一步 (僅對已跟蹤過的文件有效)
git commit -am "更新了文檔說明"

將本地的提交上傳到遠程倉庫

將本地倉庫的修改上傳到遠程倉庫。

# 將本地的 main 分支推送到名為 origin 的遠程倉庫
git push origin main

但是在多人協作的時候,可能會存在其他人對遠程倉庫進行了新的提交,那么此時,我們本地倉庫代碼就和遠程倉庫代碼產生了沖突,此時就需要拉取最新的代碼到本地,進行合并后在提交到遠程倉庫

如果合并過程中,兩個分支修改了同一個文件的同一行,就會產生 合并沖突。Git 會在文件里標記出沖突,需要你手動編輯文件,解決沖突后,再 add 和 commit 來完成合并。

拉取并合并代碼

第一種方式

1、獲取遠程倉庫最新信息

# 從名為 origin 的遠程倉庫獲取所有更新
git fetch origin

從遠程倉庫下載最新的歷史記錄和信息(比如新的提交、新的分支),并更新你本地的遠程跟蹤分支,不會修改本地工作區里的任何文件。

2、檢查更新內容

看看新獲取的更新,修改了什么

# 比較你本地的 main 和剛剛更新的遠程 main 有什么不同
git log main..origin/main# 或者,如果你想看具體的文件差異
git diff main origin/main

3、合并代碼

# 確保你當前在自己的 main 分支上
git switch main# 將遠程 main 分支的修改,合并到你本地的 main 分支
git merge origin/main

第二種方式

拉取并合并 從遠程倉庫獲取最新版本,并自動與你的本地分支合并。它相當于 git fetch + git merge 。

# 拉取遠程倉庫名為origin的 main 分支,并與本地當前分支合并
git pull origin main

分支管理

分支是 Git 的精髓,它允許我們創建一條獨立的開發線,去開發新功能或修復bug,而不會弄亂主線。

查看與創建分支

# 列出所有本地分支,并高亮當前分支
git branch# 創建一個名為 feature/new-login 的新分支
git branch feature/new-login

切換分支

git checkout <branch> 或 git switch <branch>,切換分支,工作區文件會瞬間變成那個分支所指向的狀態

# 切換到已存在的分支
git switch feature/new-login# 創建并立即切換到新分支 (復合命令,非常常用)
git switch -c hotfix/bug-123

合并分支

將一個分支的修改,合并到當前所在的分支。

# 1. 首先,切換到接受合并的目標分支 (如主分支)
git switch main# 2. 然后,執行合并,將 feature 分支合入
git merge feature/new-login

刪除分支

# 刪除一個已經合并過的本地分支
git branch -d hotfix/bug-123

撤銷與修改

修改最后一次提交

git commit --amend修改最后一次提交 如果提交后發現有小錯誤(比如注釋寫錯了),可以用它來修正。

git commit --amend "bug修改"
git commit --amend --no-edit  # --no-edit 表示不修改上次的提交信息

版本回退 (本地)?

移動分支指針,回到過去某個版本。 警告:如果提交已推送到遠程,請不要使用,因為它會重寫歷史,給團隊帶來麻煩。

常用選項

  • - --soft : 僅移動 HEAD 指針,你的工作區和暫存區不變。
  • - --mixed (默認): 移動 HEAD,并重置暫存區,但工作區不變。
  • - --hard : (極度危險) 移動 HEAD,并 徹底重置 暫存區和 工作區 ,所有未提交的修改都會 永久丟失 。
# 徹底回退到上一個版本,工作區和暫存區都恢復 (危險!)
git reset --hard HEAD~1

撤銷提交

創建一個新的提交 ,其內容剛好是指定提交的 反向操作 。這是推薦的撤銷方式 ,因為它不重寫歷史,適合用于撤銷已經推送到遠程的提交。

git revert <commit_hash_of_bad_commit>

臨時儲藏(好用)

當你手頭工作沒做完,但需要緊急切換到別的分支時,用它來保存當前工作區和暫存區的修改。

# 保存當前修改
git stash save "temp message"# 處理完別的事情后,回來恢復
git stash pop#查看所有暫存的更改
git stash list#應用最近一次暫存的更改
git stash apply#刪除指定的暫存記錄
git stash drop

追溯代碼

  • 想知道某一行代碼是誰寫的? ?用 git blame 。

  • 想知道某個文件/項目的演變過程? 用 git log 。

  • 想看某次提交到底干了什么? 先用 git log 找到它,再用 git show 查看它。

git blame

????????如果想知道某一行代碼是誰、在哪個版本、什么時候修改的,可以使用git blame,他會按行顯示文件的每一行最后是被哪個提交修改的。

# 查看指定文件的每一行代碼的“身世”
git blame [文件路徑]

git log

git log 是一個功能極其豐富的歷史瀏覽器,可以讓我們查看一個分支、一個文件甚至一個函數的完整演變歷史。

常用選項:

  • git log --oneline : 單行顯示,更緊湊。
  • git log --graph : 以圖形方式展示分支的合并與分叉。
  • git log -p <文件名> : 顯示指定文件的歷史,并附帶每次提交的具體代碼差異。
  • git log --author="作者名" : 只看某個特定成員的提交。

a)查看整個項目的歷史

# 查看所有提交記錄
git log# 查看簡化的單行歷史,并帶上分支圖
git log --oneline --graph --decorate

b)查看單個文件的所有修改記錄

git log [文件路徑]

c)查看單個文件內容的具體的變化記錄

如果我們不僅想看提交記錄,還想看每次提交具體改了什么代碼 ,可以加上 -p 參數

git log -p [文件路徑]

這會把每一次涉及該文件的修改,用 diff 的格式全部展示出來。

git show

當我們通過 git log 或 git blame 找到了一個可疑的提交哈希碼(比如 c4d2a8f ),可以用 git show 來查看這次提交的所有細節,比如(作者、日期、提交信息)和它所做的所有代碼改動。

git show [提交哈希碼]

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

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

相關文章

02-開發環境搭建與工具鏈

第2課&#xff1a;開發環境搭建與工具鏈 &#x1f4da; 課程目標 掌握DevEco Studio的下載、安裝和配置熟悉HMS Core&#xff08;華為移動服務&#xff09;的使用了解鴻蒙模擬器與真機調試環境掌握必備開發工具的使用 &#x1f6e0;? DevEco Studio環境搭建 2.1 下載與安裝…

刪掉一個元素以后全為1的最長子數組-滑動窗口

1493. 刪掉一個元素以后全為 1 的最長子數組 - 力扣&#xff08;LeetCode&#xff09; Solution #include<iostream> #include<vector> using namespace std;class Solution { public://滑動窗口//動態維護一個窗口&#xff0c;窗口內只能有1個0&#xff0c;記錄窗…

【計算機網絡 | 第8篇】編碼與調制

文章目錄通信系統中的編碼與調制&#xff1a;從信道基礎到信號傳輸技術一、信道與通信電路&#x1f342;二、三種基本通信方式&#x1f4d6;1. 單向通信&#xff08;單工通信&#xff09;2. 雙向交替通信&#xff08;半雙工通信&#xff09;3. 雙向同時通信&#xff08;全雙工通…

當AI遇上終端:Gemini CLI的技術魔法與架構奧秘

"代碼不僅僅是指令的集合&#xff0c;更是思想的載體。當AI與終端相遇&#xff0c;會碰撞出怎樣的火花&#xff1f;" 在這個AI技術日新月異的時代&#xff0c;Google推出的Gemini CLI無疑是一顆璀璨的明星。它不僅僅是一個命令行工具&#xff0c;更是一個將人工智能無…

ViLU: Learning Vision-Language Uncertainties for Failure Prediction

研究方向&#xff1a;Image Captioning1. 論文介紹本文提出ViLU&#xff08;Vision-Language Uncertainties&#xff09;&#xff0c;一個用于學習視覺語言不確定性量化&#xff08;UQ&#xff09;和檢測視覺語言模型故障的事后框架。使用VLMs進行量化&#xff08;UQ&#xff0…

數據集筆記:百度地圖高德地圖坐標互轉

1 為什么會有高德坐標系和百度坐標系&#xff1f;根據《測繪法》和國家保密法規&#xff0c;在中國大陸范圍內的地理坐標數據必須做加密處理&#xff0c;不允許直接使用 WGS84&#xff08;openstreetmap&#xff09;所以出現了GCJ-02 和 BD-09高德、騰訊、谷歌中國都遵循 GCJ-0…

SkyWalking高效線程上下文管理機制:確保調用鏈中traceId來自同一個請求

SkyWalking Agent 能確保獲取到“正確”的 traceId,其核心在于它建立并維護了一套高效的線程上下文管理機制。這套機制確保了即使在復雜的多線程、異步環境下,也能將正確的上下文(包含 traceId)與當前正在執行的代碼邏輯關聯起來。 其工作原理可以概括為下圖所示的流程: …

Kafka-Eagle安裝

目錄Eagle環境安裝Mysql環境準備Kafka環境準備Eagle安裝Kafka-Eagle框架可以監控Kafka集群的整體運行情況&#xff0c;在生產環境中經常使用 Eagle環境安裝 Mysql環境準備 Eagle的安裝依賴于Mysql&#xff0c;Mysql主要用來存儲可視化展示的數據 將mysql文件夾及里面所有內…

Matlab系列(005) 一 歸一化

目錄1、前言2、什么是歸一化&#xff1f;3、為什么要進行歸一化4、歸一化方法詳解與Matlab實現5、總結1、前言 ? ??歸一化技術是數據預處理的核心環節&#xff0c;本文將深度解析主流歸一化方法&#xff0c;提供可復現Matlab代碼&#xff0c;并探討其在各領域中的應用場景。…

【K8s】整體認識K8s之namespace

命名空間將資源劃分為相互隔離的組。kubectl get namespace/ns系統默認創建四個namespace&#xff0c;分別是default、kube-node-lease、kube-public、kube-system。default 沒有指明使用其它命名空間的對象所使用的默認命名空間、kube-system 系統創建對象所使用的命名空間。…

rust語言 (1.88) egui (0.32.1) 學習筆記(逐行注釋)(十八) 使用表格

使用表格egui_extras::TableBuilder // Cargo.toml [dependencies] eframe "0.32.1" egui "0.32.1" egui_extras "0.32.1"egui_extras::Column::auto() 列寬根據內容自動計算.resizable(true) 允許用戶手動拖動調整列寬 fn main() -> efra…

【C#】構造函數實用場景總結

文章目錄前言一、構造函數是什么&#xff1f;二、構造函數的用法1.初始化對象&#xff0c;避免無效狀態2 初始化靜態成員3 構造函數重載4.構造函數鏈5. 單例模式&#xff0c;多次實例化保持一個對象6. 依賴注入7. 初始化只讀對象前言 構造函數是我們平常編程里經常能碰到的老伙…

LLM預訓練架構全解析:從零構建一個語言世界的“操作系統”

導讀&#xff1a;作為開發者&#xff0c;我們每天都在import或#include各種庫&#xff0c;我們信任這些由無數代碼構成的底層依賴。那么&#xff0c;當我們調用一個LLM時&#xff0c;它所依賴的那個更底層的、無形的**“語言操作系統”**&#xff0c;又是如何被“編譯”出來的&…

Linux服務測試題(DNS,NFS,DHCP,HTTP)

一&#xff0c;實驗拓撲&#xff1a;二&#xff0c;需求APPSRV&#xff1a;主機名&#xff1a;appsrv.example.comip地址&#xff1a;192.168.100.10網關&#xff1a;192.168.100.254網卡為NAT模式STORAGESRV&#xff1a;主機名&#xff1a;storagesrv.example.comip地址&#…

DevOps 簡介及就業前景

DevOps 簡介及就業前景 目錄 DevOps簡介核心概念重難點解析具體場景使用就業前景學習路徑最佳實踐 DevOps簡介 什么是DevOps DevOps是Development&#xff08;開發&#xff09;和Operations&#xff08;運維&#xff09;的組合詞&#xff0c;是一種軟件開發和IT運維的文化…

《CF1120D Power Tree》

題目描述 給定一棵有 n 個頂點的有根樹&#xff0c;樹的根為頂點 1。每個頂點都有一個非負的價格。樹的葉子是指度為 1 且不是根的頂點。 Arkady 和 Vasily 在樹上玩一個奇怪的游戲。游戲分為三個階段。第一階段&#xff0c;Arkady 購買樹上的一些非空頂點集合。第二階段&…

CPTS-Agile (Werkzeug / Flask Debug)

枚舉 nmap -sC -sV -T4 -Pn -n -p- 10.10.11.203進行常規的網頁枚舉和測試發現報錯信息&#xff0c;‘Werkzeug / Flask Debug’ 測試Export導出功能發現存在路徑遍歷查看這篇文章 https://book.hacktricks.wiki/zh/network-services-pentesting/pentesting-web/werkzeug.html#…

【網絡運維】Shell 腳本編程:while 循環與 until 循環

Shell 腳本編程&#xff1a;while 循環與 until 循環 循環結構簡介 循環語句是 Shell 腳本中用于重復執行一條或一組指令的重要工具&#xff0c;直到滿足特定條件時停止執行。Shell 腳本中常見的循環語句包括 while、until、for 和 select。本文將重點介紹 while 和 until 兩種…

LLM 中評價指標與訓練概要介紹

在【LLM】LLM 中增量解碼與模型推理解讀一文中對 LLM 常見名詞進行了介紹&#xff0c;本文會對 LLM 中評價指標與訓練概要進行介紹&#xff0c;本文并未介紹訓練實操細節&#xff0c;未來有機會再了解&#xff5e; 一、LLM 如何停止輸出 在看 LLM 評價指標前&#xff0c;先看…

Java 20 新特性及具體應用

目錄 1. 模式匹配 for switch&#xff08;預覽特性&#xff09; 2. 記錄模式&#xff08;預覽特性&#xff09; 3. 外部函數與內存 API&#xff08;預覽特性&#xff09; 4. 矢量 API&#xff08;孵化器特性&#xff09; 5. 作用域值&#xff08;預覽特性&#xff09; 6. …