Git實用指南:忽略文件、命令別名、版本控制、撤銷修改與標簽管理

目錄

1.忽略特殊文件

1.1.那如何配置我們需要忽略的文件的呢?

1.2.如何檢驗效果?

2.給命令配置別名

3.基本操作之版本回退

3.1.使用場景:

3.2.使用方法:

4.撤銷修改

情況一:對于工作區的代碼,還沒有 add?

情況二:已經 add ,但沒有 commit?

情況三:已經add,并且也commit了

表格總結:

5.基本操作之刪除文件

6.標簽管理

6.1.理解標簽

6.2.創建標簽

6.3.操作標簽

7.圖形化的方式展示分支和合并的歷史

1.忽略特殊文件

在日常開發中,我們有些文件不想或者不應該提交到遠端,比如保存了數據庫密碼的配置文件,那怎么讓Git知道呢?在Git工作區的根目錄下創建?個特殊的 .gitignore 文件,然后把要忽略的文件名填進去,Git就會自動忽略這些文件了。
不需要從頭寫 .gitignore 文件,gitee在創建倉庫時就可以為我們生成,不過需要我們主動勾選?下:

1.1.那如何配置我們需要忽略的文件的呢?

我們只需要vim打開.gitignore文件,將需要忽略的文件后綴書寫進去即可。

格式為:

*后綴名

例如我們想忽略以?.so 和?.ini 結尾所有文件, .gitignore 的內容如下:?

# My configurations:
*.ini
*.so

當我們想要把一些確定的文件不按照.gitignore規則,

把指定文件排除在 .gitignore 規則外的寫法就是 ! +文件名,所以,只需把例外文件添加進去即可。

# 排除所有.開頭的隱藏?件:
.*
# 不排除.gitignore
!.gitignore

1.2.如何檢驗效果?

檢驗 .gitignore 的標準就是 git status 命令是不是說 working tree clean 。我們發現Git并沒有提示在工作區中有文件新增,那么?.gitignore 忽略特定文件就生效了!

git check-ignore命令

你發現,可能是 .gitignore 寫得有問題,需要找出來到底哪個規則寫錯了,比如說a.so文件是要被添加的,可以用?git check-ignore 命令檢查:

git check-ignore -v a.so
.gitignore:3:*.so a.so

Git會告訴我們, .gitignore 的第3行規則忽略了該文件,于是我們就可以知道應該修訂哪個規則。

2.給命令配置別名

在我們使用Git期間,有些命令敲的時候著實讓人頭疼(太長了。。),幸運的是,git支持對命令進行簡化!

舉個例子,將 git status 簡化為 git st ,對應的命令為:

git config --global alias.st status

--global 參數是全局參數,也就是這些命令在這臺電腦的所有Git倉庫下都有用。如果不加,那只針對當前的倉庫起作用。

3.基本操作之版本回退

3.1.使用場景:

之前我們也提到,過Git 能夠管理文件的歷史版本,這也是版本控制器重要的能?。如果有?天你發現之前的?作做的出現了很?的問題,需要在某個特定的歷史版本重新開始,這個時候,就需要版本 回退的功能了。

3.2.使用方法:

執? git reset 命令?于回退版本,可以指定退回某?次提交的版本。要解釋?下“回退”本質是要將版本庫中的內容進?回退,?作區或暫存區是否回退由命令參數決定:

git reset 命令語法格式為: git reset [--soft | --mixed | --hard] [HEAD]?

  • --mixed 為默認選項,使?時可以不?帶該參數。該參數將暫存區的內容退回為指定提交版本內 容,?作區?件保持不變。
  • ?--soft 參數對于?作區和暫存區的內容都不變,只是將版本庫回退到某個指定版本。
  • ?--hard 參數將暫存區與?作區都退回到指定版本。切記?作區有未提交的代碼時不要?這個命 令,因為?作區會回滾,你沒有提交的代碼就再也找不回了,所以使?該參數前?定要慎重。
  • HEAD 說明: 可直接寫成commit id,表示指定退回的版本

  • HEAD 表示當前版本
  • HEAD^ 上一個版本
  • HEAD^^ 上上一個版本。以此類推...

