摘要:緩存區(qū)上的操作使用將代碼添加到暫存區(qū)之中本次操作使用了一個,那么就表示全部加入。我的王大冶但是這個時候此文件并沒有使用進(jìn)行加入?,F(xiàn)在假設(shè)修改了我的王大冶就是要改代碼,不干走人了,老子不吃你這套但是只要是文件一修改,那么就可以立即跟蹤到狀態(tài)。
后續(xù)會持續(xù)更新
1.設(shè)置開發(fā)者的個人信息在任何一個系統(tǒng)之中都會存在有多個開發(fā)者(多人協(xié)作開發(fā)),而在 GIT 之中,對于每一個開發(fā)者(電腦),都需要 開發(fā)者自己定義自己的名字與 email 地址,以便進(jìn)行方便的聯(lián)系,此時需要配置全局信息。
配置全局用戶名及 email 地址
git config --global user.name "wzy" git config --global user.email "449245884@.com"
設(shè)置完成之后如果成功不會任何提示信息,可以通過如下命令查看全局配置信息:
git config -l
可以發(fā)現(xiàn)除了之前配置的用戶名和 email 地址之外,還存在有其它的內(nèi)容。
2.創(chuàng)建倉庫版本庫 = 倉庫;
在此倉庫中的所有內(nèi)容都會被git 管理;
在倉庫中的所有文件修改、刪除、更新都會被紀(jì)錄下來;
可以隨時恢復(fù)到某一特定狀態(tài);
初始化倉庫: git init
如果要開發(fā)項目,那么首先必須有一個倉庫(可以簡單的理解為是一個磁盤上的文件夾)。
mkdir myrpo
此時 mypro 文件夾是一個空的文件夾,沒有任何的內(nèi)容,只是一個純粹的目錄。
將 mypro 文件夾定義為倉庫, 進(jìn)入文件夾, 初始化倉庫(將此目錄變?yōu)榭梢员籊IT管理的倉庫)
而且此時會提示,在 mypro 文件夾之中創(chuàng)建了一個“.git”的目錄,這個目錄就是倉庫信息,死都不能改。
3.添加文件現(xiàn)在倉庫創(chuàng)建完成之后,下面就要進(jìn)行文件的基本管理了。首先在編寫之前有一個說明:所有的文件一定要使用 UTF-8 編碼,否則有可能會出現(xiàn)問題。
建立一個 Hello.js文件
btn.onclick = function() { console.log("每一次新增!"); }
察看當(dāng)前倉庫的狀態(tài)
git status
在 "git status" 狀態(tài)查詢操作上可以發(fā)展有如下的幾個提示信息:
現(xiàn)在開發(fā)的屬于主分支:On branch master
初始化倉庫的提交:No commits yet
未標(biāo)記的文件:Untracked files:
隨后給出的一些操作的命令:(use "git add
未標(biāo)記文件的列表,現(xiàn)在只有一個: hello.js
添加文件到倉庫
增加文件到暫存區(qū): git add 文件名稱
提交文件: git commit -m "注釋"
將文件加入到暫存庫之中
git add hello.js
繼續(xù)查詢狀態(tài)
此時有了一個最重要的信息:
現(xiàn)在的文件并沒有真正的提交到主分支上(主分支就是我們真正要運行的程序的所有的代碼)。
注意:所有修改的代碼都會被 GIT 自動的監(jiān)測到,所有的代碼在使用 commit 提交之前一定要先使用 add 增加進(jìn)來,否則不會有任何的提交。
如果現(xiàn)在不希望分兩步進(jìn)行則可以在運行以下程序時增加一個“-a”的參數(shù),表示先 add 而后 commit(git commit -a -m "注釋")。
提交文件信息
git commit -m "New Js file - Hello.js Create"
在進(jìn)行每次更新提交的時候一般都會為其增加上一些注釋數(shù)據(jù),所以使用“-m”參數(shù)來進(jìn)行注釋的編寫。
此時這個“Hello.js”文件就被真正的提交到了主分支上,也就是意味著程序發(fā)布成功了。
查詢狀態(tài)
此時的狀態(tài)會提示:沒有任何的信息需要被提交,工作目錄很干凈。而在 git 工具下用戶每一次進(jìn)行的提交實際上都 會被日志紀(jì)錄下來。
察看針對于“hello.js”文件的日志信息
首先會出現(xiàn)一個提交的信息號 “2e3e7018a965673a4154c84105b5d1a23f13167a”,可以理解為是每一次提交的 id 號。如果有多次提交,那么這個日志信息也會越來越多。
4.修改倉庫文件上面代碼已經(jīng)可以成功的進(jìn)行了發(fā)布,但是代碼出現(xiàn)就是為了修改。于是現(xiàn)在來觀察對于 git 工具如何去控制修改。
修改 hello.js 文件
btn.onclick = function() { console.log("每一次新增!"); console.log("第一次修改·!"); }
此時發(fā)現(xiàn)文件增加了一行的修改。
查詢一下當(dāng)前的倉庫狀態(tài)
現(xiàn)在 GIT 直接提示用戶,文件沒有保存到暫存區(qū)之中,而且提示有:要么你選擇文件暫存,要么你直接進(jìn)行文件的 恢復(fù),同時給出了已經(jīng)修改的文件“hello.js”。
察看文件的前后區(qū)別
git diff hello.js
現(xiàn)在可以發(fā)現(xiàn)所有增加的內(nèi)容都會使用“+”表示,而被刪除的信息都會使用“-”表示。
將修改后的代碼加入到暫存區(qū)后進(jìn)行提交
git commit -a -m "Update hello.js file. Add one lines"
察看修改日志
git log hello.js
通過以上的代碼演示,現(xiàn)在可以清楚的發(fā)現(xiàn),只要是修改的操作 GIT 都可以進(jìn)行及時的跟蹤。
5. 工作區(qū)與暫存區(qū) 工作區(qū)與倉庫工作區(qū): 就是當(dāng)前電腦的操作目錄(包含 .git);
倉庫:工作區(qū)有一個隱藏目錄 .git,這個不算工作區(qū),而是 git 的倉庫,git 版本庫里保存了很多東西,其中最重要的就是稱為 stage 的暫存區(qū),還有 git 為用戶自動創(chuàng)建的主程序分支 master ,以及指向 master 的 head 指針。
概念解釋:
在之前所編寫的“hello.js”文件保存在用戶工作區(qū)之中;
當(dāng)使用 add 命令之后,實際上就是將所有的文件提交到暫存區(qū)(state) 之中;
使用 commit 命令之后,才表示真正的發(fā)出了修改,而真正可以運行的程序都保存在 master 分支上;
6. 工作區(qū)上的操作修改 Hello.js
btn.onclick = function() { console.log("第二次修改·!"); }
增加一個 demo.js 文件
btn2.onclick = function() { console.log("demo click"); }
現(xiàn)在的工作區(qū)中的代碼已經(jīng)發(fā)生了變化。
用 status 跟蹤
現(xiàn)在會提示有以下信息:
修改了 Hello.js 文件,而這個文件給出了處理方式;
出現(xiàn)了一個未標(biāo)記的文件(Demo.js),詢問用戶是否將其加入到暫存區(qū)之中。
7. 緩存區(qū)上的操作使用“git add”將代碼添加到暫存區(qū)之中
git add .
本次操作使用了一個“.”,那么就表示全部加入。修改之后再次觀察狀態(tài)。
觀察狀態(tài)
8. 提交修改數(shù)據(jù)保存在暫存區(qū)之后,下面就要進(jìn)行代碼的提交,將代碼提交到主分支上。
當(dāng)把暫存區(qū)的代碼提交到主分支上之后,會自動的清空暫存區(qū)之中的內(nèi)容。
提交修改代碼
git commit -m "add demo.js file"
那么此時再次查詢狀態(tài)。
那么會直接發(fā)現(xiàn)沒有任何的文件修改的提示。
9. 版本回退每當(dāng)用戶進(jìn)行代碼提交的時候都會自動的生成一個 commit id,而這個 commit id 就是進(jìn)行代碼回退的主要操作方式。
查詢當(dāng)前修改后的日志信息
git log --pretty=oneline
大家可以發(fā)現(xiàn)所有的 commit id 并不是順序的 1、2、3 編號,而是由系統(tǒng)生成一個十六進(jìn)制數(shù)據(jù),這一概念就跟 Session ID 類似,由 GIT 自己控制,主要是為了防止版本號的沖突。
在 master 分之上會有一個 HEAD 指針存在,而這個指針默認(rèn)情況下永遠(yuǎn)指向最后一次提交的位置。
當(dāng)使用回退之后發(fā)現(xiàn) HEAD 指針出現(xiàn)了改變,如果回退一步,那么之前的操作不會被刪除,但是所有的代碼將回歸到指定位置的狀態(tài)。
**回退一步
git reset --hard HEAD~1
那么如果說現(xiàn)在還想恢復(fù)最新的狀態(tài)呢?那么就必須找到回退的 commit id。
找到所有的已經(jīng)刪除的信息 commitid
git reflog
恢復(fù)最后一次提交
git reset --hard cc54c4310.提示:文件修改問題
在有了暫存區(qū)和 master 主分支概念之后,就需要回避一個問題:只有保存在暫存區(qū)之中的內(nèi)容才可以被真正的修改, 而不是針對于文件。
編寫 hello.js 文件
btn.onclick = function() { console.log("我的小智"); }
以上是 =hello.js 文件的第一次修改。
將修改的文件增加到暫存區(qū)之中
git add.
此時并沒有提交,而后再次修改 hello.js 文件。
btn.onclick = function() { console.log("我的王大冶"); }
但是這個時候此文件并沒有使用 add 進(jìn)行加入。
進(jìn)行提交(提交的時候只提交暫存區(qū)的內(nèi)容)
git commit -m "change print"
可是這個時候只是提交了第一次修改,而第二次修改并沒有提交。
查詢狀態(tài)
進(jìn)行對比
git diff HEAD hello.js
HEAD 是指向最后一次提交的指針,現(xiàn)在的含義是將 HEAD 中的 Hello.java 文件與工作區(qū)的 Hello.java 文件進(jìn)行對比。
總結(jié):如果一個文件修改多次了,那么就需要執(zhí)行多次的 add 后才可以提交,否則在 add 前的修改是不會被提交的。11. 撤消修改
情況一:在未增加(git add) 與提交前(git commit) 用戶可以直接撤消對文件做出的修改操作。
撤消所做出的修改操作: git checkout -- 文件名
情況二:在已增加(git add)與未提交前(git commit) 用戶可以直接撤消對文件所做出的修改操作。
撤消暫存區(qū)的修改操作:git reset HEAD 文件名稱;
丟掉已經(jīng)修改的文件內(nèi)容: git checkout -- 文件名稱;
情況一:未增加(git add)&提交(git commit)如果在工作區(qū)之中的代碼并沒有增加到暫存區(qū)之中,那么如果要恢復(fù)到原始狀態(tài)是很容易的。
現(xiàn)在假設(shè)修改了 hello.js
btn.onclick = function() { console.log("我的王大冶"); } 就是要改代碼,不干走人了,老子不吃你這套
但是只要是文件一修改,那么 git 就可以立即跟蹤到狀態(tài)。
但是后來發(fā)現(xiàn),此種修改實在是不應(yīng)該進(jìn)行,如果進(jìn)行了,只能有一個結(jié)論:此人腦袋有問題。但是寫代碼的時候 可能不知道上一次修改狀態(tài)。
恢復(fù)
git checkout -- hello.js
執(zhí)行之后發(fā)現(xiàn) Hello.java 文件就恢復(fù)到了一個原始的狀態(tài)(上一次的提交狀態(tài))。
情況二:已增加( git add )& 未提交( git commit )現(xiàn)在假設(shè)要修改的文件已經(jīng)提交到了暫存區(qū)之中。
將 Hello.java 代碼提交到暫存區(qū)中
git add.
當(dāng)查詢狀態(tài)時:
在狀態(tài)查詢的時候已經(jīng)給出了用戶的提示,即:你可以根據(jù) HEAD 指針來恢復(fù)文件。
從暫存區(qū)之中退出
git reset HEAD hello.js
于是再次查詢狀態(tài)
相當(dāng)于現(xiàn)在已經(jīng)由暫存區(qū)中保存的內(nèi)容恢復(fù)到了工作區(qū),那么既然在工作區(qū)了,就可以直接恢復(fù)原始狀態(tài)。
恢復(fù)原始
git checkout -- hello.js
個人建議:養(yǎng)成良好的開發(fā)習(xí)慣,別像演示那樣這么對待代碼。12. 刪除文件
現(xiàn)在在倉庫之中存在有 Demo.js 文件,但是假設(shè)這個文件從此之后不再使用了呢?只有一個解決方案:刪除。但是 在 GIT 里面對于刪除文件這一功能嚴(yán)格來講也屬于一個修改操作。
從磁盤上刪除 Demo.js 文件
rm demo.js
當(dāng)文件刪除之后下面查詢狀態(tài);
這個時候文件是從當(dāng)前工作區(qū)的磁盤中刪除了,同時也提示文件被刪除。
提交更新
git commit -a -m "Delete Demo.java File"
但是如果說發(fā)現(xiàn)文件被刪除錯誤了呢?則應(yīng)該進(jìn)行恢復(fù)。
恢復(fù)文件
git reset --hard bc8e842247b3d78
如果文件被刪除,則只能夠利用版本控制的方式進(jìn)行恢復(fù)。
以上主要對總結(jié)于李興華老師的課程,大家有興趣可以去網(wǎng)易去上觀看
你的點贊是我持續(xù)分享好東西的動力,歡迎點贊!
一個笨笨的碼農(nóng),我的世界只能終身學(xué)習(xí)!
更多內(nèi)容請關(guān)注公眾號《大遷世界》!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/98468.html
摘要:詳解及實用指南之一本地操作詳解及實用指南之二遠(yuǎn)程操作詳解及實用指南之三分支管理創(chuàng)建標(biāo)簽標(biāo)簽可以簡單的理解為屬于分支定義的別名,分支本身都會進(jìn)行指針的配置分支都會指向某一個但是標(biāo)簽卻是一個固定的內(nèi)容,可以說,標(biāo)簽永遠(yuǎn)指向一個。 1. git 詳解及實用指南之一 (本地操作)2. git 詳解及實用指南之二 (遠(yuǎn)程操作)3. git 詳解及實用指南之三(分支管理) 1.創(chuàng)建標(biāo)簽 標(biāo)簽可以簡...
摘要:詳解及實用指南之一本地操作詳解及實用指南之二遠(yuǎn)程操作詳解及實用指南之三分支管理創(chuàng)建標(biāo)簽標(biāo)簽可以簡單的理解為屬于分支定義的別名,分支本身都會進(jìn)行指針的配置分支都會指向某一個但是標(biāo)簽卻是一個固定的內(nèi)容,可以說,標(biāo)簽永遠(yuǎn)指向一個。 1. git 詳解及實用指南之一 (本地操作)2. git 詳解及實用指南之二 (遠(yuǎn)程操作)3. git 詳解及實用指南之三(分支管理) 1.創(chuàng)建標(biāo)簽 標(biāo)簽可以簡...
摘要:繼上一篇詳解及實用指南之一本地操作今天說下,遠(yuǎn)程操作。但是遠(yuǎn)程的分支依然沒有發(fā)生改變。在本地磁盤上進(jìn)行倉庫的克隆操作不要在原來目錄下完成,而直接換一個新目錄,在實際開發(fā)之中最好的做法是所有的開發(fā)者直接克隆遠(yuǎn)程倉庫進(jìn)行操作。 繼上一篇 1. git 詳解及實用指南之一 (本地操作) 今天說下,git 遠(yuǎn)程操作。 1.生成 SSH key 這里是用 github 來做演示的,如果沒有 gi...
摘要:繼上一篇詳解及實用指南之一本地操作今天說下,遠(yuǎn)程操作。但是遠(yuǎn)程的分支依然沒有發(fā)生改變。在本地磁盤上進(jìn)行倉庫的克隆操作不要在原來目錄下完成,而直接換一個新目錄,在實際開發(fā)之中最好的做法是所有的開發(fā)者直接克隆遠(yuǎn)程倉庫進(jìn)行操作。 繼上一篇 1. git 詳解及實用指南之一 (本地操作) 今天說下,git 遠(yuǎn)程操作。 1.生成 SSH key 這里是用 github 來做演示的,如果沒有 gi...
摘要:緩存區(qū)上的操作使用將代碼添加到暫存區(qū)之中本次操作使用了一個,那么就表示全部加入。我的王大冶但是這個時候此文件并沒有使用進(jìn)行加入。現(xiàn)在假設(shè)修改了我的王大冶就是要改代碼,不干走人了,老子不吃你這套但是只要是文件一修改,那么就可以立即跟蹤到狀態(tài)。 后續(xù)會持續(xù)更新 1.設(shè)置開發(fā)者的個人信息 在任何一個系統(tǒng)之中都會存在有多個開發(fā)者(多人協(xié)作開發(fā)),而在 GIT 之中,對于每一個開發(fā)者(電腦),都...
閱讀 3672·2021-09-22 15:28
閱讀 1296·2021-09-03 10:35
閱讀 878·2021-09-02 15:21
閱讀 3474·2019-08-30 15:53
閱讀 3496·2019-08-29 17:25
閱讀 569·2019-08-29 13:22
閱讀 1555·2019-08-28 18:15
閱讀 2287·2019-08-26 13:57