0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

git如何記錄每次更新到倉庫

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:嵌入式Linux系統(tǒng)開 ? 2023-07-22 11:11 ? 次閱讀

記錄每次更新到倉庫

工作目錄下的每一個文件都不外乎這兩種狀態(tài):已跟蹤 或 未跟蹤。

已跟蹤包括:已提交(committed)、已修改(modified) 和 已暫存(staged)

圖片

檢查當前文件狀態(tài)

可以用 git status 命令查看哪些文件處于什么狀態(tài)。如果在克隆倉庫后立即使用此命令,會看到類似這樣的輸出:

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

這說明你現(xiàn)在的工作目錄相當干凈。換句話說,所有已跟蹤文件在上次提交后都未被更改過。

此外,上面的信息還表明,當前目錄下沒有出現(xiàn)任何處于未跟蹤狀態(tài)的新文件,否則 Git 會在這里列出來。

最后,該命令還顯示了當前所在分支,并告訴你這個分支同遠程服務(wù)器上對應(yīng)的分支沒有偏離。現(xiàn)在,分支名是“master”,這是默認的分支名。

跟蹤新文件

使用命令 git add 開始跟蹤一個文件。比如 README

$ git add README

忽略文件

我們有些文件無需納入 Git 的管理,也不希望它們總出現(xiàn)在未跟蹤文件列表。我們可以創(chuàng)建一個名為 .gitignore 的文件,列出要忽略的文件的模式。

實際的 .gitignore 例子:

$ cat .gitignore
*.[oa]
*~

第一行告訴 Git 忽略所有以 .o 或 .a 結(jié)尾的文件。一般這類對象文件和存檔文件都是編譯過程中出現(xiàn)的。第二行告訴 Git 忽略所有名字以波浪符(~)結(jié)尾的文件,許多文本編輯軟件(比如 Emacs)都用這樣的文件名保存副本。此外,你可能還需要忽略 log,tmp 或者 pid 目錄,以及自動生成的文檔等等。要養(yǎng)成一開始就為你的新倉庫設(shè)置好 .gitignore 文件的習(xí)慣,以免將來誤提交這類無用的文件。

文件 .gitignore 的格式規(guī)范如下:

  1. 所有空行或者以 # 開頭的行都會被 Git 忽略。
  2. 可以使用標準的 glob 模式匹配,它會遞歸地應(yīng)用在整個工作區(qū)中。
  3. 匹配模式可以以(/)開頭防止遞歸。
  4. 匹配模式可以以(/)結(jié)尾指定目錄。
  5. 要忽略指定模式以外的文件或目錄,可以在模式前加上嘆號(!)取反。

所謂的 glob 模式是指 shell 所使用的簡化了的正則表達式。星號(*)匹配零個或多個任意字符;[abc] 匹配任何一個列在方括號中的字符 (這個例子要么匹配一個 a,要么匹配一個 b,要么匹配一個 c);問號(?)只匹配一個任意字符;如果在方括號中使用短劃線分隔兩個字符, 表示所有在這兩個字符范圍內(nèi)的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的數(shù)字)。使用兩個星號( )表示匹配任意中間目錄,比如 a/ /z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。

再看一個 .gitignore 文件的例子:

# 忽略所有的 .a 文件
*.a
# 但跟蹤所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略當前目錄下的 TODO 文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目錄下名為 build 的文件夾
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目錄及其所有子目錄下的 .pdf 文件
doc/**/*.pdf

查看已暫存和未暫存的修改

如果 git status 命令的輸出對于你來說過于簡略,而你想知道具體修改了什么地方,可以用 git diff 命令。

此命令比較的是工作目錄中當前文件和暫存區(qū)域快照之間的差異。也就是修改之后還沒有暫存起來的變化內(nèi)容。

若要查看已暫存的將要添加到下次提交里的內(nèi)容,可以用 git diff --staged 命令。這條命令將比對已暫存文件與最后一次提交的文件差異。

提交更新

現(xiàn)在的暫存區(qū)已經(jīng)準備就緒,可以提交了。在此之前,請務(wù)必確認還有什么已修改或新建的文件還沒有 git add 過, 否則提交的時候不會記錄這些尚未暫存的變化。這些已修改但未暫存的文件只會保留在本地磁盤。所以,每次準備提交前,先用 git status 看下,你所需要的文件是不是都已暫存起來了, 然后再運行提交命令 git commit:

$ git commit

這樣會啟動你選擇的文本編輯器來輸入提交說明。

也可以在 commit 命令后添加 -m 選項,將提交信息與命令放在同一行,如下所示:

$ git commit -m "Story 182: Fix benchmarks for speed"

[master 463dc4f] Story 182: Fix benchmarks for speed
2 files changed, 2 insertions(+)
create mode 100644 README

可以看到,提交后它會告訴你,當前是在哪個分支(master)提交的,本次提交的完整 SHA-1 校驗和是什么(463dc4f),以及在本次提交中,有多少文件修訂過,多少行添加和刪改過。

跳過使用暫存區(qū)域

盡管使用暫存區(qū)域的方式可以精心準備要提交的細節(jié),但有時候這么做略顯繁瑣。Git 提供了一個跳過使用暫存區(qū)域的方式, 只要在提交的時候,給 git commit 加上 -a 選項,Git 就會自動把所有已經(jīng)跟蹤過的文件暫存起來一并提交,從而跳過 git add 步驟。

這很方便,但是要小心,有時這個選項會將不需要的文件添加到提交中。

移除文件

要從 Git 中移除某個文件,就必須要從已跟蹤文件清單中移除(從暫存區(qū)域移除),然后提交。可以用 git rm 命令完成此項工作,并連帶從工作目錄中刪除指定的文件,這樣以后就不會出現(xiàn)在未跟蹤文件清單中了。

如果要刪除之前修改過或已經(jīng)放到暫存區(qū)的文件,則必須使用強制刪除選項 -f(force 首字母)。

另外一種情況是,我們想把文件從 Git 倉庫中刪除(亦即從暫存區(qū)域移除),但仍然希望保留在當前工作目錄中。換句話說,你想讓文件保留在磁盤,但是并不想讓 Git 繼續(xù)跟蹤。當你忘記添加 .gitignore 文件,不小心把一個很大的日志文件或一堆 .a 這樣的編譯生成文件添加到暫存區(qū)時,這一做法尤其有用。為達到這一目的,使用 --cached 選項:

$ git rm --cached README

git rm 命令后面可以列出文件或者目錄的名字,也可以使用 glob 模式。比如:

$ git rm log/*.log

注意到星號 * 之前的反斜杠 , 因為 Git 有它自己的文件模式擴展匹配方式,所以我們不用 shell 來幫忙展開。此命令刪除 log/ 目錄下擴展名為 .log 的所有文件。類似的比如:

$ git rm *~

該命令會刪除所有名字以 ~ 結(jié)尾的文件。

移動文件

不像其它的 VCS 系統(tǒng),Git 并不顯式跟蹤文件移動操作。如果在 Git 中重命名了某個文件,倉庫中存儲的元數(shù)據(jù)并不會體現(xiàn)出這是一次改名操作。不過 Git 非常聰明,它會推斷出究竟發(fā)生了什么。

要在 Git 中對文件改名,可以這么做:

$ git mv file_from file_to

此時查看狀態(tài)信息,也會明白無誤地看到關(guān)于重命名操作的說明:

$ git mv README.md README

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD < file >..." to unstage)
renamed: README.md - > README

其實,運行 git mv 就相當于運行了下面三條命令:

$ mv README.md README
$ git rm README.md
$ git add README

如此分開操作,Git 也會意識到這是一次重命名,所以不管何種方式結(jié)果都一樣。兩者唯一的區(qū)別在于,git mv 是一條命令而非三條命令,直接使用 git mv 方便得多。不過在使用其他工具重命名文件時,記得在提交前 git rm 刪除舊文件名,再 git add 添加新文件名。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    551

    瀏覽量

    24559
  • Git
    Git
    +關(guān)注

    關(guān)注

    0

    文章

    195

    瀏覽量

    15688
收藏 人收藏

    評論

    相關(guān)推薦

    如何使用SSH簽名Git提交記錄

    Git 支持使用 GPG 來簽名提交記錄。但 GPG 用起來很復(fù)雜,一直賴得搞。
    發(fā)表于 06-16 16:21 ?421次閱讀

    Git常用的超級實用命令

    添加遠程倉庫 git remote add name > 更新遠程倉庫地址 git remote set -url --push 拉取遠程
    的頭像 發(fā)表于 10-09 17:19 ?1063次閱讀
    <b class='flag-5'>Git</b>常用的超級實用命令

    git命令的基本使用

    git config 第一次使用git或者剛安裝的git時,使用此命令設(shè)置身份Name 和 Eamail 地址。并且每次提交時會使用此信息。
    的頭像 發(fā)表于 12-11 13:53 ?805次閱讀

    Git 常用命令大全

    時運行一次就行更新子模塊:$ git submodule update ----每次更新或切換分支后都需要運行一下刪除子模塊:(分4步走哦) 1) $
    發(fā)表于 10-11 17:23

    git之推送提交

    這兩天試著使用了git的推送,把本地的文件上傳到倉庫,中間遇到點問題,就是本地的倉庫文件和遠端的倉庫相比,多出來一些文件,是我自己新產(chǎn)生的,于是push不是很順利,特此
    發(fā)表于 12-17 09:20

    git簡單使用(一)

    本帖最后由 iysheng 于 2017-2-19 23:09 編輯 編程,經(jīng)常會修改代碼,不管是將代碼托管到本地還是網(wǎng)上,使用git進行版本控制無疑是比較流行的方法。今天我就記錄下如何創(chuàng)建倉庫
    發(fā)表于 02-17 16:18

    如何通過ftp更新到4.81?

    成功地將它從4.41更新到4.75,但是現(xiàn)在它以相同的錯誤在“file=16”失敗。我用來升級的命令是“ftp cuwifly7-481.mif”,我如何通過ftp更新到4.81?
    發(fā)表于 10-30 08:47

    如何使用計算機上的本地倉庫以及GitHub上托管的遠程倉庫

    添加遠程倉庫要新增遠程,請在終端上存儲倉庫的目錄中使用 git remote add 命令。git remote add 命令使用兩個參數(shù):例如:故障排除:遠程原點已存在此錯誤消息表示
    發(fā)表于 06-22 16:57

    修改PCB后無法同步更新到原理圖嗎

    實際繪圖過程中會有多種情況發(fā)生,例如根據(jù)以前的項目做修改應(yīng)用于新的項目(主要在 PCB 中增加元器件以及添加網(wǎng)絡(luò)標號進行連線后更新到原理圖)下面就來介紹下通過修改 PCB 后更新到原理圖的方式方法。
    的頭像 發(fā)表于 08-19 10:25 ?1.7w次閱讀

    深度操作系統(tǒng) 2020.11.11 更新:內(nèi)核升級、 倉庫以及系統(tǒng)安全性更新

    、CVE-2020-6807、CVE-2020-6806、CVE-2020-15669。 IT之家了解到,深度系統(tǒng)倉庫更新到 debian 10.6。 此外,本次升級內(nèi)核,提升了系統(tǒng)穩(wěn)定性和兼容性。5.4.50(LTS)-》5.4.70(LTS),5.7.7(Stable
    的頭像 發(fā)表于 11-11 14:16 ?1985次閱讀

    Git是怎樣的一個系統(tǒng) Git的工作原理

    執(zhí)行完成了 git commit 命令,究竟做了什么呢? Git 倉庫中的提交記錄保存的是你的目錄下所有文件的快照,就像是把整個目錄復(fù)制,然后再粘貼一樣,但比復(fù)制粘貼優(yōu)雅許多!
    發(fā)表于 02-22 10:41 ?286次閱讀

    Git的基本概念,及基本框架、工作流程

    版本庫/倉庫(Repository /r??pɑ?z?t??ri/ 倉庫Git的管理倉庫,管理版本的數(shù)據(jù)庫,記錄文件/目錄狀態(tài)的地方,所有
    的頭像 發(fā)表于 06-08 16:09 ?2480次閱讀
    <b class='flag-5'>Git</b>的基本概念,及基本框架、工作流程

    獲取Git項目倉庫的兩種方式

    獲取 Git 倉庫 通常有兩種獲取 Git 項目倉庫的方式: 將尚未進行版本控制的本地目錄轉(zhuǎn)換為 Git
    的頭像 發(fā)表于 07-22 11:05 ?845次閱讀

    Git項目遠程倉庫的使用

    遠程倉庫的使用 為了能在任意 Git 項目上協(xié)作,你需要知道如何管理自己的遠程倉庫。遠程倉庫是指托管在因特網(wǎng)或其他網(wǎng)絡(luò)中的你的項目的版本庫。你可以有好幾個遠程
    的頭像 發(fā)表于 07-22 11:31 ?492次閱讀

    Git命令解決常見場景記錄

    本文主要歸納一下git的學(xué)習(xí)記錄,在開發(fā)期間發(fā)現(xiàn)了git在sourcetree的處理不是很好,對于多選文件的丟棄這點不是很方便,所以做一個記錄,由于項目中有新建的文件,所以被識別為未跟
    的頭像 發(fā)表于 12-20 09:44 ?325次閱讀
    用<b class='flag-5'>Git</b>命令解決常見場景<b class='flag-5'>記錄</b>