可以使用 ~數字表示

  • HEAD~0 表示當前版本:
  • HEAD~1 上一個版本
  • HEAD^2 上上一個版本以此類推...

查看歷史提交指令?

git log --pretty=oneline

可以看到之前版本的commit id用來版本回退。

例如我們可以用下面的指令來回歸到version2版本

git log --pretty=oneline
d95c13ffc878a55a25a3d04e22abfc7d2e3e1383 (HEAD -> master) add version3
14c12c32464d6ead7159f5c24e786ce450c899dd add version2
cff9d1e019333318156f8c7d356a78c9e49a6e7b add version1
...git reset --hard 
14c12c32464d6ead7159f5c24e786ce450c899dd

到這里一般回退功能就演示完了,但現在如果我后悔了,想再回到 version3怎么辦?我們可以繼續使用 git reset 命令,回退到 version 3 版本,但我們必須要拿到 version 3 的 commit id 去指定回退的版本!
但我們看到了 git log并不能打印出 version 3的 commit id ,運氣好的話我們可以從終端上去找找之前的記錄,運氣不好的話 commit id 已經被我們搞丟了。
Git 還提供了一個 git reflog 命令能補救一下,該命令用來記錄本地的每一次命令。

git reflog
14c12c3 (HEAD -> master) HEAD@{0}: reset: moving to 
14c12c32464d6ead7159f5c24e786ce450c899dd
d95c13f HEAD@{1}: commit: add version3
14c12c3 (HEAD -> master) HEAD@{2}: commit: add version2
cff9d1e HEAD@{3}: commit: add version1
594da695 HEAD@{4}: commit: add modify ReadMe file
23807c5 HEAD@{5}: commit: add 3 files
c614289 HEAD@{6}: commit (initial): commit my first file

這樣,你就可以很方便的找到你的所有操作記錄了,但 d95c13f這個是啥東西?這個是 version3 的 commit id 的部分。沒錯,Git 版本回退的時候,也可以使用部分 commit id 來代表目標版本。

可往往是理想很豐滿,現實很骨感。在實際開發中,由于長時間的開發了,導致 commit id 早就找
不到了,可突然某一天,我又想回退到 version3,那該如何操作呢?貌似現在不可能了。。。

4.撤銷修改

如果我們在我們的工作區寫了很長時間代碼,越寫越寫不下去,覺得自己寫的實在是垃圾,想恢復到 上?個版本。

情況一:對于工作區的代碼,還沒有 add?

我們可以使用 git checkout -- [file]命令讓工作區的文件回到最近一次 add 或 commit 時的狀態。

要注意 git checkout -- [file]命令中--的很重要,切記不要省略,一旦省略,該命令就變為其他意思了!

情況二:已經 add ,但沒有 commit?

讓我們來回憶一下學過的 git reset 回退命令,該命令如果使用 --mixed 參數,可以將暫存區
的內容退回為指定的版本內容,但工作區文件保持不變。那我們就可以回退下暫存區的內容了!!!

注意--mixed參數是默認參數,是可以省略的。

# --mixed 是默認參數,使?時可以省略git reset HEAD ReadMe

情況三:已經add,并且也commit了

不要擔心,我們可以 git reset --hard HEAD^ 回退到上一個版本!

不過,這是有前提的,就是你還沒有把自己的本地版本庫推送到遠程。還記得Git是分布式版本控制系統嗎?我們后面會講到遠程版本庫,一旦你推送到遠程版本庫,你就真的慘了……

表格總結:

5.基本操作之刪除文件

在Git中,刪除也是?個修改操作,我們實戰?下,如果要刪除 file5文件,怎么搞呢?如果你這樣做了:

ls
file1 file2 file3 file4 file5 ReadMe
rm file5

但這樣直接刪除是沒有?的,反而徒增煩惱, git status 命令會?刻告訴你哪些文件被刪除了

此時,工作區和版本庫就不一致了,要刪文件,目前除了要刪工作區的文件,還要清除版本庫的文
件。
一般走到這里,有兩種可能:

  1. 確實要從版本庫中刪除該文件
  2. 不小心刪錯了

