」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 你真的了解Git嗎?

你真的了解Git嗎?

發佈於2024-11-07
瀏覽:889

Do you really know Git?

本部落格中的圖片來自 Scott Chacon、Ben Straub 的「Pro Git」

在本部落格中,您將了解有關您在程式設計中使用的 Git 中的一些日常功能的各種精彩事實!

開發人員很容易盲目使用工具而不知道它們在幕後是如何工作的。雖然這種抽像是為了更好,但了解事物如何運作有時可能是經驗豐富的程式設計師和業餘程式設計師之間的區別。

讓我們深入了解一些很酷的事實!


1 - 短期狀態

如果你使用 Git 有一段時間了,你應該了解 git status。但是,您是否知道有一個選項可以獲得更易讀且最小的狀態輸出?

透過使用短狀態標誌,-s,您可以獲得更緊湊的格式。

$ git status -s
 M README
MM Rakefile
A  lib/git.rb
M  lib/simplegit.rb
?? LICENSE.txt

您會注意到輸出的左側部分有 2 列。左欄代表暫存區的狀態,右邊欄位代表工作樹的狀態。操作順序也按時間順序從左到右表示。

讓我們解釋一下上面的輸出:

  • 「M」 - 已修改但未上演
  • “MM” - 上演然後再修改。因此,下一次提交需要一個額外的階段。
  • 「A」 - 建立並暫存新檔案
  • 「M」 - 上演
  • 「??」 - 建立了一個新文件,但未暫存(未追蹤)

2 - 跳過暫存區

如果您想暫存追蹤的文件並在一個命令中提交所有文件怎麼辦?

您可以透過使用 git commit -a -m "message".

來做到這一點

請注意,不幸的是,未追蹤的檔案(新建立的檔案)將不會使用這個神奇的命令進行暫存。


3 - 查看您的提交歷史記錄

使用git log按時間倒序列出存儲庫中所做的提交(最近的提交首先顯示)。

有多種選項可讓您自訂輸出。讓我們回顧一些有用的:

  • -{number} 限制顯示的日誌條目數(例如,git log -2 顯示最後兩個條目)
  • --stat 顯示縮寫統計信息,例如每次提交的文件數量或插入/刪除數量
  • --pretty=oneline 在一行上列印每個提交
  • --graph 新增一個 ASCII 圖表,顯示您的分支和合併歷史記錄

4 - 使用 Git Restore 撤銷操作

當你想要取消暫存檔案時,請使用git reset HEAD 。當你想要取消修改已修改的檔案時,請使用git checkout -- {file}

現在有一個更簡單的方法可以做到這兩點! Git 版本 2.23.0 引進了 git Restore,它帶來了取消暫存和取消修改檔案的二合一功能。

  • git Restore {file} - 取消修改已修改的檔案
  • git Restore --staged {file} - 取消暫存暫存檔案

5 - Git Fetch 與 Git Pull

身為程式設計師,您很可能至少使用過一次 git pull。此外,您很可能聽說過 git fetch 但從未真正需要使用它。好吧,讓我們來談談它實際上做了什麼以及它與 git pull 有何不同。

您可以將 fetch 視為 pull 中發生的事情的第一步。

在拉取中,我們從遠端儲存庫下載所有資料並將其傳輸到本機儲存庫。這就是 fetch 的作用。

此時,您的本機儲存庫已擁有數據,但尚未將其與工作目錄合併,以便您可以處理最新的變更。拉取的下一步是與您的分支合併,以便最新的變更位於您的工作目錄中。

因此,pull 一次獲取並合併所有內容,而 fetch 只執行第一步。


6 - Git 別名

如果我告訴你有一個方法可以讓你的 git 指令可自訂怎麼辦?透過git config,就可以!

您可以為常用指令設定別名,如下所示:

$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

現在,您只需輸入 git ci.,而不是輸入 git commit

這對於幫助使特定任務更加直觀的命令特別有用。

$ git config --global alias.unstage 'reset HEAD --'
# the double dash serves as an option separator. 
# It tells Git to treat anything after it as a filename

上面的指令使下列指令等效:

  • git unstage fileA
  • git 重置 HEAD -- fileA

新增 last 指令來查看最近的提交也是很常見的:

$ git config --global alias.last 'log -1 HEAD'

這就是本部落格的全部內容!我希望您在下一個使用 Git 的專案中學到了一些巧妙的技巧,這將提高您的工作流程的品質。感謝您的閱讀!

