你再不學Git就來不及了!!!

?其他系列文章導航

設計模式合集

多線程合集

分布式合集

ES合集


文章目錄

?其他系列文章導航

文章目錄

前言

版本控制

什么是版本控制

為什么要版本控制

一、認識 Git

1.1Git 簡史

1.2Git 與其他版本管理系統的主要區別

1.3Git 的三種狀態

二、Git 使用快速入門

2.1獲取 Git 倉庫

2.2記錄每次更新到倉庫

2.3推送改動到遠程倉庫

2.4遠程倉庫的移除與重命名

2.5查看提交歷史

2.6撤銷操作

2.7分支


前言

版本控制

什么是版本控制

版本控制是一種記錄一個或若干文件內容變化,以便將來查閱特定版本修訂情況的系統。 除了項目源代碼,你可以對任何類型的文件進行版本控制。

為什么要版本控制

有了它你就可以將某個文件回溯到之前的狀態,甚至將整個項目都回退到過去某個時間點的狀態,你可以比較文件的變化細節,查出最后是誰修改了哪個地方,從而找出導致怪異問題出現的原因,又是誰在何時報告了某個功能缺陷等等。


一、認識 Git

1.1Git 簡史

Linux 內核項目組當時使用分布式版本控制系統 BitKeeper 來管理和維護代碼。但是,后來開發 BitKeeper 的商業公司同 Linux 內核開源社區的合作關系結束,他們收回了 Linux 內核社區免費使用 BitKeeper 的權力。 Linux 開源社區(特別是 Linux 的締造者 Linus Torvalds)基于使用 BitKeeper 時的經驗教訓,開發出自己的版本系統,而且對新的版本控制系統做了很多改進。

1.2Git 與其他版本管理系統的主要區別

Git 在保存和對待各種信息的時候與其它版本控制系統有很大差異,盡管操作起來的命令形式非常相近,理解這些差異將有助于防止你使用中的困惑。

下面我們主要說一個關于 Git 與其他版本管理系統的主要差別:對待數據的方式

Git 采用的是直接記錄快照的方式,而非差異比較。我后面會詳細介紹這兩種方式的差別。

大部分版本控制系統(CVS、Subversion、Perforce、Bazaar 等等)都是以文件變更列表的方式存儲信息,這類系統將它們保存的信息看作是一組基本文件和每個文件隨時間逐步累積的差異。

具體原理如下圖所示,理解起來其實很簡單,每當我們提交更新一個文件之后,系統都會記錄這個文件做了哪些更新,以增量符號 Δ(Delta)表示。

我們怎樣才能得到一個文件的最終版本呢?

很簡單,高中數學的基本知識,我們只需要將這些原文件和這些增加進行相加就行了。

這種方式有什么問題呢?

比如我們的增量特別特別多的話,如果我們要得到最終的文件是不是會耗費時間和性能。

Git 不按照以上方式對待或保存數據。 反之,Git 更像是把數據看作是對小型文件系統的一組快照。 每次你提交更新,或在 Git 中保存項目狀態時,它主要對當時的全部文件制作一個快照并保存這個快照的索引。 為了高效,如果文件沒有修改,Git 不再重新存儲該文件,而是只保留一個鏈接指向之前存儲的文件。 Git 對待數據更像是一個 快照流

1.3Git 的三種狀態

Git 有三種狀態,你的文件可能處于其中之一:

  1. 已提交(committed):數據已經安全的保存在本地數據庫中。
  2. 已修改(modified):已修改表示修改了文件,但還沒保存到數據庫中。
  3. 已暫存(staged):表示對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中。

由此引入 Git 項目的三個工作區域的概念:Git 倉庫(.git directory)工作目錄(Working Directory) 以及 暫存區域(Staging Area)

基本的 Git 工作流程如下:

  1. 在工作目錄中修改文件。
  2. 暫存文件,將文件的快照放入暫存區域。
  3. 提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。


二、Git 使用快速入門

2.1獲取 Git 倉庫

