Git Worktree 使用

新入職了一家公司,發現不同項目用的使用一個 git 倉庫管理。不久之后我看到這篇文章。

Git 的設計部??分是為了支持實驗。一旦你確定你的工作被安全地跟蹤,并且存在安全的狀態,以便在出現嚴重錯誤時可以恢復,你就不會害怕嘗試新的想法。然而,創新的代價之一就是你可能會在過程中弄得一團糟。文件會被重命名、移動、刪除、更改,甚至被分割成多個文件。新的文件會被引入。你不想跟蹤的臨時文件會在你的工作目錄中駐留。

簡而言之,你的工作區變成了一座紙牌屋,在“快要正常工作了!”“哦不,我做了什么?”之間艱難地平衡著。那么,當你需要讓倉庫在某個下午恢復到已知狀態以便完成一些實際工作時,該怎么辦呢?經典命令 git branch 和git stash?會立即浮現在你的腦海中,但它們的設計初衷并非以某種方式處理未跟蹤文件、更改的文件路徑以及其他重大變更,而存儲工作以供日后使用會讓人感到困惑。答案是 Git worktree。

什么是 Git 工作樹

跳至內容

Git 工作樹是 Git 倉庫的鏈接副本,允許您一次檢出多個分支。工作樹與主工作副本有獨立的路徑,但可以處于不同的狀態并位于不同的分支。Git 中新工作樹的優勢在于,您可以進行與當前任務無關的更改,提交更改,然后在稍后合并,所有這些都不會干擾您當前的工作環境。

一個典型的例子,直接來自git-worktree手冊頁:你正在為一個項目開發一個令人興奮的新功能,這時項目經理告訴你,需要緊急修復一個問題。問題在于,由于你正在開發一個重要的新功能,你的工作倉庫(你的“工作樹”)一片混亂。你不想把修復工作“偷偷”拖進當前的沖刺階段,也不想為了修復這個功能而存儲更改,創建一個新的分支。于是,你決定創建一個新的工作樹,以便在那里進行修復:

$ git branch | tee
* dev
trunk
$ git worktree add -b hotfix ~/code/hotfix trunk
Preparing ../hotfix (identifier hotfix)
HEAD is now at 62a2daf commit

在你的目錄中code,現在有一個名為 的新目錄hotfix,它是一個鏈接到你主項目倉庫的 Git 工作樹,它HEAD位于名為 的分支trunk。現在你可以將此工作樹視為你的主工作區。你可以將目錄切換到該目錄,進行緊急修復,提交修復,并最終刪除該工作樹:

$ cd ~/code/hotfix
$ sed -i 's/teh/the/' hello.txt
$ git commit --all --message 'urgent hot fix'

完成緊急工作后,您可以返回上一個任務。您可以控制何時將修補程序集成到主項目中。例如,您可以將更改直接從其工作樹推送到項目的遠程倉庫:

$ git push origin HEAD
$ cd ~/code/myproject

或者您可以將工作樹存檔為 TAR 或 ZIP 文件:

$ cd ~/code/myproject
$ git archive --format tar --output hotfix.tar master

或者您可以從單獨的工作樹本地獲取更改:

$ git worktree list
/home/seth/code/myproject  15fca84 [dev]
/home/seth/code/hotfix     09e585d [master]

從那里,您可以使用最適合您和您的團隊的策略合并您的更改。

列出活動工作樹

您可以使用以下命令獲取工作樹列表并查看每個工作樹已檢出的分支git worktree list

$ git worktree list
/home/seth/code/myproject  15fca84 [dev]
/home/seth/code/hotfix     09e585d [master]

您可以在任一工作樹中使用它。工作樹始終保持鏈接(除非您手動移動它們,否則 Git 將無法定位工作樹,從而切斷鏈接)。

移動工作樹

Git 跟蹤項目.git目錄中工作樹的位置和狀態:

$ cat ~/code/myproject/.git/worktrees/hotfix/gitdir 
/home/seth/code/hotfix/.git

如果需要重新定位工作樹,則必須使用git worktree move;否則,當 Git 嘗試更新工作樹的狀態時,將會失敗:

$ mkdir ~/Temp
$ git worktree move hotfix ~/Temp
$ git worktree list
/home/seth/code/myproject  15fca84 [dev]
/home/seth/Temp/hotfix     09e585d [master]