對第二種情況,很明顯誤刪,需要使用 git 來進行恢復,很簡單,我們剛學過(刪除也是修改):

git checkout -- file5
直接使用這個指令即可。

對于第?種情況,很明顯是沒有刪完,我們只刪除了?作區的?件。這時就需要使?git rm 將文件從暫存區和?作區中刪除,并且commit :

git rm file5

git commit -m"deleted file5"

git rm file5
rm 'file5'
git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)deleted: file5
git commit -m"deleted file5"
[master 5476bde] deleted file51 file changed, 0 insertions(+), 0 deletions(-)delete mode 100644 file5
git status
On branch master
nothing to commit, working tree clean

現在,文件就從版本庫中被刪除了

6.標簽管理

6.1.理解標簽

標簽 tag ,可以簡單的理解為是對某次 commit 的一個標識,相當于起了一個別名。例如,在項目
發布某個版本的時候,針對最后一次 commit 起一個 v1.0 這樣的標簽來標識里程碑的意義。
這有什么用呢?相較于難以記住的 commit id ,tag 很好的解決這個問題,因為 tag 一定要給
個讓人容易記住,且有意義的名字。當我們需要回退到某個重要版本時,直接使用標簽就能很快定位到。

6.2.創建標簽

在Git中打標簽非常簡單,首先,切換到需要打標簽的分支上

然后,敲命令 git tag [name] 就可以打?個新標簽:

可以?命令 git tag 查看所有標簽:

默認標簽是打在最新提交的 commit 上的。那如何在指定的commit上打標簽呢??法是找到歷史提 交的commit id,然后打上就可以了,?例如下:

# 歷史記錄
hyb@139-159-150-152:~/git_teaching$ git log --pretty=oneline --abbrev-commit
97811ab (HEAD -> master, tag: v1.0, origin/master, origin/HEAD) add .gitignore
60e6b0a update README.md.
7ce3183 create file.txt
c6ce3f0 Initial commit
# 對 Initial commit 這次提交打標簽
hyb@139-159-150-152:~/git_teaching$ git tag v0.9 c6ce3f0
hyb@139-159-150-152:~/git_teaching$ git tag
v0.9
v1.0

注意,標簽不是按時間順序列出,而是按字母排序的。
可以用 git show [tagname]查看標簽信息。

6.3.操作標簽

如果標簽打錯了,也可以刪除

git tag -d [tagname]

hyb@139-159-150-152:~/git_teaching$ git tag 
v0.9
v1.0
hyb@139-159-150-152:~/git_teaching$ git tag -d v0.9 
Deleted tag 'v0.9' (was c6ce3f0)
hyb@139-159-150-152:~/git_teaching$ git tag 
v1.0

因為創建的標簽都只存儲在本地,不會自動推送到遠程。所以,打錯的標簽可以在本地安全刪除。
如果要推送某個標簽到遠程,使用命令 git push origin <tagname>

如果標簽已經推送到遠程,要刪除遠程標簽就?煩?點,先從本地刪除;然后,從遠程刪除。刪除命令也是push,但是格式如下:

hyb@139-159-150-152:~/git_teaching$ git tag
v1.0
hyb@139-159-150-152:~/git_teaching$ git tag -d v1.0 
Deleted tag 'v1.0' (was 97811ab)
hyb@139-159-150-152:~/git_teaching$ git push origin :refs/tags/v1.0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:hyb91/git_teaching.git- [deleted] v1.0

7.圖形化的方式展示分支和合并的歷史

git log --graph --abbrev-commit

綠色代表dev分支上的,紅色代表master分支,注意分場景使用(顏色是隨機的,下次可能綠色就是主分支)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66752.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66752.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66752.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Pytorch深度學習指南 卷I --編程基礎(A Beginner‘s Guide) 第1章 一個簡單的回歸

本章正式開始使用pytorch的接口來實現對應的numpy的學習的過程&#xff0c;來學習模型的實現&#xff0c;我們會介紹numpy是如何學習的&#xff0c;以及我們如何一步步的通過torch的接口來實現簡單化的過程&#xff0c;優雅的展示我們的代碼&#xff0c;已經我們的代碼完成的事…

