後續會持續更新java
在任何一個系統之中都會存在有多個開發者(多人協做開發),而在 GIT 之中,對於每個開發者(電腦),都須要 開發者本身定義本身的名字與 email 地址,以便進行方便的聯繫,此時須要配置全局信息。git
配置全局用戶名及 email 地址緩存
git config --global user.name 'wzy' git config --global user.email '449245884@.com'
設置完成以後若是成功不會任何提示信息,能夠經過以下命令查看全局配置信息:工具
git config -l
能夠發現除了以前配置的用戶名和 email 地址以外,還存在有其它的內容。學習
若是要開發項目,那麼首先必須有一個倉庫(能夠簡單的理解爲是一個磁盤上的文件夾)。編碼
mkdir myrpo
此時 mypro 文件夾是一個空的文件夾,沒有任何的內容,只是一個純粹的目錄。spa
將 mypro 文件夾定義爲倉庫, 進入文件夾, 初始化倉庫(將此目錄變爲能夠被GIT管理的倉庫) 3d
並且此時會提示,在 mypro 文件夾之中建立了一個「.git」的目錄,這個目錄就是倉庫信息,死都不能改。版本控制
如今倉庫建立完成以後,下面就要進行文件的基本管理了。首先在編寫以前有一個說明:全部的文件必定要使用 UTF-8 編碼,不然有可能會出現問題。指針
創建一個 Hello.js文件
btn.onclick = function() { console.log('每一次新增!'); }
察看當前倉庫的狀態
git status
在 "git status" 狀態查詢操做上能夠發展有以下的幾個提示信息:
添加文件到倉庫
將文件加入到暫存庫之中
git add hello.js
繼續查詢狀態
此時有了一個最重要的信息:
如今的文件並無真正的提交到主分支上(主分支就是咱們真正要運行的程序的全部的代碼)。
注意:全部修改的代碼都會被 GIT 自動的監測到,全部的代碼在使用 commit 提交以前必定要先使用 add 增長進來,不然不會有任何的提交。
若是如今不但願分兩步進行則能夠在運行如下程序時增長一個「-a」的參數,表示先 add 然後 commit(git commit -a -m "註釋")。
提交文件信息
git commit -m "New Js file - Hello.js Create"
在進行每次更新提交的時候通常都會爲其增長上一些註釋數據,因此使用「-m」參數來進行註釋的編寫。
此時這個「Hello.js」文件就被真正的提交到了主分支上,也就是意味着程序發佈成功了。
查詢狀態
此時的狀態會提示:沒有任何的信息須要被提交,工做目錄很乾淨。而在 git 工具下用戶每一次進行的提交實際上都 會被日誌紀錄下來。
察看針對於「hello.js」文件的日誌信息
首先會出現一個提交的信息號 「2e3e7018a965673a4154c84105b5d1a23f13167a」,能夠理解爲是每一次提交的 id 號。若是有屢次提交,那麼這個日誌信息也會愈來愈多。
上面代碼已經能夠成功的進行了發佈,可是代碼出現就是爲了修改。因而如今來觀察對於 git 工具如何去控制修改。
修改 hello.js 文件
btn.onclick = function() { console.log('每一次新增!'); console.log('第一次修改·!'); }
此時發現文件增長了一行的修改。
查詢一下當前的倉庫狀態
如今 GIT 直接提示用戶,文件沒有保存到暫存區之中,並且提示有:要麼你選擇文件暫存,要麼你直接進行文件的 恢復,同時給出了已經修改的文件「hello.js」。
察看文件的先後區別
git diff hello.js
如今能夠發現全部增長的內容都會使用「+」表示,而被刪除的信息都會使用「-」表示。
將修改後的代碼加入到暫存區後進行提交
git commit -a -m "Update hello.js file. Add one lines"
察看修改日誌
git log hello.js
經過以上的代碼演示,如今能夠清楚的發現,只要是修改的操做 GIT 均可以進行及時的跟蹤。
工做區: 就是當前電腦的操做目錄(包含 .git);
倉庫:工做區有一個隱藏目錄 .git,這個不算工做區,而是 git 的倉庫,git 版本庫裏保存了不少東西,其中最重要的就是稱爲 stage 的暫存區,還有 git 爲用戶自動建立的主程序分支 master ,以及指向 master 的 head 指針。
概念解釋:
修改 Hello.js
btn.onclick = function() { console.log('第二次修改·!'); }
增長一個 demo.js 文件
btn2.onclick = function() { console.log('demo click'); }
如今的工做區中的代碼已經發生了變化。
用 status 跟蹤
如今會提示有如下信息:
使用「git add」將代碼添加到暫存區之中
git add .
本次操做使用了一個「.」,那麼就表示所有加入。修改以後再次觀察狀態。
觀察狀態
數據保存在暫存區以後,下面就要進行代碼的提交,將代碼提交到主分支上。
當把暫存區的代碼提交到主分支上以後,會自動的清空暫存區之中的內容。
提交修改代碼
git commit -m 'add demo.js file'
那麼此時再次查詢狀態。
那麼會直接發現沒有任何的文件修改的提示。
每當用戶進行代碼提交的時候都會自動的生成一個 commit id,而這個 commit id 就是進行代碼回退的主要操做方式。
查詢當前修改後的日誌信息
git log --pretty=oneline
你們能夠發現全部的 commit id 並非順序的 一、二、3 編號,而是由系統生成一個十六進制數據,這一律念就跟 Session ID 相似,由 GIT 本身控制,主要是爲了防止版本號的衝突。
在 master 分之上會有一個 HEAD 指針存在,而這個指針默認狀況下永遠指向最後一次提交的位置。
當使用回退以後發現 HEAD 指針出現了改變,若是回退一步,那麼以前的操做不會被刪除,可是全部的代碼將回歸到指定位置的狀態。
**回退一步
git reset --hard HEAD~1
那麼若是說如今還想恢復最新的狀態呢?那麼就必須找到回退的 commit id。
找到全部的已經刪除的信息 commitid
git reflog
恢復最後一次提交
git reset --hard cc54c43
在有了暫存區和 master 主分支概念以後,就須要迴避一個問題:只有保存在暫存區之中的內容才能夠被真正的修改, 而不是針對於文件。
編寫 hello.js 文件
btn.onclick = function() { console.log('個人小智'); }
以上是 =hello.js 文件的第一次修改。
將修改的文件增長到暫存區之中
git add.
此時並無提交,然後再次修改 hello.js 文件。
btn.onclick = function() { console.log('個人王大冶'); }
可是這個時候此文件並無使用 add 進行加入。
進行提交(提交的時候只提交暫存區的內容)
git commit -m "change print"
但是這個時候只是提交了第一次修改,而第二次修改並無提交。
查詢狀態
進行對比
git diff HEAD hello.js
HEAD 是指向最後一次提交的指針,如今的含義是將 HEAD 中的 Hello.java 文件與工做區的 Hello.java 文件進行對比。
總結:若是一個文件修改屢次了,那麼就須要執行屢次的 add 後才能夠提交,不然在 add 前的修改是不會被提交的。
狀況一:在未增長(git add) 與提交前(git commit) 用戶能夠直接撤消對文件作出的修改操做。
狀況二:在已增長(git add)與未提交前(git commit) 用戶能夠直接撤消對文件所作出的修改操做。
若是在工做區之中的代碼並無增長到暫存區之中,那麼若是要恢復到原始狀態是很容易的。
如今假設修改了 hello.js
btn.onclick = function() { console.log('個人王大冶'); } 就是要改代碼,不幹走人了,老子不吃你這套
可是隻要是文件一修改,那麼 git 就能夠當即跟蹤到狀態。
可是後來發現,此種修改實在是不該該進行,若是進行了,只能有一個結論:此人腦殼有問題。可是寫代碼的時候 可能不知道上一次修改狀態。
恢復
git checkout -- hello.js
執行以後發現 Hello.java 文件就恢復到了一個原始的狀態(上一次的提交狀態)。
如今假設要修改的文件已經提交到了暫存區之中。
將 Hello.java 代碼提交到暫存區中
git add.
當查詢狀態時:
在狀態查詢的時候已經給出了用戶的提示,即:你能夠根據 HEAD 指針來恢復文件。
從暫存區之中退出
git reset HEAD hello.js
因而再次查詢狀態
至關於如今已經由暫存區中保存的內容恢復到了工做區,那麼既然在工做區了,就能夠直接恢復原始狀態。
恢復原始
git checkout -- hello.js
我的建議:養成良好的開發習慣,別像演示那樣這麼對待代碼。
如今在倉庫之中存在有 Demo.js 文件,可是假設這個文件今後以後再也不使用了呢?只有一個解決方案:刪除。可是 在 GIT 裏面對於刪除文件這一功能嚴格來說也屬於一個修改操做。
從磁盤上刪除 Demo.js 文件
rm demo.js
當文件刪除以後下面查詢狀態;
這個時候文件是從當前工做區的磁盤中刪除了,同時也提示文件被刪除。
提交更新
git commit -a -m "Delete Demo.java File"
可是若是說發現文件被刪除錯誤了呢?則應該進行恢復。
恢復文件
git reset --hard bc8e842247b3d78
若是文件被刪除,則只可以利用版本控制的方式進行恢復。
以上主要對總結於李興華老師的課程,你們有興趣能夠去網易去上觀看
你的點贊是我持續分享好東西的動力,歡迎點贊!
一個笨笨的碼農,個人世界只能終身學習!
更多內容請關注公衆號《大遷世界》!