Home >> Blog >> commit git - 提交版本到資料庫
commit git - 提交版本到資料庫
git commit創建一個提交,這就像您的資料庫的快照。這些提交是整個資料庫在特定時間的快照。您應該經常根據更改的邏輯單元進行新的提交。隨著時間的推移,提交應該講述你的資料庫的歷史故事,以及它是如何變成現在這樣的。除了內容和消息之外,提交還包括許多元資料,例如作者、時間戳等。
Git 提交是如何工作的
提交是 Git 版本控制中“保存點”的構建塊。
git commit -m "update the README.md with link to contributing guide"
提交形狀歷史
通過使用提交,您可以有意識地、安全地製作歷史。您可以提交到不同的分支,並準確指定要包含的更改。提交是在您當前簽出到的分支上創建的(無論 HEAD 指向的位置),因此git status在提交之前運行始終是一個好主意,以檢查您是否已簽出到您打算成為的分支. 在提交之前,您需要使用git add [file].
提交是輕量級的 SHA 哈希,是 Git 中的對象。只要您使用的是文本文件,您就不必擔心您有多少文件、它們有多大,或者您進行了多少次提交。Git可以處理它!
分兩個階段提交
提交有兩個階段來幫助您正確地製作提交。提交應該是代表特定想法的邏輯的、原子的變更單元。但是,並非所有人都這樣工作。您可能會忘乎所以,最終解決了兩三個問題,然後才記得提交!沒關係——Git 可以處理。準備好提交提交後,您將使用git add
您還可以使用方便的命令 ,git add -p來瀏覽更改並將它們分開,即使它們在同一個文件中。
如何使用 Git 提交
Git Commit 的常見用法和選項
- git commit:這將啟動提交過程,但由於它不包含-m消息標誌,因此將打開您的默認文本編輯器以供您創建提交消息。如果您還沒有配置任何東西,那麼這很有可能是 VI 或 Vim。(要退出,請按 esc,然後按 ,然後按 Enter。:wink :w:)
- git commit -m "descriptive commit message":這將啟動提交過程,並允許您同時包含提交消息。
- git commit -am "descriptive commit message":除了包含提交消息之外,此選項還允許您跳過暫存階段。添加-a將自動暫存所有已被 Git 跟踪的文件(對您之前提交的文件的更改)。
- git commit --amend:用新的提交替換最近的提交。(稍後會詳細介紹!)
要查看所有可能的選項git commit,請查看Git 的文檔。
如何在 Git 中撤消提交
有時,您可能需要更改歷史記錄。您可能需要撤消提交。如果您發現自己處於這種情況,請記住一些非常重要的事情:
- 如果您要“撤消”遠程上存在的提交,則可能會給您的合作者帶來大問題
- 撤消您僅在本地擁有的工作的提交更安全
改變歷史時會出什麼問題?
改變合作者的歷史可能會在幾個方面產生問題。想像一下 - 您和另一個合作者擁有相同的資料庫,具有相同的歷史記錄。但是,他們做出的更改會刪除最近的提交。他們在此之前直接從提交中繼續新提交。同時,您繼續處理協作者試圖刪除的提交。當他們推動時,他們將不得不“強制推動”,這應該向他們表明他們正在改變歷史。當你嘗試推動時,你認為會發生什麼?
在戲劇性的情況下,Git 可能會認為歷史差異太大,項目不再相關。這是不常見的,但卻是一個大問題。
最常見的結果是您git push會將“已刪除”的提交返回到共享歷史記錄。(首先,git pull如果您在同一個分支上工作,然後合併,您會這樣做,但結果將是相同的。)這意味著刪除如此重要的內容現在又回到了資料庫中。密碼、令牌或大型二進製文件可能會在沒有提醒您的情況下返回。
git revert
git revert是使用 Git 更改歷史的最安全方法。不是刪除現有提交,而是git revert查看特定提交中引入的更改,然後在新提交中應用這些更改的逆向。它充當“撤消提交”命令,而不會犧牲資料庫歷史記錄的完整性。git revert在可能的情況下,始終是更改歷史記錄的推薦方法。
git reset
有時,提交包含敏感信息,需要實際刪除。git reset是一個非常強大的命令,可能會導致您失去工作。通過重置,您可以將HEAD指針和分支指針移動到另一個時間點 - 可能會使兩者之間的提交看起來從未發生過!使用前git reset:
- 確保與您的團隊討論任何共享提交
- 研究三種類型的重置,看看哪一種適合您(--soft、--mixed、--hard)
- 提交任何您不想故意丟失的工作 - 已提交的工作可以取回,但未提交的工作不能
git reflog
如果您要更改歷史記錄和撤消提交,您應該了解git reflog. 如果您遇到麻煩,reflog 可以幫助您擺脫麻煩。reflog 是HEAD指向的每個提交的日誌。因此,例如,如果您使用git reset並無意中丟失了提交,您可以使用git reflog.
使用 Git Commit Amend 更新提交
雖然git commit --amend確實會更改歷史記錄,但它只會更改當前分支上的最新提交。對於以下提交,這可能是一個非常有用的命令:
- 尚未推送到遙控器
- 提交消息中有拼寫錯誤
- 不要包含您想要包含的更改
Git 提交範例
一旦你暫存了你想要包含在你的提交中的文件,你就準備好了。無論您是在 GitHub Desktop 之類的工具中提交,還是通過命令行提交,提交消息都很重要。提交消息應該簡短並描述您的更改。如果您正在查看資料庫的歷史記錄,您將受到提交消息的指導,因此它們應該講述一個故事。命令行中的提交可以包含以下格式的消息:
- git commit -m "git commit message example"
提交消息應該是現在時態和指示性的,如以下範例: - git commit -m "create file structure for Git guides"
- git commit -m "translate Git cheat sheet into German"
- git commit -m "update broken URL to Git resources"
如果您想在提交消息中包含更多上下文,還可以包含擴展提交消息。
相關命令
- git add [file]:對文件進行快照以準備版本控制,並將其添加到暫存區域。
- git status:總是一個好主意,這個命令顯示你在哪個分支,工作目錄或暫存目錄中有哪些文件,以及任何其他重要信息。
- git push:將所有本地分支提交上傳到遠程。
- git log:瀏覽和檢查項目文件的演變。
在 GitHub 上 為這篇文章投稿。