版本聲明 本文轉載於:https://dev.to/jihoonj/do-you-really-know-git-456d?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • Java數組中元素位置查找技巧
    Java數組中元素位置查找技巧
    在Java數組中檢索元素的位置 利用Java的反射API將數組轉換為列表中,允許您使用indexof方法。 (primitives)(鏈接到Mishax的解決方案) 用於排序陣列的數組此方法此方法返回元素的索引,如果發現了元素的索引,或一個負值,指示應放置元素的插入點。
    程式設計 發佈於2025-07-20
  • C++20 Consteval函數中模板參數能否依賴於函數參數?
    C++20 Consteval函數中模板參數能否依賴於函數參數?
    [ consteval函數和模板參數依賴於函數參數在C 17中,模板參數不能依賴一個函數參數,因為編譯器仍然需要對非contexexpr futcoriations contim at contexpr function進行評估。 compile time。 C 20引入恆定函數,必須在編譯時進...
    程式設計 發佈於2025-07-20
  • 如何使用替換指令在GO MOD中解析模塊路徑差異?
    如何使用替換指令在GO MOD中解析模塊路徑差異?
    在使用GO MOD時,在GO MOD 中克服模塊路徑差異時,可能會遇到衝突,其中3個Party Package將另一個PAXPANCE帶有導入式套件之間的另一個軟件包,並在導入式套件之間導入另一個軟件包。如迴聲消息所證明的那樣: go.etcd.io/bbolt [&&&&&&&&&&&&&&&&...
    程式設計 發佈於2025-07-20
  • CSS可以根據任何屬性值來定位HTML元素嗎?
    CSS可以根據任何屬性值來定位HTML元素嗎?
    靶向html元素,在CSS 中使用任何屬性值,在CSS中,可以基於特定屬性(如下所示)基於特定屬性的基於特定屬性的emants目標元素: 字體家庭:康斯拉斯(Consolas); } 但是,出現一個常見的問題:元素可以根據任何屬性值而定位嗎?本文探討了此主題。 的目標元素有任何任何屬性值,...
    程式設計 發佈於2025-07-20
  • Go語言垃圾回收如何處理切片內存?
    Go語言垃圾回收如何處理切片內存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片時,了解垃圾收集行為至關重要,以避免潛在的內存洩...
    程式設計 發佈於2025-07-20
  • 如何在Chrome中居中選擇框文本?
    如何在Chrome中居中選擇框文本?
    選擇框的文本對齊:局部chrome-inly-ly-ly-lyly solument 您可能希望將文本中心集中在選擇框中,以獲取優化的原因或提高可訪問性。但是,在CSS中的選擇元素中手動添加一個文本 - 對屬性可能無法正常工作。 初始嘗試 state)</option> < o...
    程式設計 發佈於2025-07-20
  • 如何正確使用與PDO參數的查詢一樣?
    如何正確使用與PDO參數的查詢一樣?
    在pdo 中使用類似QUERIES在PDO中的Queries時,您可能會遇到類似疑問中描述的問題:此查詢也可能不會返回結果,即使$ var1和$ var2包含有效的搜索詞。錯誤在於不正確包含%符號。 通過將變量包含在$ params數組中的%符號中,您確保將%字符正確替換到查詢中。沒有此修改,PD...
    程式設計 發佈於2025-07-20
  • 用戶本地時間格式及時區偏移顯示指南
    用戶本地時間格式及時區偏移顯示指南
    在用戶的語言環境格式中顯示日期/時間,並使用時間偏移在向最終用戶展示日期和時間時,以其localzone and格式顯示它們至關重要。這確保了不同地理位置的清晰度和無縫用戶體驗。以下是使用JavaScript實現此目的的方法。 方法:推薦方法是處理客戶端的Javascript中的日期/時間格式化和...
    程式設計 發佈於2025-07-20
  • 我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    將我的加密庫從mcrypt升級到openssl 問題:是否可以將我的加密庫從McRypt升級到OpenSSL?如果是這樣,如何? 答案:是的,可以將您的Encryption庫從McRypt升級到OpenSSL。 可以使用openssl。 附加說明: [openssl_decrypt()函數要求...
    程式設計 發佈於2025-07-20
  • 如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    如何修復\“常規錯誤:2006 MySQL Server在插入數據時已經消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    程式設計 發佈於2025-07-20
  • 如何使用node-mysql在單個查詢中執行多個SQL語句?
    如何使用node-mysql在單個查詢中執行多個SQL語句?
    Multi-Statement Query Support in Node-MySQLIn Node.js, the question arises when executing multiple SQL statements in a single query using the node-mys...
    程式設計 發佈於2025-07-20
  • 在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在C中的顯式刪除 在C中的動態內存分配時,開發人員通常會想知道是否需要手動調用“ delete”操作員在heap-exprogal exit exit上。本文深入研究了這個主題。 在C主函數中,使用了動態分配變量(HEAP內存)的指針。當應用程序退出時,此內存是否會自動發布?通常,是。但是,即使在...
    程式設計 發佈於2025-07-20
  • 反射動態實現Go接口用於RPC方法探索
    反射動態實現Go接口用於RPC方法探索
    在GO 使用反射來實現定義RPC式方法的界面。例如,考慮一個接口,例如:鍵入myService接口{ 登錄(用戶名,密碼字符串)(sessionId int,錯誤錯誤) helloworld(sessionid int)(hi String,錯誤錯誤) } 替代方案而不是依靠反射...
    程式設計 發佈於2025-07-20
  • 為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    在CSS 問題:不正確的代碼: 全球範圍將所有餘量重置為零,如提供的代碼所建議的,可能會導致意外的副作用。解決特定的保證金問題是更建議的。 例如,在提供的示例中,將以下代碼添加到CSS中,將解決餘量問題: body H1 { 保證金頂:-40px; } 此方法更精確,避免了由全局保證金重置...
    程式設計 發佈於2025-07-20
  • Go語言如何動態發現導出包類型?
    Go語言如何動態發現導出包類型?
    與反射軟件包中的有限類型的發現能力相反,本文探討了在運行時發現所有包裝類型(尤其是struntime go import( “ FMT” “去/進口商” ) func main(){ pkg,err:= incorter.default()。導入(“ time”) ...
    程式設計 發佈於2025-07-20

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

Copyright© 2022 湘ICP备2022001581号-3