」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 Git 工作樹提高我的工作效率

使用 Git 工作樹提高我的工作效率

發佈於2024-11-03
瀏覽:785

我經常同時處理多個功能,這導致我隱藏更改並在切換到其他任務時忘記它們。我嘗試使用 git hooks 和終端別名作為提醒,但它們要么太麻煩,要么很容易被忽略。所以,我必須找到更好的解決方案。

這篇文章最初發佈在我的部落格上一年多前,但我不斷回來查看它。重新分享給世界:)

簡而言之,Git

Git 將資訊儲存為快照清單。 快照是儲存庫在給定時間點的儲存版本。每次提交都代表 git 世界中的一個快照。

工作樹是專案一個版本的單次簽出。這些檔案從 Git 目錄中的壓縮資料庫中提取出來,並放置在磁碟上供您使用或修改。這是您在暫存和提交之前進行工作的地方。

Git 工作樹

Git Worktrees 是一種同時管理多個 git 工作樹的方法,無需 git stash 的麻煩。它們允許我們將分支作為儲存庫的子目錄進行工作,從而完全減輕在需要緊急、不相關的更改時隱藏更改的痛苦。

worktree 模組可讓您在儲存庫的相同根目錄中的單獨子目錄中簽出專案的多個版本。傳統方法如下圖所示:

Boosting My Productivity With Git Worktrees

在此範例中,我有兩個隱藏的變更(可能是數百行程式碼)和3 個分支,feature-1feature-2fix -1。當我完成 fix-1 分支的工作並推送它時,我的大腦會跳到下一個任務並完全忘記以前的功能,直到我再次想起它們。

相反,使用工作樹,它看起來像這樣:

Boosting My Productivity With Git Worktrees

對於工作樹,目錄結構將每個工作樹(分支)包含在單獨的目錄中。這使我能夠透過更改當前工作的目錄來無縫地從一個分支切換到另一個分支。我使用這種方法的通常工作流程包括以下內容:

  1. 在專案目錄中開啟終端
  2. 建立具有分支名稱的工作樹
  3. 代碼 。在worktree目錄中開啟VSCode

當我想從一個工作樹切換到另一個工作樹時,我所要做的就是使用相同的步驟創建一個不同的工作樹(如果我還沒有創建它),或者簡單地使用VSCode 打開一個不同的目錄並開始破解立即地。

創建工作樹

建立工作樹就像為現有分支執行 git worktree add Directory-name Branch-name 或執行 git worktree add Directory-name -b Branch-name 來建立新分支一樣簡單。

刪除工作樹

完成分支上的工作後,您可以安全地刪除工作樹以停止污染您的目錄結構。只需運行 git worktreeremovedirectory-name 即可。這不會刪除底層分支,因此您可以稍後安全地再次檢查它們。

陷阱

工作樹是儲存庫分支的簽出,因此不會複製未追蹤的檔案。像 .env 這樣的檔案不會被複製,因此請確保在建立工作樹後複製它們並安裝依賴項(如果存在)。

另請注意,在根儲存庫目錄中執行時,為工作樹建立的目錄將顯示在 git 狀態日誌中。不過,與忘記工作時間相比,這些問題對我來說不算什麼。


感謝您的閱讀!您可以在我的部落格上閱讀更多內容並在 GitHub 贊助商上支持我的工作!

