Git常用命令詳解:從入門到精通

前言

Git作為當今最流行的分布式版本控制系統,已經成為開發者必備的技能之一。無論你是獨立開發者還是團隊協作,掌握Git的基本操作都能極大提高工作效率。本文將詳細介紹Git的常用命令,幫助你快速上手并精通Git的基本使用。

一、Git基礎概念

在深入命令之前,我們先了解幾個Git的核心概念:

  • 倉庫(Repository):項目所在的目錄,包含所有文件的歷史記錄
  • 工作區(Working Directory):你當前編輯的文件目錄
  • 暫存區(Staging Area):準備提交的文件暫存區域
  • 提交(Commit):對文件更改的永久快照
  • 分支(Branch):獨立開發線,默認有master/main分支
  • 遠程倉庫(Remote):托管在網絡上的項目倉庫

二、Git安裝與配置

1. 安裝Git

Windows: 下載Git for Windows (Git for Windows)
Mac: 使用Homebrew brew install git
Linux: sudo apt-get install git (Ubuntu/Debian) 或 sudo yum install git (CentOS)

2. 基本配置

# 設置用戶名
git config --global user.name "Your Name"# 設置郵箱
git config --global user.email "your.email@example.com"# 查看配置
git config --list# 設置默認編輯器為VS Code
git config --global core.editor "code --wait"

三、Git常用命令詳解

1. 創建和克隆倉庫

# 在當前目錄初始化新倉庫
git init# 克隆遠程倉庫
git clone <repository-url># 克隆指定分支
git clone -b <branch-name> <repository-url># 克隆深度為1(只獲取最新版本,節省時間空間)
git clone --depth 1 <repository-url>

2. 基本工作流程

# 檢查當前文件狀態
git status# 添加文件到暫存區
git add <file-name>       # 添加特定文件
git add .                 # 添加所有更改文件
git add -A                # 添加所有更改(包括刪除的文件)
git add -u                # 添加已跟蹤文件的更改# 提交更改
git commit -m "提交信息"# 提交并跳過暫存區(自動add已跟蹤文件)
git commit -a -m "提交信息"# 修改最后一次提交
git commit --amend

3. 查看歷史記錄

# 查看提交歷史
git log# 簡潔版歷史
git log --oneline# 顯示文件更改詳情
git log -p# 顯示最近n條提交
git log -n <number># 圖形化顯示分支
git log --graph --oneline --all# 顯示某個文件的修改歷史
git log -p <file-name># 顯示某人的提交
git log --author="name"# 按日期篩選
git log --since="1 week ago"

4. 分支管理

# 查看所有分支
git branch       # 本地分支
git branch -a    # 所有分支(包括遠程)
git branch -v    # 查看分支最后提交# 創建新分支
git branch <branch-name># 切換分支
git checkout <branch-name># 創建并切換分支
git checkout -b <branch-name># 刪除分支
git branch -d <branch-name>    # 安全刪除(已合并)
git branch -D <branch-name>    # 強制刪除(未合并)# 重命名當前分支
git branch -m <new-name># 合并分支
git merge <branch-name># 變基(將當前分支變基到目標分支)
git rebase <branch-name>

5. 遠程操作

# 查看遠程倉庫
git remote -v# 添加遠程倉庫
git remote add <remote-name> <repository-url># 重命名遠程倉庫
git remote rename <old-name> <new-name># 刪除遠程倉庫
git remote remove <remote-name># 獲取遠程更新但不合并
git fetch <remote-name># 拉取遠程更新并合并
git pull <remote-name> <branch-name># 推送到遠程
git push <remote-name> <branch-name># 推送并設置上游分支
git push -u <remote-name> <branch-name># 強制推送(謹慎使用)
git push -f# 刪除遠程分支
git push <remote-name> --delete <branch-name>

6. 撤銷操作

# 撤銷工作區修改(未add)
git checkout -- <file-name># 撤銷暫存區修改(已add)
git reset HEAD <file-name># 撤銷提交(保留更改在工作區)
git reset --soft HEAD~1# 撤銷提交(保留更改在暫存區)
git reset --mixed HEAD~1    # 默認選項# 徹底撤銷提交(丟棄更改)
git reset --hard HEAD~1# 恢復特定提交
git revert <commit-hash># 恢復丟失的提交(通過reflog)
git reflog
git reset --hard <commit-hash-from-reflog>

