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

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

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

7個(gè)實(shí)用的Git 小技巧

Linux愛(ài)好者 ? 來(lái)源:Linux中國(guó) ? 作者:Rajeev Bera ? 2021-07-29 10:22 ? 次閱讀

這些有用的小技巧將改變你在當(dāng)前最流行的版本控制系統(tǒng)下的工作方式。

Git 是當(dāng)前最流行最普遍的版本控制系統(tǒng)之一,它被應(yīng)用于私有系統(tǒng)和公開(kāi)網(wǎng)站上各種各樣的開(kāi)發(fā)工作。不論我變得對(duì) Git 有多熟悉,似乎總有些功能等待著被發(fā)掘。下面分享下和 Git 相關(guān)的改變我工作方式的一些小技巧。

1、Git 中的自動(dòng)糾錯(cuò)

我們每個(gè)人都不時(shí)在輸入時(shí)犯拼寫(xiě)錯(cuò)誤,但是如果你使能了 Git 的自動(dòng)糾錯(cuò)功能,你就能讓 Git 自動(dòng)糾正一些輸入錯(cuò)誤的子命令。

假如你想用命令 git status 來(lái)檢查狀態(tài),但是你恰巧錯(cuò)誤地輸入了 git stats。通常情況下,Git 會(huì)告訴你 ‘stats’ 不是個(gè)有效的命令:

$ git statsgit: ‘stats’ is not a git command. See ‘git --help’.The most similar command isstatus

為了避免類似情形,只需要在你的 Git 配置中使能自動(dòng)糾錯(cuò)功能。

$ git config --global help.autocorrect 1

如果你只想對(duì)當(dāng)前的倉(cāng)庫(kù)生效,就省略掉選項(xiàng) --global。

這個(gè)命令會(huì)使能自動(dòng)糾錯(cuò)功能。在相應(yīng)的 Git 官方文檔[1] 中可以看到這個(gè)命令的詳細(xì)說(shuō)明,但是試著敲一下上面的錯(cuò)誤命令會(huì)使你對(duì)這個(gè)設(shè)置干了什么有個(gè)直觀的了解:

$ git statsgit: ‘stats’ is not a git command. See ‘git --help’.On branch masterYour branch is up to date with ‘origin/master’.nothing to commit, working tree clean

在上面的例子中,Git 直接運(yùn)行了它建議命令的第一個(gè),也就是 git status,而不是給你展示它所建議的子命令。

2、對(duì)提交進(jìn)行計(jì)數(shù)

需要對(duì)提交進(jìn)行計(jì)數(shù)的原因有很多。例如,一些開(kāi)發(fā)人員利用提交計(jì)數(shù)來(lái)判斷什么時(shí)候遞增工程構(gòu)建序號(hào),也有一些開(kāi)發(fā)人員用提交計(jì)數(shù)來(lái)對(duì)項(xiàng)目進(jìn)展取得一個(gè)整體上的感觀。

對(duì)提交進(jìn)行計(jì)數(shù)相當(dāng)簡(jiǎn)單而且直接,下面就是相應(yīng)的 Git 命令:

$ git rev-list --count branch-name

在上述命令中,參數(shù) branch-name 必須是一個(gè)你當(dāng)前倉(cāng)庫(kù)里的有效分支名。

$ git rev-list –count master32$ git rev-list –count dev34

3、倉(cāng)庫(kù)優(yōu)化

你的代碼倉(cāng)庫(kù)不僅對(duì)你來(lái)說(shuō)很寶貴,對(duì)你所在的組織也一樣。通過(guò)少數(shù)幾個(gè)慣例你就能使自己的倉(cāng)庫(kù)整潔并且保持最新。使用 .gitignore 文件[2] 就是這些最好的慣例之一。通過(guò)使用這個(gè)文件你可以告訴 Git 不要保存一些不需要記錄的文件,如二進(jìn)制文件、臨時(shí)文件等等。

當(dāng)然,你還可以使用 Git 的垃圾回收來(lái)進(jìn)一步優(yōu)化你的倉(cāng)庫(kù)。