有兩種取得 Git 項目倉庫的方法。

  1. 在現有目錄中初始化倉庫: 進入項目目錄運行 git init 命令,該命令將創建一個名為 .git 的子目錄。
  2. 從一個服務器克隆一個現有的 Git 倉庫: git clone [url] 自定義本地倉庫的名字: git clone [url] directoryname

2.2記錄每次更新到倉庫

  1. 檢測當前文件狀態 : git status
  2. 提出更改(把它們添加到暫存區):git add filename (針對特定文件)、git add *(所有文件)、git add *.txt(支持通配符,所有 .txt 文件)
  3. 忽略文件.gitignore 文件
  4. 提交更新: git commit -m "代碼提交信息" (每次準備提交前,先用 git status 看下,是不是都已暫存起來了, 然后再運行提交命令 git commit
  5. 跳過使用暫存區域更新的方式 : git commit -a -m "代碼提交信息"git commit 加上 -a 選項,Git 就會自動把所有已經跟蹤過的文件暫存起來一并提交,從而跳過 git add 步驟。
  6. 移除文件git rm filename (從暫存區域移除,然后提交。)
  7. 對文件重命名git mv README.md README(這個命令相當于mv README.md READMEgit rm README.mdgit add README 這三條命令的集合)

2.3推送改動到遠程倉庫

  • 如果你還沒有克隆現有倉庫,并欲將你的倉庫連接到某個遠程服務器,你可以使用如下命令添加:git remote add origin <server> ,比如我們要讓本地的一個倉庫和 GitHub 上創建的一個倉庫關聯可以這樣git remote add origin https://github.com/Snailclimb/test.git

  • 將這些改動提交到遠端倉庫:git push origin master (可以把 master 換成你想要推送的任何分支)

    如此你就能夠將你的改動推送到所添加的服務器上去了。

2.4遠程倉庫的移除與重命名

  • 將 test 重命名為 test1:git remote rename test test1
  • 移除遠程倉庫 test1:git remote rm test1

2.5查看提交歷史

在提交了若干更新,又或者克隆了某個項目之后,你也許想回顧下提交歷史。 完成這個任務最簡單而又有效的工具是 git log 命令。git log 會按提交時間列出所有的更新,最近的更新排在最上面。

可以添加一些參數來查看自己希望看到的內容:

只看某個人的提交記錄:

git log --author=bob

2.6撤銷操作

有時候我們提交完了才發現漏掉了幾個文件沒有添加,或者提交信息寫錯了。 此時,可以運行帶有 --amend 選項的提交命令嘗試重新提交:

git commit --amend

取消暫存的文件

git reset filename

撤消對文件的修改:

git checkout -- filename

假如你想丟棄你在本地的所有改動與提交,可以到服務器上獲取最新的版本歷史,并將你本地主分支指向它:

git fetch origin
git reset --hard origin/master

2.7分支

分支是用來將特性開發絕緣開來的。在你創建倉庫的時候,master 是“默認”的分支。在其他分支上進行開發,完成后再將它們合并到主分支上。

我們通常在開發新功能、修復一個緊急 bug 等等時候會選擇創建分支。單分支開發好還是多分支開發好,還是要看具體場景來說。

創建一個名字叫做 test 的分支

git branch test

切換當前分支到 test(當你切換分支的時候,Git 會重置你的工作目錄,使其看起來像回到了你在那個分支上最后一次提交的樣子。 Git 會自動添加、刪除、修改文件以確保此時你的工作目錄和這個分支最后一次提交時的樣子一模一樣)

git checkout test

你也可以直接這樣創建分支并切換過去(上面兩條命令的合寫)

git checkout -b feature_x

切換到主分支

git checkout master

合并分支(可能會有沖突)

 git merge test

把新建的分支刪掉

git branch -d feature_x

將分支推送到遠端倉庫(推送成功后其他人可見):

git push origin

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

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

相關文章

springboot使用redis緩存亂碼(key或者 value 亂碼)一招解決

如果查看redis中的值是這樣 創建一個配置類就可以解決 package com.deka.config;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; i…

CPU+GPU多樣化算力,ZStack Cloud助力游戲精釀核心業務上云

游戲精釀通過ZStack Cloud云平臺提供高性能、高可用的云主機、云存儲和云網絡&#xff1b;前期通過超融合架構快速構建云基礎設施&#xff0c;來支持Jira、Redis等關鍵業務&#xff1b;并實現對原有私有云平臺業務的替代&#xff0c;按需將原有私有云業務滾動遷移到ZStack Clou…

移動端瀏覽器 jquery 獲取 pdf blob文件流 預覽pdf

最近遇到一個需求&#xff0c;一個古早的移動端 juery 項目要求做一個頁面&#xff0c;從接口獲取 pdf 文件流&#xff0c;然后預覽出來 這里使用第三方工具&#xff1a;pdf.js 代碼如下&#xff1a; // 引入相關文件<script src"../js/pdf.js" type"text…

N_1 驗證密碼

N_1 驗證密碼 題目 設計一個用戶密碼驗證程序&#xff0c;要求密碼輸入只有3次機會&#xff0c;且密碼中不能包含”*”字符。 分析 需要考慮3個問題&#xff1a;驗證次數、特殊字符和正誤密碼判斷&#xff1b;驗證次數需要使用循環&#xff0c;3個問題需要用到分支結構&…

java 系統屬性和環境屬性

Java系統屬性和環境屬性都是與Java應用程序相關的參數&#xff0c;但它們有以下區別&#xff1a; 系統屬性是由Java虛擬機&#xff08;JVM&#xff09;設置的&#xff0c;而環境屬性是由操作系統設置的。 系統屬性是以“-D”開頭的命令行參數傳遞給JVM的&#xff0c;而環境屬性…

深入理解Spring AOP的工作流程

文章目錄 引言什么是AOP&#xff1f;Spring AOP的工作原理1. JDK動態代理2. CGLIB代理 Spring AOP的注解方式Aspect注解EnableAspectJAutoProxy注解 Spring AOP的工作流程拓展應用1. 自定義注解2. 異常處理3. 切面優先級 結論 &#x1f389;深入理解Spring AOP的工作流程 ☆* o…

關于運行軟件程序出現vcruntime140.dll丟失的修復教程-解決方案

vcruntime140.dll是Microsoft Visual C庫文件的一部分&#xff0c;用于支持Windows操作系統上的應用程序。如果找不到或丟失了這個文件&#xff0c;可能會導致某些應用程序無法正常運行。下面是關于vcruntime140.dll丟失的5個修復方法&#xff0c;以及vcruntime140.dll文件屬性…

Python基礎教程之分支結構詳解

文章目錄 一、分支結構二、單分支結構三、雙分支結構四、多分支結構五、嵌套分支結構六、三元表達式七、條件測試關于Python技術儲備一、Python所有方向的學習路線二、Python基礎學習視頻三、精品Python學習書籍四、Python工具包項目源碼合集①Python工具包②Python實戰案例③P…

Elasticsearch基礎優化

分片策略 分片和副本得設計為ES提供支付分布式和故障轉移得特性&#xff0c;但不意味著分片和副本是可以無限分配&#xff0c; 而且索引得分片完成分配后由于索引得路由機制&#xff0c;不能重新修改分片數&#xff08;副本數可以動態修改&#xff09; 一個分片得底層為一個l…

python之pyqt專欄2-項目文件解析

項目結構 在上一篇文章python之pyqt專欄1-環境搭建&#xff0c;創建新的pyqt項目&#xff0c;下面我們來看一下這個項目下的文件。 從下面的文件結構圖可以看到&#xff0c;該項目下有3個文件&#xff0c;untitled.ui,untitled.py 以及main.py。 QtDesigner可以UI界面的方式&am…

Feign接口請求返回異常 no suitable HttpMessageConvert found for response type

問題場景&#xff1a; 后端調用feign接口請求, 接口返回異常, no suitable HttpMessageConvert found for response type 問題描述 報錯異常如下&#xff1a; //根據圖片特征 去查詢人員信息ResultVo<List> personVos ipbdFaceLibPersonApi.queryFacePersonByFeatur…

華為云之SFS彈性文件服務使用體驗

華為云之SFS彈性文件服務使用體驗 一、本次實踐介紹1.1 實踐環境簡介1.2 本次實踐目的 二、SFS彈性文件服務介紹2.1 SFS彈性文件服務簡介2.2 SFS彈性文件服務特點 三、購買ECS彈性云服務器3.1 購買ECS彈性云服務器3.2 查看ECS彈性云服務器狀態3.3 遠程連接ECS3.4 檢查操作系統版…

package.json 中的版本號,符號 ~ 與 ^ 的區別及其他符號的含義

"element-ui": "^2.15.1", 版本號&#xff1a; 2.15.1 對應 x.y.z z &#xff1a;表示一些小的bugfix, 更改z的號&#xff1b;(修復補丁-z)&#xff08;~符號&#xff09; y &#xff1a;表示一些大的版本更改&#xff0c;比如一些API的變化&#xff1b;(…

迭代器模式 (Iterator Pattern)

定義 迭代器模式&#xff08;Iterator Pattern&#xff09;是一種行為型設計模式&#xff0c;用于順序訪問集合對象的元素&#xff0c;而無需知道集合對象的底層表示。迭代器模式將遍歷集合的責任從集合對象轉移到迭代器對象上&#xff0c;這簡化了集合接口和實現&#xff0c;…

計算機應用基礎_錯題集_基礎知識---網絡教育統考工作筆記006

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、基礎知識部分錯題集總結前言 計算機應用基礎統考,錯題集總結 一、基礎知識部分 基礎知識部分 2、微處理器芯片的位數即指______。 A.速度 B.字長 C.

Unity Android FireBase bugly報錯查詢

報錯如下圖&#xff0c;注意&#xff0c;標紅的三處 使用的il2cpp和架構是arm64-v8a 那我們就可以根據這些去找對應的符號表&#xff0c;在unity安裝目錄下 Unity2020.3.33f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\arm64-v8a 找到l…

Tomcat注冊為服務后,如何配置Tomcat內存大小

前提條件&#xff1a;tomcat已經注冊為服務。 1.winR,輸入regedit打開注冊表 2.找到Tomcat注冊表路徑&#xff1a; HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\Tomcat80603.找到jvm內存配置路徑&#xff1a; HKEY_LOCAL_MACHINE\SOFTW…

PTA-6-312 使用多態實現圖書館計算罰金功能

題目&#xff1a; 圖書館提供給讀者借閱服務&#xff0c;包括借閱書籍及音像制品。如果借閱超時需要繳納罰金。對于不同類型的書籍和音像制品罰款規則不同。 成人書籍:允許借閱的時間是21天&#xff0c;每超時1天&#xff0c;需要繳納罰金2元;如果超時3天以上&#xff0c;超出的…

vue中 mixin用法

在Vue.js中&#xff0c;mixin是一種可以在多個組件之間共享Vue組件選項的靈活方式。mixin對象可以包含任何組件選項。當組件使用mixin時&#xff0c;所有mixin對象的選項將被“混合”到該組件的選項中。 使用mixin的一個主要優點是可以在多個組件之間重用和共享代碼。這可以幫…

SSM大學生社團信息管理系統-99953,(免費領取源碼)計算機畢業設計選題開題+程序定制+論文書寫+答辯ppt書寫 包售后 全流程

SSM大學生社團信息管理系統APP 摘 要 隨著科學技術的飛速發展&#xff0c;社會的方方面面、各行各業都在努力與現代的先進技術接軌&#xff0c;通過科技手段來提高自身的優勢&#xff0c;高校當然也不能排除在外。大學生社團信息管理系統APP是以實際運用為開發背景&#xff0c…