7. 儲藏與清理

# 儲藏當前更改
git stash# 儲藏包括未跟蹤文件
git stash -u# 查看儲藏列表
git stash list# 恢復最近儲藏
git stash apply# 恢復指定儲藏
git stash apply stash@{n}# 刪除儲藏
git stash drop stash@{n}# 恢復并刪除儲藏
git stash pop# 清理未跟蹤文件
git clean -n    # 預覽將被刪除的文件
git clean -f    # 刪除未跟蹤文件
git clean -fd   # 刪除未跟蹤文件和目錄

8. 標簽管理

# 列出標簽
git tag# 創建輕量標簽
git tag <tag-name># 創建附注標簽
git tag -a <tag-name> -m "tag message"# 查看標簽詳情
git show <tag-name># 刪除標簽
git tag -d <tag-name># 推送標簽到遠程
git push <remote-name> <tag-name># 推送所有標簽
git push <remote-name> --tags# 刪除遠程標簽
git push <remote-name> :refs/tags/<tag-name>

9. 子模塊管理

# 添加子模塊
git submodule add <repository-url> <path># 克隆包含子模塊的項目
git clone <repository-url>
git submodule init
git submodule update# 或者一步完成
git clone --recurse-submodules <repository-url># 更新子模塊
git submodule update --remote

10. 高級操作

# 交互式暫存
git add -i# 交互式變基
git rebase -i HEAD~n# 二分查找引入bug的提交
git bisect start
git bisect bad
git bisect good <commit-hash>
# 測試后標記當前提交為good或bad
git bisect reset   # 結束二分查找# 重寫提交歷史(謹慎使用)
git filter-branch

四、Git最佳實踐

  1. 提交規范
    • 提交信息要清晰明確
    • 遵循約定式提交(Conventional Commits)
    • 示例: feat: 添加用戶登錄功能fix: 修復登錄頁面樣式問題
  1. 分支策略
    • 主分支(master/main)保持穩定
    • 功能開發使用feature分支
    • 修復bug使用hotfix分支
    • 長期維護使用release分支
  1. 工作流程
    • 頻繁提交,小步前進
    • 一個提交只做一件事
    • 提交前檢查更改git diff
    • 定期從上游拉取更新
  1. .gitignore文件
    • 忽略不需要版本控制的文件(如日志、構建產物等)

示例內容:

    • text
*.log
node_modules/
.DS_Store
*.exe

五、常見問題解決

  1. 沖突解決
    • 發生沖突時,Git會在文件中標記沖突部分
    • 手動編輯文件解決沖突
    • 使用git add標記沖突已解決
    • 完成合并git commit
  1. 撤銷公共歷史
    • 避免對已推送的歷史進行reset --hard
    • 使用git revert創建反向提交
  1. 大文件處理
    • 使用Git LFS管理大文件
    • 避免將二進制文件加入Git
  1. 憑證存儲
    • 使用SSH密鑰避免每次輸入密碼

或配置憑證存儲:

    • bashgit config --global credential.helper store

六、可視化工具推薦

  1. Git GUI客戶端
    • GitHub Desktop
    • Sourcetree
    • GitKraken
    • Tower
  1. IDE集成
    • VS Code Git集成
    • IntelliJ IDEA Git工具
    • Eclipse EGit
  1. 在線工具
    • GitHub
    • GitLab
    • Bitbucket

結語

Git是一個功能強大且靈活的工具,本文介紹的只是最常用的命令和操作。隨著使用經驗的積累,你會逐漸發現更多高級用法來提高工作效率。記住,Git的核心思想是記錄項目的歷史變化,而不是簡單地保存當前狀態。掌握Git不僅能幫助你更好地管理代碼,還能讓你在團隊協作中游刃有余。

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

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

相關文章

Vue-22-通過flask接口提供的數據使用plotly.js繪圖(一)