$ git gc --prune=now --aggressive

這個(gè)命令在你和你的團(tuán)隊(duì)經(jīng)常使用 pull 或者 push 操作的時(shí)候很有幫助。

它是一個(gè)內(nèi)部工具,能清理掉你的倉(cāng)庫(kù)里沒(méi)法訪問(wèn)或者說(shuō)“空懸”的 Git 對(duì)象。

4、給未追蹤的文件來(lái)個(gè)備份

大多數(shù)時(shí)候,刪除所有未追蹤的文件是安全的。但很多時(shí)候也有這么一種場(chǎng)景,你想刪掉這些未追蹤的文件同時(shí)也想做個(gè)備份防止以后需要用到。

Git 組合一些 Bash 命令和管道操作,可以讓你可以很容易地給那些未追蹤的文件創(chuàng)建 zip 壓縮包。

$ git ls-files --others --exclude-standard -z | xargs -0 tar rvf ~/backup-untracked.zip

上面的命令就生成了一個(gè)名字為 backup-untracked.zip 的壓縮包文件(當(dāng)然,在 .gitignore 里面忽略了的文件不會(huì)包含在內(nèi))。

5、了解你的 .git 文件夾

每個(gè)倉(cāng)庫(kù)都有一個(gè) .git 文件夾,它是一個(gè)特殊的隱藏文件夾。

$ ls -a. … .git

Git 主要通過(guò)兩個(gè)東西來(lái)工作:

當(dāng)前工作樹(shù)(你當(dāng)前檢出的文件狀態(tài))

你的 Git 倉(cāng)庫(kù)的文件夾(準(zhǔn)確地說(shuō),包含版本信息的 .git 文件夾的位置)

這個(gè)文件夾存儲(chǔ)了所有參考信息和一些其他的如配置、倉(cāng)庫(kù)數(shù)據(jù)、HEAD 狀態(tài)、日志等更多諸如此類的重要細(xì)節(jié)。

一旦你刪除了這個(gè)文件夾,盡管你的源碼沒(méi)被刪,但是類似你的工程歷史記錄等遠(yuǎn)程信息就沒(méi)有了。刪除這個(gè)文件夾意味著你的工程(至少本地的復(fù)制)不再在版本控制的范疇之內(nèi)了。這也就意味著你沒(méi)法追蹤你的修改;你沒(méi)法從遠(yuǎn)程倉(cāng)拉取或推送到遠(yuǎn)程倉(cāng)了。

通常而言,你需要或者應(yīng)當(dāng)對(duì)你的 .git 文件夾的操作并不多。它是被 Git 管理的,而且大多數(shù)時(shí)候是一個(gè)禁區(qū)。然而,在這個(gè)文件夾內(nèi)還是有一些有趣的工件,比如說(shuō)當(dāng)前的 HEAD 狀態(tài)在內(nèi)的就在其中。

$ cat .git/HEADref: refs/heads/master

它也隱含著對(duì)你倉(cāng)庫(kù)地描述:

$ cat .git/description

這是一個(gè)未命名的倉(cāng)庫(kù);通過(guò)編輯文件 ‘description’ 可以給這個(gè)倉(cāng)庫(kù)命名。

Git 鉤子文件夾連同一些鉤子文件例子也在這里。參考這些例子你就能知道 Git 鉤子能干什么了。當(dāng)然,你也可以 參考這個(gè) Seth Kenlon 寫(xiě)的 Git 鉤子介紹[3]。

6、瀏覽另一個(gè)分支的文件

有時(shí),你會(huì)想要瀏覽另一個(gè)分支下某個(gè)文件的內(nèi)容。這其實(shí)用一個(gè)簡(jiǎn)單的 Git 命令就可以實(shí)現(xiàn),甚至都不用切換分支。

設(shè)想你有一個(gè)命名為 README.md[4] 的文件,并且它在 main 分支上。當(dāng)前你正工作在一個(gè)名為 dev 的分支。

用下面的 Git 命令,在終端上就行。

$ git show main:README.md

