Git-分布式版本控制系統

一、版本控制

? ? ? 版本控制系統是記錄若干文件內容變化,以便將來查閱修訂特定版本或還原部分文件的系統

? ? ??分為:集中式版本控制系統(svn)簡稱cvcs? ?都有一個單一集中管理服務器,保存所有文件修訂版本,開發人員通過客戶端連到這臺服務器,取出文件或提交更新。會出現中央服務器單點故障!

? ? ? ? ? ? ? ?分布式版本控制系統(Git)簡稱dvcs? ?沒有”中央服務器“,每個人的電腦上都是一個完整的版本庫。安全性更高!但分布式版本控制系統中會有一臺充當”中央服務器“的電腦,方便交換修改。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 有極其強大的分支管理工具!?

? 二、Git幫助與初始化

? ? ? ?$git help? ? ? ? ? ? ? 顯示git的幫助信息

? ? ? ?$git help-a? ? ? ? ? ?加上-a參數可以顯示所有幫助信息

? ? ? ?$git help add? ? ? ? 加上具體命令可查看詳細幫助內容

? ? ? ?$git config --list? ?顯示git的配置信息

? ? ? ?$git config --globol user.name"sunyi"? ? ? ? ? ? ? ? ? ? ? ? ? ? 設置Git的用戶名

  ?$git config --globol user.email"963807896@qq.com"? ? ? ?設置Git的E-mail

                              --globol? 表示設置的范圍(系統,項目,全局)

?  $git config --unset--globol user.name? ? ? ? ? ? ? ? ? ? ? ? ? ?修改前需要--unset參數清空需要修改的設置

? ?  $git init? ?使用init命令可以初始化一個倉庫(repository),同時在當前目錄下生成一個用來跟蹤管理版本庫的的.git文件夾*避免使用含有中文的路徑。

三、 創建版本庫

   在git的目錄下添加一個有內容的文本文件

   $git status? ? ? ? ? ? 查看當前倉庫工作區的狀態

   $git add? ? ? ? ? ? ? ?將新文件添加到倉庫

   $git commit? ? ? ? ? 將新文件提交到倉庫? ? ??$git commit -m”提交本次的說明,方便找到改動記錄“? Git完整的添加文件需要先add再commit兩步。

四、本地的版本控制

1> 添加修改

   給文本文件添加一行文本? ? ? 先查看狀態,提示被修改過,但還沒有被準備提交的的修改

  ?$git diff? ? ? ? ? ? ? ? 查看具體修改內容? ? ? ? 查看完修改后,經過add和commit將修改添加到版本庫

2>? ?版本回退  

  ??$git log? ? ? ? ? ? ? ? 查看commit的記錄? ? ? ?記錄中有提交的作者,email和提交時間以及commit時輸入的-m參數后的文本。其中commit后邊的數字表示commit id(版本號)是一個SHA1計算出來的非常大的數字,用十六進制表示。

? ? ?$git reset--hard HEAD^??? ? ? ?退回到上一個版本? ? ?首先要知道當前版本? 用HEAD表示當前版本 上一個版本就是HEAD^, 上上一個就是HEAD^^? ,往上100個可以寫HEAD~100

?  $git reset--hard ID 4da437f 放棄回退? ? ? ? ? ? 必須知道恢復版本的ID號 ,因為git log只存儲最后一次版本之前的版本記錄? 所以需要git reflog來找回之前的版本號?

   $git reflog? ? ? ? ? ? ? ? ? ? ? ? ? ? 用來記錄用戶輸入的每一次命令。找回版本號并且撤銷回退。? ? *版本號寫前幾位即可,Git自動查找

3> 工作區和暫存區

   工作區即當前目錄下除了.get文件夾下的其他目錄 ?

   版本庫即.get文件夾下的東西,其中最重要的就是stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針HEAD。

   將文件添加到Git版本庫的時候分兩步執行,首先git add把文件添加進去,實際上就是把文件添加到暫存區,然后git commit提交更改,實際上就是把暫存區所有內容提交到當前分支

