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 commit將不起作用。Git 只查看暫存區域以找出要提交的內容。可以通過命令行暫存或添加文件,也可以使用大多數 Git 界面(如 GitHub Desktop)通過選擇要暫存的行或文件來實現。

您還可以使用方便的命令 ,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 上 為這篇文章投稿。

commit

git init

conventional

筆記

to

commitlint

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

git

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit

commit