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

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

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

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

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

記錄每次更新到倉庫

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

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

圖片

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

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

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

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

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

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

跟蹤新文件

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

$ git add README

忽略文件

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

實(shí)際的 .gitignore 例子:

$ cat .gitignore
*.[oa]
*~

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

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

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

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

再看一個(gè) .gitignore 文件的例子:

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

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

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

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

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

提交更新

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

$ git commit

這樣會(huì)啟動(dòng)你選擇的文本編輯器來輸入提交說明。

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

$ 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

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

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

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

這很方便,但是要小心,有時(shí)這個(gè)選項(xiàng)會(huì)將不需要的文件添加到提交中。

移除文件

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

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

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

$ git rm --cached README

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

$ git rm log/*.log

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

$ git rm *~

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

移動(dòng)文件

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

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

$ git mv file_from file_to

此時(shí)查看狀態(tài)信息,也會(huì)明白無誤地看到關(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

其實(shí),運(yùn)行 git mv 就相當(dāng)于運(yùn)行了下面三條命令:

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

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

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

    關(guān)注

    1

    文章

    558

    瀏覽量

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

    關(guān)注

    0

    文章

    195

    瀏覽量

    15713
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    Git常用的超級(jí)實(shí)用命令

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

    git命令的基本使用

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

    Git 常用命令大全

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

    git之推送提交

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

    git簡單使用(一)

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

    如何通過ftp更新到4.81?

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

    如何使用計(jì)算機(jī)上的本地倉庫以及GitHub上托管的遠(yuǎn)程倉庫

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

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

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

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

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

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

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

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

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

    獲取Git項(xiàng)目倉庫的兩種方式

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

    Git項(xiàng)目遠(yuǎn)程倉庫的使用

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

    Git命令解決常見場景記錄

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