4>? ?撤銷修改

   撤銷修改分為三種情況:僅修改了工作區的內容,未添加到暫存區(沒有經過add和commit的修改);此時工作區提示有一個修改;$git checkout 文件名,可以還原工作區修改。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 修改了工作區的內容并添加了暫存區,但未提交修改(經過add但未commit的修改);$git reset HEAD 文件名,可以還原暫存區的修改。再使用checkout命令還原工作區。

              修改被添加到暫存區并且提交了修改(經過add和commit的修改);此時只需要退回版本即可,$git reset--hard HEAD^ 。

5>? ?刪除文件

   在Git中刪除也屬于修改操作,在工作區手動刪除文件之后,工作區和版本庫的文件就一致了,Git會發現用戶刪除了文件,并且告訴用戶哪些文件被刪除了

   刪除文件有兩種方法:在工作區刪除文件,然后使用git rm 并且commit? ? ? 執行git rm之前的刪除文件操作僅僅修改工作區,并不會將刪除操作添加到暫存區,可直接用checkout命令撤銷操作即可

  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?在Git中直接使用?git rm 命令刪除文件并 commit? ? ? 在commit之前,刪除操作會同時操作工作區和暫存區,在撤銷時先使用reset命令,然后再使用checkout命令撤銷操作。

五、 遠程倉庫

1>? ? 生成SSH Key

  $ssh-keygen-t rsa? ?? 使用RSA 方式加上時間參數來生成SSH秘鑰,使用默認設置即可。

             成功后可以在用戶主目錄下找到.ssh目錄,里面有id_rsa和 id_rsa.pub兩個文件,其中id_rsa是私鑰,不能泄露!!!id_rsa.pub是公鑰文件,可任意發送。

   將生成的id_rsa.pub文件發送給服務器管理員,管理員在服務器將公鑰注冊以后,此計算機即可通過服務器驗證,進而下載上傳文件。請保證id_rsa文件安全!!!

2>? ?遠程下載項目代碼

   使用git init 創建一個新倉庫,然后git? pull可以遠程下載項目代碼,(或者直接使用git clone命令拷貝版本庫至本地)。

   首次使用Git連接服務器時,會有一個警告,ssh連接第一次驗證服務器的key,輸入yes回車即可。這個警告只出現一次。

3>? ?推送代碼至服務器

   git push? ? ? 將當前分支推送至服務器。

六、分支管理

1>? ?創建與合并分支

  分支管理命令? ? ?git? branch? ? ? ? ? ? ? ? ?  查看當前分支

         ??git? branch 名稱? ? ? ?  ? ?創建分支

         ? git checkout 名稱? ? ? ?   切換分支

??        ???git checkout -b 名稱  ? ?創建加切換分支,git會在當前分支前加*

         ? git merge 名稱      合并某分支到當前分支

         ??git branch -d 名稱     刪除分支

?2>? ?解決沖突

   git status? 告訴我們沖突文件

?  git用<<<<<<<,=======,>>>>>>>標記不同分支的內容,修改解決沖突后保存,再提交即可成功合并。

   用帶參數的git log 可以看見分支合并情況

   git log --graph --pretty=oneline --abbrev -commmit

   git stash? ? 把當前工作區”儲藏起來“,等以后恢復現場后繼續工作,使用之后,當前工作區狀態是干凈的

?3>? ?bug分支

  ?git stash apply? ? 恢復工作區現場,不刪除stash內容

  ?git stash drop? ? ?手動刪除stash內容

  ?git? stash pop? ? ? 恢復工作區現場,同時刪除stash內容

七、自定義配置

1>? ?標簽

   git tag 名稱? ? ? ? ?添加新標簽

   git tag? ? ? ? ? ? ? ? 查看所有標簽

   git show 名稱? ? ? 查看對應標簽的詳細提交信息