String.join()

String.join() 方法是 Java 8 及其以上版本中的一個方法&#xff0c;用于將多個字符串用指定的分隔符連接成一個字符串。 其語法為&#xff1a; java復制 String joinedString String.join(CharSequence delimiter, CharSequence... elements); 在這個方法中&#xff1a;…

FastAPI 數據庫配置最佳實踐

FastAPI 數據庫配置最佳實踐 1. 基礎配置 1.1 數據庫連接配置 from sqlalchemy import create_engine, event from sqlalchemy.orm import sessionmaker, declarative_base from sqlalchemy.pool import QueuePool from sqlalchemy.exc import SQLAlchemyError import loggi…

深度解析 Java 的幻讀現象與應對策略

目錄 一、幻讀現象的本質 二、幻讀在 Java 數據庫編程中的體現 三、幻讀帶來的問題 四、應對幻讀的策略 1. 數據庫隔離級別 2. 應用層解決方案 五、總結 在 Java 的數據庫編程領域&#xff0c;幻讀是一個不容忽視的概念。它涉及到數據庫事務處理過程中數據一致性的關鍵問…

Glary Utilities Pro 多語便攜版系統優化工具 v6.21.0.25

Glary Utilities是一款功能強大的系統優化工具軟件&#xff0c;旨在幫助用戶清理計算機垃圾文件、修復系統錯誤、優化系統性能等。 軟件功能 清理和修復&#xff1a;可以清理系統垃圾文件、無效注冊表項、無效快捷方式等&#xff0c;修復系統錯誤和藍屏問題。 優化和加速&…

【貪心算法】洛谷P1106 - 刪數問題

2025 - 12 - 26 - 第 46 篇 【洛谷】貪心算法題單 - 【貪心算法】 - 【學習筆記】 作者(Author): 鄭龍浩 / 仟濹(CSND賬號名) 目錄 文章目錄 目錄P1106 刪數問題題目描述輸入格式輸出格式樣例 #1樣例輸入 #1樣例輸出 #1 提示思路代碼 P1106 刪數問題 題目描述 鍵盤輸入一個高…

Oracle 創建并使用外部表

目錄 一. 什么是外部表二. 創建外部表所在的文件夾對象三. 授予訪問外部表文件夾的權限3.1 DBA用戶授予普通用戶訪問外部表文件夾的權限3.2 授予Win10上的Oracle用戶訪問桌面文件夾的權限 四. 普通用戶創建外部表五. 查詢六. 刪除 一. 什么是外部表 在 Oracle 數據庫中&#x…

基于FPGA的BPSK+costas環實現,包含testbench,分析不同信噪比對costas環性能影響

目錄 1.算法仿真效果 2.算法涉及理論知識概要 3.Verilog核心程序 4.完整算法代碼文件獲得 1.算法仿真效果 本作品是之前作品的改進和擴展&#xff1a; 1.m基于FPGA的BPSK調制解調通信系統verilog實現,包含testbench,包含載波同步_csdn基于fpga的bpsk-CSDN博客 2.m基于FP…

Linux 目錄操作詳解

Linux目錄操作詳解 1. 獲取當前工作目錄1.1 getcwd()1.2 get_current_dir_name() 2. 切換工作目錄2.1 chdir() 3. 創建和刪除目錄3.1 mkdir()3.2 rmdir() 4. 獲取目錄中的文件列表4.1 opendir() 打開目錄4.2 readdir() 讀取目錄內容4.3 closedir() 關閉目錄 5. dirent 結構體6.…

Spring 依賴注入詳解:創建 Bean 和注入依賴是一回事嗎?

1. 什么是依賴注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;&#xff1f; 依賴注入 是 Spring IoC&#xff08;控制反轉&#xff09;容器的核心功能。它的目標是將對象的依賴&#xff08;如其他對象或配置&#xff09;從對象本身中剝離&#xff0c;由容器負…

AI時代的網絡安全:傳統技術的落寞與新機遇

