Git Commit:大師班
已發表: 2023-02-26 任何版本控制系統的一個基本要求是為您存儲不同版本的文件。 在 Git 中,執行此操作的命令是commit
。 這裡有你需要知道的一切。
什麼是 Git 中的提交?
配置提交命令
使用提交命令
基本提交
自動暫存文件
同時進行暫存和提交
致力於不同的分支
對提交進行更改
從提交中刪除更改
還原整個提交
Git 瑞士軍刀
什麼是 Git 中的提交?
提交是在項目的整個生命週期中製作的一系列快照,構成了項目的開發歷史。 提交使我們能夠提取項目的一個版本,因為它在過去的不同時間點。 為什麼這很重要?
版本控制系統 (VCS) 最常用於軟件源代碼和開發項目。 但它們可以成功地用於任何文本文件集合,例如包含書籍章節的 Markdown 文件。
您可能不希望項目目錄中的每個文件都由 VCS 處理,因此您需要能夠指定要進行版本控制的文件。 這會將它們添加到項目的版本控制視圖中。 他們將受到監視以了解變化。
實現此目的的另一種方法是使用忽略列表。 這告訴 Git 它應該始終忽略哪些文件、目錄或文件類型。
隨著時間的推移,隨著新文件被添加到項目中,一些文件將需要添加到版本控制系統中。 在 Git 中,這是由add
命令處理的。 實際上,正如我們將要看到的, add
命令起到了雙重作用。
為了維護對項目所做更改的歷史記錄,您將使用commit
命令定期要求 Git 存儲項目狀態的快照。 這是add
命令在我們的工作流程中重新出現的地方。 我們使用add
命令告訴 Git 我們希望將哪些更改的文件包含在快照中。 然後我們使用commit
告訴 Git 創建快照。
配置提交命令
有關提交的信息與它一起存儲,因此始終可以知道提交的人、時間以及提交包含的內容。 其中一些元數據是在提交時捕獲的,例如提交消息。
每個用戶可以配置與開發團隊成員身份相關的元數據,以防止重複提供相同的信息。
要為計算機上的所有存儲庫全局設置名稱,請使用此命令。
git config --global user.name "Dave McKay"
要驗證您的名稱是否已設置,請使用此命令。
git config --global 用戶名
如果您需要在特定存儲庫上使用不同的名稱,請切換到項目目錄並使用不帶--global
選項的相同命令。
git config user.name "McKay, David"
git 配置用戶名
我們現在為這個存儲庫獲得了一個不同的默認用戶名,我們的全局名稱仍然用於其他存儲庫。
以類似的方式,我們可以通過包含或省略--global
選項來全局或為單個存儲庫設置電子郵件地址。
git config user.email "[email protected]"
git config --global user.email "[email protected]"
git 配置用戶.email
git config --global user.email
這些設置保存在配置文件中。 全局 Git 設置保存在“~/.gitconfig”中,特定於存儲庫的設置保存在存儲庫的“.git/config”文件中。
commit
命令在運行時引用並使用這些值。
使用提交命令
commit
命令的基本用途是獲取暫存區(稱為索引)中的文件,並將它們作為提交存儲在存儲庫的當前分支中。
基本提交
我們有一個文件已更改的項目。 我們將使用add
命令暫存文件,然後提交它。 我們正在使用-m
(提交消息)選項,以便我們可以提供更改目的的簡短描述。 如果我們不使用此選項,則會在提交發生時提示我們輸入提交消息。 在命令行加一個更方便。
git 添加 jibber.c
git commit -m "更新幫助文本"
如果我們使用git log
命令,我們可以按時間順序查看提交的詳細信息,最近的提交位於列表的頂部。
混帳日誌
提交顯示在less
中。
提交已標記有我們之前提供的名稱和電子郵件地址,我們的提交消息也被記錄下來。
自動暫存文件
暫存許多文件可能需要一點時間。 另一種方法是將-A
(全部)選項與add
一起使用。
這會自動暫存所有修改過的文件以及所有當前未跟踪的文件。 未跟踪文件的暫存遵循“.gitignore”文件中的設置。 Git 不會暫存您告訴它不想包含的文件。 最後,索引中不再存在於工作目錄中的文件將從索引中刪除。
顯然, -A
選項會導致很多事情同時發生。 --dry-run
選項可讓您預覽更改而無需實際執行它們。
git add -A --dry-run
在我們的示例中,它將暫存兩個修改後的現有文件和兩個新文件。 在使用commit
命令之前,讓我們繼續使用-A
選項。
git 添加 -A
git commit -m "增強解析"
我們可以看到一共更改了四個文件。 其中兩個是新創建的文件,已列出。
同時進行暫存和提交
commit
命令有一個小寫的-a
(全部)選項。 這一步執行文件的暫存和提交。
commit -a
選項暫存並提交修改後的現有文件,如果文件已從您的工作目錄中刪除,則從索引中刪除這些文件。 它不會自動暫存未跟踪的文件。
與add
命令一樣,commit 命令有一個--dry-run
選項,允許您在執行之前預覽其操作。
git commit -a --dry-run
現在讓我們執行命令。
git commit -a --dry-run
這些文件已為我們暫存和提交。
致力於不同的分支
如果您對工作目錄中的文件進行了一些更改,然後意識到您沒有簽出正確的分支,則需要將更改提交到正確的分支而不影響當前分支。
Git 沒有用於提交到不同分支的命令。 但是您可以使用一點 Git 技巧來糾正這種情況。
我們將使用 Git stash
命令來製作更改的副本。 然後我們將檢查正確的分支並應用存儲中的更改。 要應用隱藏的更改,我們使用pop
命令而不是apply
命令。 pop
命令應用更改並從存儲中刪除它們。
我們對存儲庫的new-parser
分支進行了一些更改。 它們應該是在classic-parser
分支中製作的。
git 存儲
git checkout 經典解析器
git 存儲彈出
我們現在可以執行commit
,並更新這個分支。
git commit -a -m “添加預解析器功能”
如果我們返回到new-parser
分支,我們可以看到它是最新的,這意味著更改已從您的工作目錄中刪除,並且您的存儲庫和文件是同步的。
git checkout 新解析器
混帳狀態
相關:如何更新和維護單獨的 Git 分支
對提交進行更改
如果您需要改進您的提交消息——也許您發現了其中的拼寫錯誤——或者您忘記暫存一個應該包含在提交中的文件,您可以使用--amend
選項來糾正錯誤。 需要注意的是,這不應該用於已推送到遠程存儲庫的提交。
在我們最後的提交信息中,“fraze”應該是“phrase”。 如果我們使用git log
我們可以看到這個。
為了糾正這個問題,我們將像這樣使用--amend
選項。
git commit --amend -m "優化詞組識別"
如果我們再次使用git log
,我們可以看到舊提交已被新提交替換,並帶有更正的提交消息。
如果我們想添加一個忘記暫存的文件,我們可以提交該文件,使其顯示為上一次提交的一部分。
我們將使用add
暫存文件,然後使用--amend
選項進行提交。 --no-edit
選項意味著我們不需要提供新的提交信息。 保留先前的提交消息。
git 添加 jibber.c
git commit --amend --no-edit
從提交中刪除更改
如果您無意中暫存並提交了您不打算提交的文件,您可以使用reset
命令從提交中刪除該文件。 我們會將提交重置回暫存區或索引。 然後我們將刪除該文件,並重新提交其余文件。
要將最後一次提交重置到暫存區,我們使用reset --soft
命令。 HEAD~
是“項目提交時間線中 HEAD 後面的提交”的簡寫,英文是“最後一次提交”。
git reset --soft HEAD~
要刪除不應該包含的文件,我們使用reset --mixed
命令。 這會將這些更改重置回工作目錄,將修改後的文件重新創建為未暫存、未提交的文件。
git reset --mixed jibber.c
我們需要提交留在索引中的其他文件。
git commit -m “實驗性調整”
原始提交中的其他兩個文件為我們重新提交。
相關:如何修復、編輯或撤消 Git 提交(更改 Git 歷史)
還原整個提交
有時撤消整個提交是最簡單的事情。 它會將您的工作目錄和存儲庫恢復到您提交之前的狀態。
我們需要使用提交的散列參考 ID。 我們可以使用git log
找到它:
複製該引用並在revert
命令中使用它:
git 還原 e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8
這將打開您的默認編輯器,以便您可以編輯還原消息。 系統為您輸入了一條默認消息。 您可以使用它,也可以根據自己的喜好對其進行編輯。
當您對還原消息感到滿意時,保存文件並退出編輯器。 在 nano 中,您可以使用“Ctrl+O”和“Ctrl+X”執行此操作。
再次使用git log
,我們可以看到添加了一個新的提交,它撤消了還原提交的更改。
Git 瑞士軍刀
顯然, commit
是最重要的 Git 命令之一。 它可以做很多事情,所以有很多東西要學。 掌握其較少使用的功能是值得花時間的。 當您需要糾正錯誤時——現在——您會慶幸自己提前做好了準備。
相關:如何使用 Git 合併