2>? ?忽略文件

   git ignore

?

轉載于:https://www.cnblogs.com/tutuai/p/8372448.html

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

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

相關文章

ES6-6 - this指向、箭頭函數基本形式、rest運算符

一 chrome斷點調試 觀察函數調用棧 // 25min var x 1; function foo(x, y function () { x 2; console.log(2) }) {var x 3;y();console.log(x) } foo() console.log(x) // 2 3 1var x 1; function foo(x, y function () { x 2; console.log(x) }) {x 3;y();console.…

【二分答案】Problem C:木材加工

Problem C:木材加工 Time Limit:1000MS Memory Limit:65536K Total Submit:48 Accepted:20 Description 【問題描述】 木材廠有一些原木&#xff0c;現在想把這些木頭切割成一些長度相同的小段木頭&#xff08;木頭有可能有剩余&#xff09;&#xff0c;需要得到的小段的數目是…

vue --- vue.js實戰基礎篇課后練習

練習1:在輸入框聚焦時,增加對鍵盤上下鍵按鍵的支持,相當于加1和減1 練習2:增加一個控制步伐的prop-step,比如設置為10,點擊加號按鈕,一次增加10 思路: // 考慮到子模板的復用性,即在父模板中復用如下: <input-number v-model"value" :max"10" :min&qu…

js打字效果

//文字依次出來效果 $.fn.autotype function() {var $text $(this);// console.log(this, this);var str $text.html(); //返回被選 元素的內容var index 0;var x $text.html();//$text.html()和$(this).html()有區別var timer setInterval(function() {//substr(index, …

ES6-7 - 箭頭函數的實質、箭頭函數的使用場景

箭頭函數返回對象 // 這種情況要要用(),否則會將對象的{}解釋為塊 const fn (a, b) > ({a:1, b:2})箭頭函數的特點 this指向由外層函數的作用域來決定&#xff0c;它本身沒有this&#xff0c;不能通過call、apply、bind改變不能作為構造函數使用不可以使用arguments對象&…

mybatis比hibernate處理速度快的原因

mybatis:是面向結果集的。當要展示的頁面需要幾個字段時&#xff0c;springmvc會提供這幾個字段并將其拼接成結果集&#xff0c;在轉化為相應的對象。 hibernate&#xff1a;是面向對象的。要展示的頁面需要某些字段時&#xff0c;會將所有字段都查出來&#xff0c;在轉化為相應…

zabbix 從入門到精通

https://www.cnblogs.com/clsn/p/7885990.html 轉載于:https://www.cnblogs.com/learningJAVA/p/8376589.html

javasript --- 一個日期規范(x秒前,x分前...)

Time函數(通俗易懂,自己根據實際需求修改吧- -) // time.js var Time {// 獲取當前時間戳getUnix: function () {var date new Date();return date.getTime();},// 獲取今天0點0分0秒的時間戳getTodayUnix: function () {var date new Date();date.setHours(0);date.setMin…

ES6-8 - 函數名/對象拓展、描述符、getter/setter

函數名 有兩種特殊情況&#xff1a;bind方法創造的函數&#xff0c;name屬性返回bound加上原函數的名字&#xff1b;Function構造函數創造的函數&#xff0c;name屬性返回anonymous。 bind函數名 // 以bound開頭 function foo() { } const fnName foo.bind().name console.lo…

javascript --- 再識閉包

看下面一個例子: function zipCode(code, location) {let _code code;let _location location || ;return {code: function () {return _code;},location: function() {return _location;}} }再上述封閉的函數中,code的匿名函數根據作用域鏈可以訪問到外面的_code變量. con…

iframe.contentWindow介紹