刪除工作樹

完成工作后,可以使用remove子命令將其刪除:

$ git worktree remove hotfix
$ git worktree list
/home/seth/code/myproject  15fca84 [dev]

為了確保.git目錄干凈,請prune在刪除工作樹后使用子命令:

$ git worktree prune

何時使用工作樹

與許多選項一樣,無論是標簽頁、書簽還是自動備份,您都需要自行跟蹤生成的數據,否則可能會不堪重負。不要過于頻繁地使用工作樹,以免最終導致您的代碼庫副本多達 20 個,每個副本的狀態都略有不同。我發現最好的方法是創建一個工作樹,執行需要它的任務,提交工作,然后刪除該工作樹。保持簡潔和專注。

重要的是,工作樹為 Git 倉庫的管理提供了更高的靈活性。在需要的時候使用它們,再也不用為了檢查其他分支上的內容而費力地保存工作狀態了。

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

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

相關文章

維智定位 Android 定位 SDK

概述 維智 Android 定位 SDK是為 Android 移動端應用提供的一套簡單易用的定位服務接口,為廣大開發者提供融合定位服務。通過使用維智定位SDK,開發者可以輕松為應用程序實現極速、智能、精準、高效的定位功能。 重要:為了進一步加強對最終用…

【CSS】使用 CSS 繪制三角形

