Git 是一款分布式版本控制系統,主要用于高效管理代碼版本和團隊協作開發。它能精確記錄每次代碼修改,支持版本回溯和分支管理,讓開發者可以并行工作而互不干擾。通過本地提交和遠程倉庫同步,Git 既保障了代碼安全,又實現了多人協作開發,同時支持離線工作,是現代軟件開發中不可或缺的工具。
比如下面的場景:在學校中,你的老師要求你寫一個的文檔。你奮筆疾書地寫下了第一版并且交給了老師,但老師不滿意,認為還有改進的地方,于是你在這個第一版的word文件上直接進行覆蓋式的修改,得到的第二版交給了老師,老師仍然覺得不滿意,于是第三版,第四版......當你把最終版交給老師之后,老師來一句“我覺得還不如你的第一版,就要第一版吧!”。這時你崩潰了,因為你修改的時候是直接在原來版本的基礎上直接進行修改的,根本沒有保存以前的版本,拿不出來第一版。
這種情況就會讓人很難受,因為你基本沒有辦法恢復出第一版,所以就有了Git,來記錄每次的修改及版本迭代的一個管理系統。
1、認識工作區、暫存區、版本庫
比如我們在當前目錄下創建一個ReadMe文件。
?當前目錄下的.git就是版本庫,或者說真正的倉庫,ReadMe所在的位置就是工作區。
圖示為:
暫存區也被稱為索引,是版本庫的一部分。目前情況下,Git能否管理ReadMe文件?
答案是不能的。
? ? ? ? 在建立的倉庫的工作區中進行一次add,文件的修改信息(包括新增,修改,刪除)就會在保存在stage的暫存區中,再對該文件進行commit操作就會將文件信息提交到master分支,也就是本地倉庫,對應的還有個概念是遠程倉庫,遠程倉庫就是我們在Gitee中創建的倉庫,可以克隆到本地倉庫。????????
????????修改的工作區內容會寫入對象庫的一個新的git對象中。
2、添加文件
可一次提交一個文件,多個文件或所有文件。
git add ReadMe
git commit -m "描述"
git add file1 file2
git commit -m "描述"
git add .
git commit -m "描述"
一個文件:
多個文件:
查看git日志命令:
git log
git log --pretty=oneline
上面的兩個都可以,第二個顯示的更加簡潔:
3、修改文件
git追蹤管理的其實是修改,而不是文件。
使用git diff查看暫存區和工作區的差異,例如:在ReadMe中添加了hello git,使用git status就能查看到當前被修改的文件:
使用git diff 文件名:
git diff 文件名
該命令用來顯示暫存區和工作區文件的區別:
最下面的綠色字體就是新增的內容。這樣就能看到做了什么修改,可以大致檢查一下再提交,就會放心很多。
4、版本回退
git reset [--soft | --mixed | --hard] [HEAD]
使用git reset進行版本回退,要注意的是主要有三個地方的可能回退,工作區、暫存區、版本庫;工作區的內容修改后進行add才會保存到暫存區,經過commit后才會保存到版本庫。
--soft 只會回退版本庫的內容;
--mixed 會回退版本庫和暫存區的內容;也是git的默認選項;
--hard 會回退所有的內容,這個要慎用,因為工作區的也被回退,可能你寫了很多代碼,沒有保存時使用了這個,那么所有的內容都會被回退,這樣就會導致你所寫的代碼全部不在了。
HEAD選項表示回退到當前版本庫的版本,也就是回退到當前版本。?
git reflog
這個命令可以查看變更歷史,找到對應版本的對象ID,通過該ID可以回退到指定的版本,是 Git 本地數據恢復的關鍵工具。
5、撤銷修改
版本庫中的代碼經過git push 可以推送到遠程倉庫;遠程倉庫的代碼才是自己真正用的,所以要保證遠程倉庫的代碼正確性,就有了撤銷操作:目的就是不影響遠程倉庫的代碼。
6、刪除文件
刪除后再add和commit,也就是現在工作區中刪除,再在暫存區中刪除,最后在版本庫中刪除。
這兩個命令可以合并成一個命令,git rm [filename]
git rm [filename]
這個命令幫我們同時做了兩件事,首先在工作區中刪除,其次在暫存區中刪除,所以我們為了方便,一般會用這個命令進行刪除。