一、在使用iframe的頁面&#xff0c;要操作這個iframe里面的DOM元素可以用&#xff1a; contentWindow、contentDocument(測試的時候chrome瀏覽器&#xff0c;要在服務器環境下) 1、先獲取iframe里面的window對象&#xff0c;再通過這個對象&#xff0c;獲取到里面的DOM元素 例…

ES6-9 對象密封4種方式、assign、取值函數的拷貝

一 對象密封 1 Object.preventExtensions 禁止對象拓展&#xff0c;仍可刪除 嚴格模式下報錯 const origin {a: 1 } const fixed Object.preventExtensions(origin) console.log(origin fixed) // true console.log(Object.isExtensible(origin)) // false 不可拓展 orig…

MySQL入門命令

我主要是在維護OpenStack云平臺的時候會涉及MySQL數據庫的操作&#xff0c;這里就跟大家分享一下常用的簡單命令&#xff0c;也為自己做個小練習。 1.登錄MySQL數據庫 mysql -h localhost -u root -p 123456 其中&#xff0c;-h&#xff1a;mysql服務器的IP地址或主機名&#x…

【模板】分塊

題意簡述 已知一個數列&#xff0c;你需要進行下面兩種操作&#xff1a; 1.將某區間每一個數加上x 2.求出某區間每一個數的和 題解思路 對于一個長度為n的序列&#xff0c;我們可以講其中的元素分為\( \sqrt{n} \) 個連續的子序列&#xff0c;每塊的長度自然就為\( \sqrt{n} \)…

javascript --- 使用ajax與服務器進行通信

Ajax: (Asynchronous JavaScript and XML,異步JavaScript與XML技術)是一種有效利用JavaScript和DOM的操作. 與傳統HTTP請求的區別: Ajax允許只更新頁面的一部分,因此減少了響應中傳輸的數據量 Ajax的API: Ajax與服務器進行通信,可以使用JavaScript中原生的XMLHttpRequest對象…

ES6-10 super、4種遍歷方式、原型、symbol遍歷

由于現代 JavaScript 引擎優化屬性訪問所帶來的特性的關系&#xff0c;更改對象的 [[Prototype]]即__proto__在各個瀏覽器和 JavaScript 引擎上都是一個很慢的操作。 一 Object原型方法 1 Object.setPrototypeOf(obj, proto) 用該方法而不是直接修改__proto__返回值是設置好原…

IntelliJ IDEA使用

1&#xff1a;下載 ideaIU-2017.2.exe&#xff0c;JetbrainsCrack-2.6.2.jar(補丁) 2&#xff1a;安裝ideaIU-2017.2.exe&#xff0c;將補丁放在D:\java\intellij\IntelliJ IDEA 2017.2\bin 目錄下 3&#xff1a;在安裝的idea下面的bin目錄下面有2個文件 &#xff1a; 一個是id…

js中如何刪除json對象的某一個選項

我有一個這樣一個對象&#xff0c;getData, 但是我不想要每一項的id&#xff0c;那怎么去刪除呢(使用delete)? getData.map((item) >{delete item["id"];});console.log(getData);轉載于:https://www.cnblogs.com/mmykdbc/p/8386407.html

ES6-11 Symbol、iterator、forOf、typeArray

…剩余運算符 const obj1 {a: 1,b: 2 } const obj2 {a: 100,b: 2,c: 300 } const obj {...obj1,...obj2 } console.log(obj) // 和Object.assign(obj, obj1, obj2)結果相同[Symbol.hasInstance] Symbol構造函數上的屬性&#xff0c;默認調用了方法 iterator迭代器 對數…

node --- 游走在客戶端和服務器間的http

本篇文章,講述了一個很簡單的上傳圖片(/start)到本地服務器,然后路由跳轉到/upload. 寫這個程序的目的是為了幫助理解HTTP的一些基本概念及node對于http api的實現以及程序的設計模式. IP: 計算機之間的通信 TCP: 應用程序之間的通信 HTTP: 基于TCP實現的應用層協議,設計之初是…