AI時代的網絡安全&#xff1a;傳統技術的落寞與新機遇 在AI技術飛速發展的浪潮中&#xff0c;網絡安全領域正經歷著前所未有的變革。一方面&#xff0c;傳統網絡安全技術在面對新型攻擊手段時逐漸顯露出局限性&#xff1b;另一方面&#xff0c;AI為網絡安全帶來了新的機遇&…

后端開發Web

Maven Maven是apache旗下的一個開源項目&#xff0c;是一款用于管理和構建java項目的工具 Maven的作用 依賴管理 方便快捷的管理項目依賴的資源&#xff08;jar包&#xff09;&#xff0c;避免版本沖突問題 統一項目結構 提供標準、統一的項目結構 項目構建 標準跨平臺(…

前沿技術趨勢洞察:2024年技術的嶄新篇章與未來走向!

引言 時光飛逝&#xff0c;2024年已經來臨&#xff0c;回顧過去一年&#xff0c;科技的迅猛進步簡直讓人目不暇接。 在人工智能&#xff08;AI&#xff09;越來越強大的今天&#xff0c;我們不再停留在幻想階段&#xff0c;量子計算的雛形開始展示它的無窮潛力&#xff0c;Web …

【10.2】隊列-設計循環隊列

一、題目 設計你的循環隊列實現。 循環隊列是一種線性數據結構&#xff0c;其操作表現基于 FIFO&#xff08;先進先出&#xff09;原則并且隊尾被連接在隊首之后以形成一個循環。它也被稱為“環形緩沖器”。 循環隊列的一個好處是我們可以利用這個隊列之前用過的空間。在一個普…

博客之星2024年度總評選——我的年度創作回顧與總結

2024年&#xff0c;是我在CSDN博客上持續耕耘、不斷成長的一年。在此&#xff0c;與大家分享一下我的年度創作回顧與總結。 一、創作成長與突破 在人工智能領域&#xff0c;技術迭代迅速&#xff0c;知識更新頻繁。為了保持自己的競爭力&#xff0c;在今年&#xff0c;我始終…

IDEA運行Java項目總會報程序包xxx不存在

我的在另外一臺電腦上跑是沒有問題的&#xff0c;在新的電腦上跑的時候&#xff0c;又出現了這個惡心的問題...... 思來想去&#xff0c;唯一的問題就是我的mavn環境沒的配置好 如何在本地部署mavn環境&#xff0c;這里推薦一篇很好的文章&#xff1a; Maven安裝與配置&…

java 根據前端傳回的png圖片數組,后端加水印加密碼生成pdf,返回給前端

前端傳回的png圖片數組&#xff0c;后端加水印加密碼生成pdf&#xff0c;返回給前端 場景&#xff1a;重點&#xff1a;maven依賴controllerservice 場景&#xff1a; 當前需求&#xff0c;前端通過html2canvas將頁面報表生成圖片下載&#xff0c;可以仍然不滿意。 需要java后…

數據分庫分表和遷移方案

在我們業務快速發展的過程中&#xff0c;數據量必然也會迎來突飛猛漲。那么當我們的數據量百倍、千倍、萬倍、億倍增長后&#xff0c;原有的單表性能就不能滿足我們日常的查詢和寫入了&#xff0c;此時數據架構就不得不進行拆分&#xff0c;比如單表拆分成10張表、100張表、單個…

線上突發:MySQL 自增 ID 用完,怎么辦?

線上突發&#xff1a;MySQL 自增 ID 用完&#xff0c;怎么辦&#xff1f; 1. 問題背景2. 場景復現3. 自增id用完怎么辦&#xff1f;4. 總結 1. 問題背景 最近&#xff0c;我們在數據庫巡檢的時候發現了一個問題&#xff1a;線上的地址表自增主鍵用的是int類型。隨著業務越做越…

[Java] Solon 框架的三大核心組件之一插件擴展體系

1、Solon 的三大核心組件 核心組件說明Plugin 插件擴展機制提供“編碼風格”的擴展體系Ioc/Aop 應用容器提供基于注入依賴的自動裝配體系ContextHandler 通用上下文處理接口提供“開放式處理”適配體系&#xff08;俗稱&#xff0c;三元合一&#xff09; 2、Solon Plugin 插件…