文章目錄 1 任務背景 2 Flask提供接口(server.py) 2.1 原始代碼 2.2 跨域問題 3 Vue3獲取數據并渲染Plotly圖表 3.1 新建工程 3.2 程序 3.2.1 index.html(入口) 3.2.2 cpmponents/Plot.vue(子組件) 3.2.3 App.vue(父組件) 3.2.4 main.ts 3.3 展示 4 選擇圖表類型繪圖 4.1 App.v…

【mysql】換主鍵

需求&#xff1a;曲庫表的主鍵錯了&#xff0c;原先設置的是(sang_id),應該設置為&#xff08;sang_name,singer&#xff09;聯合主鍵。-- &#xff08;0&#xff09;先備份數據&#xff0c;我這里沒備份 -- &#xff08;1&#xff09;進行主鍵的切換之前&#xff0c;要進行一些…

Redis原理之緩存

上篇文章&#xff1a; Redis原理之集群https://blog.csdn.net/sniper_fandc/article/details/149141342?fromshareblogdetail&sharetypeblogdetail&sharerId149141342&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目錄 1 Redis作為MySQL…

關于集合的底層數據結構

單列集合Collection分為list集合和set集合list集合分為ArrayList和LinkedListArrayList--底層數據結構是數組1.通過索引查詢快2.增刪要重構索引,增刪慢 LinkedList--底層數據結構是鏈表1.無索引查詢慢2.通過改變前節點的尾指針和后節點的前指針指向可快速增刪,增刪快set集合(…

批量插入技巧:減少事務提交次數的性能提升

一、事務提交成本分析每次事務提交觸發?磁盤I/O同步?&#xff08;WAL機制&#xff09;、?日志寫入?和?鎖資源釋放?操作&#xff0c;高頻獨立提交會產生指數級開銷?。實驗表明&#xff1a;MySQL提交1萬次單條插入比單次批量插入?慢20倍以上??。高頻提交還加劇鎖競爭與…

importlib.import_module() 的用法與實戰案例

&#x1f31f; 一、什么是 importlib&#xff1f; importlib 是 Python 的一個內置標準庫&#xff0c;用于在程序運行時 動態導入模塊。 &#x1f524; 對比&#xff1a;普通 import vs importlib方式示例特點靜態導入import os編寫代碼時就確定要導入的模塊動態導入importlib.…

Oracle 12c 創建數據庫初級教程

1. 連接到Oracle sqlplus / as sysdba Oracle數據庫名稱默認為ORCL或sqlplus /ORCL as sysdba Oracle數據庫名稱默認為ORCL2. 創建表空間&#xff08;數據庫&#xff09; create user YOUR_USERNAME identified by "YOUR_PASSWORD"; YOUR_USERNAME為數據庫名稱和登…

zabbix服務器告警處理

zabbix服務器告警&#xff0c;信息為&#xff1a;Utilization of poller processes over 75%處理辦法為修改zabbix_server.conf配置文件&#xff0c;一般情況下為/etc/zabbix目錄下。根據自己輪詢器的類型修改對應的輪詢器的數量&#xff1b;我這里把StartPollers&#xff0c;S…

隨筆20250721 PostgreSQL實體類生成器

我來幫你創建一個C#程序&#xff0c;從PostgreSQL數據庫讀取表結構并生成對應的實體類文件。我已經創建了一個完整的PostgreSQL實體類生成器。這個程序包含以下主要功能&#xff1a;主要特性數據庫連接: 使用Npgsql連接PostgreSQL數據庫表結構讀取: 自動讀取所有表的結構信息類…

B樹、B-樹與B+樹

B樹、B-tree與B樹 在計算機科學&#xff0c;尤其是數據庫和文件系統的領域中&#xff0c;B樹、B-tree和B樹是理解數據如何被高效存儲和檢索的關鍵。它們之間關系緊密&#xff0c;但功能和應用上又存在著決定性的差異。 一、 核心概念澄清&#xff1a;B樹就是B-tree 首先需要明確…

視頻格式轉換工廠v3.2.5,集音視頻、圖片處理78MB

今天&#xff0c;我們要介紹的是一款功能強大的視頻處理軟件——視頻格式轉換工廠。這款軟件已經完美破解&#xff0c;無需登錄即可享受全部高級功能。它不僅支持視頻格式轉換&#xff0c;還涵蓋了音頻、圖片處理等多種功能&#xff0c;是一款真正的多媒體處理工具。 視頻格式轉…

VUE 中父級組件使用JSON.stringify 序列化子組件傳遞循環引用錯誤

背景 VUE 中父級組件使用JSON.stringify 序列化子組件傳遞的數據會報錯 runtime-core.esm-bundler.js:268 Uncaught TypeError: Converting circular structure to JSON –> starting at object with constructor ‘Object’ — property ‘config’ closes the circle 原因…

HTTP,HTTPS

在網絡工程師、開發工程師、運維工程師等崗位的面試中&#xff0c;??HTTP/HTTPS?? 是高頻必考知識點&#xff0c;尤其在前端、后端、測試、DevOps等與網絡通信相關的職位中。以下是系統化的核心考點梳理&#xff0c;涵蓋基礎概念、協議機制、安全特性及應聘高頻問題。??一…

Nginx訪問日志分析在云服務器環境的技術實現與案例

在云計算時代&#xff0c;Nginx訪問日志分析已成為服務器運維的關鍵環節。本文將深入解析如何通過日志切割、實時監控和可視化展示三大技術路徑&#xff0c;實現云環境下Nginx日志的高效分析。我們將結合具體案例&#xff0c;演示從原始日志到運維決策的完整技術閉環&#xff0…

鴻蒙實現一次上傳多張圖片

記錄初接觸鴻蒙&#xff0c;遇到的一個問題&#xff0c;需求是點擊一個圖片上傳的號圖&#xff0c;訪問本地圖片&#xff0c;可以選擇多張圖片并上傳。下面是圖片上傳后的方法&#xff1a;//選擇圖片并上傳private async showPhotoPicker() {const maxImageCount 3;const rema…

【STM32】CRC 校驗函數

先上一下 CRC校驗 的源代碼&#xff1a; void crc_check(unsigned char *ptr,unsigned int len) //crc為開源函數 {unsigned long wcrc0XFFFF;//預置16位crc寄存器&#xff0c;初值全部為1unsigned char temp;//定義中間變量int i0,j0;//定義計數for(i0;i<len;i)//循環計算每…

【Java】SVN 版本控制軟件的快速安裝(可視化)

目錄 一、SVN 的概述 1.1 SVN 的概念 1.2 SVN 與 Git 的對比 1.3 SVN 軟件 二、SVN 的安裝 2.1 SVN 的工作流程 2.2 服務器端 SVN 的安裝 三、SVN 服務器端的配置 3.1 搭建項目 3.2 權限控制 四、SVN 客戶端的配置 4.1 SVN 客戶端的下載 4.2 客戶端連接 SVN 服務器…

Hadoop安全機制深度剖析:Kerberos認證與HDFS ACL細粒度權限控制

Hadoop安全機制概述在大數據時代&#xff0c;Hadoop作為分布式計算框架的核心組件&#xff0c;其安全性直接關系到企業數據資產的保護。隨著數據價值的不斷提升&#xff0c;Hadoop安全機制已從早期的"簡單信任模式"演進為包含多重防護措施的綜合體系&#xff0c;其重…

uniapp基本使用

資料 咸蝦米視頻 黑馬視頻 uniapp官方文檔 hbuilder 1.uniapp頁面生命周期 1.1 onLoad 還拿不到dom適合接受上頁的參數&#xff0c;聯網取數據&#xff0c;更新data。相當于created和beforeCreated期間主要的作用是比如說獲取url上的query參數 *url: ***/**?name張三&…

ssh2-sftp-client 簡化 sftp 文件傳輸的 node庫

ssh2-sftp-client 極大地簡化了通過 sftp 進行文件傳輸的復雜性。無論你是需要上傳、下載、刪除文件&#xff0c;還是列出目錄內容&#xff0c;可當簡易的部署腳步npm run deploy const SftpClient require(ssh2-sftp-client) const sftp new SftpClient()const config {hos…