一旦你執(zhí)行這個(gè)命令,你就能在你的終端上看到 main 分支上該文件的內(nèi)容。

7、Git 中的搜索

用一個(gè)簡(jiǎn)單的命令你就能在 Git 中像專業(yè)人士一樣搜索了。更有甚者,盡管你不確定你的修改在哪次提交或者哪個(gè)分支上,你依然能搜索。

$ git rev-list --all | xargs git grep -F ‘’

例如,假設(shè)你想在你的倉(cāng)庫(kù)中搜索字符串 “font-size: 52 px;“ :

$ git rev-list –all | xargs git grep -F ‘font-size: 52 px;’F3022…9e12:HtmlTemplate/style.css: font-size: 52 px;E9211…8244:RR.Web/Content/style/style.css: font-size: 52 px;

試試這些小技巧

我希望這些小技巧對(duì)你是有用的,或者增加你的生產(chǎn)力或者節(jié)省你的大量時(shí)間。

你也有一些喜歡的 Git 技巧嗎?在評(píng)論區(qū)分享吧。

編輯:jq

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

    關(guān)注

    0

    文章

    196

    瀏覽量

    15720

原文標(biāo)題:7 個(gè)改變我生活的 Git 小技巧

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    打開(kāi)esp-idf的任意一個(gè)component時(shí),vscode會(huì)自動(dòng)導(dǎo)入該component的git倉(cāng)庫(kù),怎么解決?

    當(dāng)我打開(kāi)esp-idf 的任意一個(gè)component時(shí),vscode會(huì)自動(dòng)導(dǎo)入該component的git倉(cāng)庫(kù),導(dǎo)致vscode的源碼管理非常擁擠,請(qǐng)問(wèn)這有什么辦法解決嗎?還是我vscode設(shè)置不對(duì)導(dǎo)致? 希望大家能指導(dǎo)指導(dǎo),感謝!
    發(fā)表于 06-21 07:39

    ubuntu下的vscode插件安裝idf時(shí),總是找不到git,為什么?

    總是提示:Git is not found in current environment 但是我已經(jīng)在setting.json下設(shè)置了\"git.path\": \"/bin/git\" 同行,命令行里查看
    發(fā)表于 06-21 07:16

    通過(guò)git命令獲取ESP8266_RTOS_SDK失敗如何解決?

    本人使用的硬件平臺(tái)為esp8266,開(kāi)發(fā)環(huán)境為ubuntu22.04。在通過(guò)git命令獲取ESP8266_RTOS_SDK失敗,通過(guò)上網(wǎng)搜索嘗試了很多方法無(wú)效。具體情況如下
    發(fā)表于 06-07 07:26

    請(qǐng)問(wèn)下使用IDF怎么做用git做版本控制?

    請(qǐng)問(wèn)下使用IDF怎么做用git做版本控制?是保存自己應(yīng)用部分的代碼還是整個(gè)SDK都要保存,但是整個(gè)框架都是官方下的,有沒(méi)必要保存,求各位大神告知下你們?cè)趺刺幚淼摹?/div>
    發(fā)表于 06-06 07:15

    Git發(fā)布新版本 修補(bǔ)五處安全漏洞 包含嚴(yán)重遠(yuǎn)程代碼執(zhí)行風(fēng)險(xiǎn)

    CVE-2024-32002漏洞的嚴(yán)重性在于,黑客可通過(guò)創(chuàng)建特定的Git倉(cāng)庫(kù)子模塊,誘騙Git將文件寫(xiě)入.git/目錄,而非子模塊的工作樹(shù)。如此一來(lái),攻擊者便能在克隆過(guò)程中植入惡意腳本,用戶幾乎無(wú)法察覺(jué)。
    的頭像 發(fā)表于 05-31 10:09 ?545次閱讀

    飛凌ElfBoard ELF 1板卡-ubuntu18.04 git安裝及基本使用

    git commit -m xxx(xxx代表備注信息) 6.查看提交記錄git log 7.查看分支git branch 添加新的分支git
    發(fā)表于 03-21 16:23

    藍(lán)牙 | 軟件:Git管理高通的ChipCode項(xiàng)目

    最近發(fā)現(xiàn)大家在高通chipcode網(wǎng)站上下載不了代碼,小編一直使用git的方式獲取新版本代碼,沒(méi)有遇到什么阻礙。于是小編到新主機(jī)上嘗試下載代碼的壓縮包和git代碼,都遇到了問(wèn)題。由于壓縮包是高通自己
    的頭像 發(fā)表于 01-26 08:29 ?347次閱讀
    藍(lán)牙 | 軟件:<b class='flag-5'>Git</b>管理高通的ChipCode項(xiàng)目

    克服PLC編程的難題—基于Git的軟件

    Git是一種分布式版本控制系統(tǒng),它可以記錄文件的修改歷史和版本變化,并可以支持多人協(xié)同開(kāi)發(fā)。
    的頭像 發(fā)表于 01-22 09:30 ?916次閱讀
    克服PLC編程的難題—基于<b class='flag-5'>Git</b>的軟件

    Git開(kāi)發(fā)者關(guān)注內(nèi)存安全問(wèn)題,探討引入Rust語(yǔ)言

    根據(jù)最新披露的郵件討論,Git開(kāi)發(fā)團(tuán)隊(duì)熱議在Git項(xiàng)目中引入Rust的可行性。作為一種開(kāi)源的分布式代碼版本管理工具,廣泛運(yùn)用于各種開(kāi)發(fā)項(xiàng)目。盡管現(xiàn)在Git項(xiàng)目主要以C與Python為主要開(kāi)發(fā)語(yǔ)言,但探討顯示,引入Rust能顯著降
    的頭像 發(fā)表于 01-15 14:23 ?555次閱讀
    <b class='flag-5'>Git</b>開(kāi)發(fā)者關(guān)注內(nèi)存安全問(wèn)題,探討引入Rust語(yǔ)言

    GIT(分布式版本控制系統(tǒng))的工作原理

    都是完整的,功能更強(qiáng)大,自然而然操作更復(fù)雜一些。git在本地也是以git版本庫(kù)的形式管理,可以在本地做一些修改,然后commit到本地的版本庫(kù),最后push到服務(wù)器。
    的頭像 發(fā)表于 12-21 16:09 ?785次閱讀
    <b class='flag-5'>GIT</b>(分布式版本控制系統(tǒng))的工作原理

    Git命令解決常見(jiàn)場(chǎng)景記錄

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

    git切換遠(yuǎn)程地址分支方式

    git remote set-url origin URL】 更換遠(yuǎn)程倉(cāng)庫(kù)地址,URL為新地址。
    的頭像 發(fā)表于 12-18 09:35 ?2235次閱讀

    Git命令之本地分支與遠(yuǎn)程分支關(guān)聯(lián)和解除

    的遠(yuǎn)程分支被刪除了,那么就會(huì)出現(xiàn)你無(wú)法使用git pull,和git push命令。使用一個(gè)例子說(shuō)明這個(gè)場(chǎng)景。 我們可以使用下面的命令查看自己本地分支與與遠(yuǎn)程分支的關(guān)聯(lián)情況。
    的頭像 發(fā)表于 12-15 09:27 ?2934次閱讀
    <b class='flag-5'>Git</b>命令之本地分支與遠(yuǎn)程分支關(guān)聯(lián)和解除

    git命令的基本使用

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

    Mozilla Firefox開(kāi)發(fā)將完全轉(zhuǎn)向Git,放棄Mercurial

    目前相關(guān)事項(xiàng)仍在規(guī)劃中,預(yù)計(jì)至少六個(gè)月后才會(huì)開(kāi)始全面的 Git 過(guò)渡。過(guò)渡完成后,Mercurial 將從 Firefox 開(kāi)發(fā)工作流程中完全淘汰。
    的頭像 發(fā)表于 11-23 16:08 ?610次閱讀
    Mozilla Firefox開(kāi)發(fā)將完全轉(zhuǎn)向<b class='flag-5'>Git</b>,放棄Mercurial