版本聲明 本文轉載於:https://dev.to/kl13nt/using-git-worktrees-to-boost-my-productivity-18m4?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-05-05
  • 如何在無序集合中為元組實現通用哈希功能?
    如何在無序集合中為元組實現通用哈希功能?
    在未訂購的集合中的元素要糾正此問題,一種方法是手動為特定元組類型定義哈希函數,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    程式設計 發佈於2025-05-05
  • 圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    圖片在Chrome中為何仍有邊框? `border: none;`無效解決方案
    在chrome 中刪除一個頻繁的問題時,在與Chrome and IE9中的圖像一起工作時,遇到了一個頻繁的問題。和“邊境:無;”在CSS中。要解決此問題,請考慮以下方法: Chrome具有忽略“ border:none; none;”的已知錯誤,風格。要解決此問題,請使用以下CSS ID塊創建帶...
    程式設計 發佈於2025-05-05
  • 為什麼HTML無法打印頁碼及解決方案
    為什麼HTML無法打印頁碼及解決方案
    無法在html頁面上打印頁碼? @page規則在@Media內部和外部都無濟於事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: ...
    程式設計 發佈於2025-05-05
  • 為什麼我在Silverlight Linq查詢中獲得“無法找到查詢模式的實現”錯誤?
    為什麼我在Silverlight Linq查詢中獲得“無法找到查詢模式的實現”錯誤?
    查詢模式實現缺失:解決“無法找到”錯誤在Silverlight應用程序中,嘗試使用LINQ建立LINQ連接以錯誤而實現的數據庫”,無法找到查詢模式的實現。”當省略LINQ名稱空間或查詢類型缺少IEnumerable 實現時,通常會發生此錯誤。 解決問題來驗證該類型的質量是至關重要的。在此特定實例...
    程式設計 發佈於2025-05-05
  • 為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    mySQL錯誤#1089:錯誤的前綴鍵錯誤descript [#1089-不正確的前綴鍵在嘗試在表中創建一個prefix鍵時會出現。前綴鍵旨在索引字符串列的特定前綴長度長度,以便更快地搜索這些前綴。 理解prefix keys `這將在整個Movie_ID列上創建標準主鍵。主密鑰對於唯一識...
    程式設計 發佈於2025-05-05
  • C++成員函數指針正確傳遞方法
    C++成員函數指針正確傳遞方法
    如何將成員函數置於c 的函數時,接受成員函數指針的函數時,必須同時提供對象的指針,並提供指針和指針到函數。需要具有一定簽名的功能指針。要通過成員函數,您需要同時提供對象指針(此)和成員函數指針。這可以通過修改Menubutton :: SetButton()(如下所示:[&& && && &&華)...
    程式設計 發佈於2025-05-05
  • 在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在JTable中維護jtable單元格渲染後,在JTable中,在JTable中實現自定義單元格渲染和編輯功能可以增強用戶體驗。但是,至關重要的是要確保即使在編輯操作後也保留所需的格式。 在設置用於格式化“價格”列的“價格”列,用戶遇到的數字格式丟失的“價格”列的“價格”之後,問題在設置自定義單元...
    程式設計 發佈於2025-05-05
  • Python不會對超範圍子串切片報錯的原因
    Python不會對超範圍子串切片報錯的原因
    在python中用索引切片範圍:二重性和空序列索引單個元素不同,該元素會引起錯誤,切片在序列的邊界之外沒有。 這種行為源於索引和切片之間的基本差異。索引一個序列,例如“示例” [3],返回一個項目。但是,切片序列(例如“示例” [3:4])返回項目的子序列。 索引不存在的元素時,例如“示例” [9...
    程式設計 發佈於2025-05-05
  • 在Oracle SQL中如何提取下劃線前的子字符串?
    在Oracle SQL中如何提取下劃線前的子字符串?
    [ 在oracle sql 解決方案: Explanation:SUBSTR function extracts a substring starting from the specified position (0) and continuing for a specified length.IN...
    程式設計 發佈於2025-05-05
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。 Let's consider the following ...
    程式設計 發佈於2025-05-05
  • 如何在GO編譯器中自定義編譯優化?
    如何在GO編譯器中自定義編譯優化?
    在GO編譯器中自定義編譯優化 GO中的默認編譯過程遵循特定的優化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    程式設計 發佈於2025-05-05
  • `console.log`顯示修改後對象值異常的原因
    `console.log`顯示修改後對象值異常的原因
    foo = [{id:1},{id:2},{id:3},{id:4},{id:id:5},],]; console.log('foo1',foo,foo.length); foo.splice(2,1); console.log('foo2', foo, foo....
    程式設計 發佈於2025-05-05
  • 如何在其容器中為DIV創建平滑的左右CSS動畫?
    如何在其容器中為DIV創建平滑的左右CSS動畫?
    通用CSS動畫,用於左右運動 ,我們將探索創建一個通用的CSS動畫,以向左和右移動DIV,從而到達其容器的邊緣。該動畫可以應用於具有絕對定位的任何div,無論其未知長度如何。 問題:使用左直接導致瞬時消失 更加流暢的解決方案:混合轉換和左 [並實現平穩的,線性的運動,我們介紹了線性的轉換。...
    程式設計 發佈於2025-05-05

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3