一、Border 邊框法(最常用) 原理:通過設置元素的寬高為 0,利用透明邊框相交形成三角形。 .triangle {width: 0;height: 0;border-left: 50px solid transparent; /* 左側邊框透明 */border-right: 50px solid transparent; /* …

RabbitMQ 快速上手:安裝配置與 HelloWorld 實踐(一)

一、引言 在當今分布式系統大行其道的技術浪潮下,各個服務之間的通信與協同變得愈發復雜。想象一下,一個電商系統在大促期間,訂單服務、庫存服務、支付服務、物流服務等眾多模塊需要緊密配合。如果沒有一種高效的通信機制,系統很容…

【deekseek】TCP Offload Engine

是的,TOE(TCP Offload Engine)通過專用硬件電路(如ASIC或FPGA)完整實現了TCP/IP協議棧,將原本由CPU軟件處理的協議計算任務完全轉移到網卡硬件中。其延遲極低的核心原因在于 硬件并行性、零拷貝架構 和 繞過…

JavaScript 的編譯與執行原理

文章目錄 前言🧠 一、JavaScript 編譯與執行過程1. 編譯階段(發生在代碼執行前)? 1.1 詞法分析(Lexical Analysis)? 1.2 語法分析(Parsing)? 1.3 語義分析與生成執行上下文 🧰 二…

WORD個人簡歷單頁326款模版分享下載

WORD個人簡歷模版下載:WORD個人簡歷模版https://pan.quark.cn/s/7e79a822c490

Android 中 顯示 PDF 文件內容(AndroidPdfViewer 庫)

PDFView 是一個用于在 Android 應用中顯示 PDF 文檔的庫。它提供了豐富的功能和靈活的配置選項,使得開發者能夠輕松地在應用中嵌入 PDF 閱讀器。 一、 添加依賴 在模塊的 build.gradle 文件中添加以下依賴: // pdfimplementation("com.github.bar…

微信小程序學習之搜索框

1、第一步&#xff0c;我們在index.json中引入vant中的搜索框控件&#xff1a; {"usingComponents": {"van-search": "vant/weapp/search/index"} } 2、第二步&#xff0c;直接在index.wxml中添加布局&#xff1a; <view class"index…

OpenCL C++ 常見屬性與函數

核心對象與屬性 對象/屬性描述示例cl::Platform表示OpenCL平臺cl::Platform::get(&platforms)cl::Device表示計算設備cl::Device::getDefault()cl::Context管理設備、內存和命令隊列的上下文cl::Context(contextDevices)cl::CommandQueue命令隊列,用于提交命令cl::Command…

Milvus 視角看重排序模型(Rerankers)

在信息檢索和生成式人工智能領域&#xff0c;重排序器是優化初始搜索結果順序的重要工具。重排序器與傳統的嵌入模型不同&#xff0c;它將查詢和文檔作為輸入&#xff0c;并直接返回相似度得分&#xff0c;而不是嵌入。該得分表示輸入查詢和文檔之間的相關性。 重排序器通常在…

C語言:gcc 如何調用 Win32 打開文件對話框 ?

在 Windows 平臺上使用 gcc 調用原生 Win32 API 實現文件打開對話框是可行的&#xff0c;但需要直接使用 Win32 的 GetOpenFileName 函數&#xff08;位于 commdlg.h 頭文件&#xff0c;依賴 comdlg32.lib 庫&#xff09;。以下是完整實現步驟和代碼示例&#xff1a; 編寫 file…

計算機視覺與深度學習 | Python實現EMD-SSA-VMD-LSTM時間序列預測(完整源碼和數據)

EMD-SSA-VMD-LSTM混合模型 一、環境配置與依賴二、數據生成&#xff08;示例數據&#xff09;三、多級信號分解1. 經驗模態分解&#xff08;EMD&#xff09;2. 奇異譜分析&#xff08;SSA&#xff09;3. 變分模態分解&#xff08;VMD&#xff09; 四、數據預處理1. 歸一化處理2…

vue配置子路由,實現點擊左側菜單,內容區域顯示不同的內容

文章目錄 一、路由鏈路二、實現步驟準備二級路由下的.vue文件配置子路由聲明router-view標簽為菜單項 el-menu-item 設置index屬性&#xff0c;設置點擊后的路由路徑 三、參考資料 一、路由鏈路 二、實現步驟 準備二級路由下的.vue文件 配置子路由 router/index.js import {…

ModuleNotFoundError: No module named ‘SDToolbox‘

(py311) C:>python Python 3.11.11 | packaged by Anaconda, Inc. | (main, Dec 11 2024, 16:34:19) [MSC v.1929 64 bit (AMD64)] on win32 Type “help”, “copyright”, “credits” or “license” for more information. from SDToolbox import PostShock_eq Tracebac…

Hi3516DV500刷寫固件

hi3516DV500刷固件 1、硬件連接 2、軟件準備 3、刷固件步驟 一、硬件連接 特別注意的是&#xff0c;串口的接線順序 通過網線連接好筆記本和開發板后&#xff0c;需要確認一下網口水晶頭是否閃爍&#xff0c;以確認網絡物理是否連通 二、軟件資源準備 固件包準備 打開工具…

正則表達式r前綴使用指南

正則表達式中的 r&#xff1a;解鎖字符串轉義的魔法 正則表達式是處理字符串的強大工具&#xff0c;但它常常伴隨著轉義字符的復雜性。如果你曾因 \n、\t 或 \\ 的使用而困惑&#xff0c;那么這篇文章將為你揭開謎底&#xff0c;解釋為什么 r 是正則表達式中的「神奇武器」。本…

網絡攻防模擬:城市安全 “數字預演”

在當今數字化快速發展的時代&#xff0c;網絡安全和城市安全面臨著前所未有的挑戰。為有效應對這些挑戰&#xff0c;利用先進的技術搭建模擬演練平臺至關重要。圖撲軟件的 HT for Web 技術&#xff0c;為網絡攻防模擬與城市安全演練提供了全面且高效的解決方案。 三維場景搭建&…

AI模型開發全流程筆記

一、訓練數據準備階段 數據采集標準 格式要求&#xff1a;嚴格QA對形式&#xff08;1問1答&#xff09; 數量基準&#xff1a; 基礎量&#xff1a;500組QA對 優化量&#xff1a;800-1000組QA對 內容規范&#xff1a; 聚焦單一業務節點&#xff08;如售后場景&#xff09; …

1688 數據接口調用秘籍:高效獲取商品實時信息的開發指南

在電商行業競爭白熱化的當下&#xff0c;企業想要搶占市場先機&#xff0c;實時掌握商品信息至關重要。作為國內 B2B 電商巨頭&#xff0c;1688 平臺匯聚海量商品資源&#xff0c;通過高效調用其數據接口獲取商品實時信息&#xff0c;能為企業價格策略制定、庫存管理、競品分析…

milvus學習筆記

本文主要由AI生成&#xff0c;請注意自己查看源代碼校驗。 Milvus v2.4 系統架構概覽 Milvus 采用分布式微服務架構&#xff0c;將計算層&#xff08;Proxy、QueryCoord、QueryNode、IndexCoord、DataCoord、DataNode 等&#xff09;與存儲層&#xff08;Pulsar、MinIO/S3、e…