首页
/
每日頭條
/
科技
/
怎麼熟練使用git進行版本控制
怎麼熟練使用git進行版本控制
更新时间:2025-06-22 06:39:34

  怎麼熟練使用git進行版本控制(入門教程之版本控制)(1)

  git commit

  版本控制 我們知道 git 是分布式版本控制系統,所以稱被控制對象是版本本身沒錯,但是從git 命令中發現,并沒有版本這個名詞,有的隻是commit,所以前幾節我一直稱其為提交.

  為了避免後續教程引發歧義,特意說明,無論是版本也好,提交也罷,都是中文翻譯而已,不必太過較真,直接原汁原味稱commit也可以啊!

  假設你已掌握暫存區的相關概念,簡單來說,暫存區就是更改文件的緩存集合,等待一次性全部提交到版本庫,正因如此,方便我們批量操作相關性文件,打包提交到版本庫,這正是暫存區的獨特魅力.

  我們反複在說 git 是分布式版本控制系統,分布式的概念已經粗略講過多次了,下面我們講一下版本控制,談談 git 的版本控制和其他系統的版本控制有什麼不同,為什麼 git 這麼優秀,如此流行?

  git 跟蹤并管理的是更改,而非文件本身.正如linux 一切皆文件,java 一切皆對象一樣,git 一切皆更改.新增文件是一個更改,新增文件内容是一個更改,修改文件内容是一個更改,删除文件内容也是一個更改,換言之,git 管理的正是這一個個的更改,并不是文件本身.

  下面我們用事實說話,證明 git 管理的是更改而不是文件本身:

  第一步,追加 git tracks changes 到 test.txt 文件

  # 查看 test.txt 文件内容 $ cat test.txt git test git init git diff understand how git control version how git work # 追加 git tracks changes 文件内容到 test.txt 文件 $ echo "git tracks changes" test.txt # 再次查看 test.txt 文件内容 $ cat test.txt git test git init git diff understand how git control version how git work git tracks changes $

  第二步,添加test.txt 文件到暫存區并查看文件狀态

  $ git add test.txt $ git status On branch master Changes to be committed: (use "git reset HEAD ..." to unstage) modified: test.txt Untracked files: (use "git add ..." to include in what will be committed) .DS_Store $

  對于上述内容應該不必再解釋了吧,無外乎說test.txt 文件已修改(modified),即将被提交(to be committed).

  但是,此時偏偏不提交,繼續修改 test.txt 文件:(這種情況實際工作中也有可能出現,比如你正在研發某功能,本以為已經開發完畢,滿心歡喜添加到暫存區,然後意外發現一個小bug,分分鐘就修複了,時間間隔很短以至于你根本不記得還需要再次添加到暫存區.)

  第三步,繼續修改文件内容,忘記再次添加到暫存區

  # 編輯 test.txt 文件,将 git tracks changes 更改為 git tracks changes of files vim test.txt # 查看 test.txt 文件内容 $ cat test.txt git test git init git diff understand how git control version how git work git tracks changes of files $

  第四步,正常提交暫存區的全部更改到版本庫

  $ git commit -m "git tracks changes" [master 2daa74a] git tracks changes 1 file changed, 1 insertion( )

  此次提交後,我們再看一下文件狀态:

  $ git status On branch master Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: test.txt Untracked files: (use "git add ..." to include in what will be committed) .DS_Store no changes added to commit (use "git add" and/or "git commit -a") $

  發現有什麼不同嗎?以往提交後再次查看文件狀态,工作區都是幹淨的,這次居然提示我們 test.txt 文件已經修改但未添加到暫存區?!

  等一下,我們先回憶一下我們的操作流程:

  第一次修改(git tracks changes) - git add - 第二次修改(git tracks changes of files) - git commit

  這樣就很好理解了,git 管理的是更改而不是文件本身,如果是文件本身的話,應該将文件的内容全部提交才對,所以管理的是更改.

  第一次修改過後使用 git add 命令将工作區的第一次修改内容放到暫存區準備提交,但是此時工作區發生了第二次修改,注意,這次修改并沒有放到暫存區,所以下一步的git commit 命令提交的暫存區内容中自然也就沒有第二次修改的内容了!所以git commit 完畢後運行git status命令才會發現此時工作區和暫存區還存在版本差異,即此時工作區不是幹淨的!

  這一次的實驗很好理解,工作區的修改需要主動告訴暫存區,暫存區的全部更改再提交到版本庫.所以版本庫的提交取決于暫存區,而暫存區又取決工作區是否主動将更改添加進去了嗎!

  理論再多不如親身體驗,讓我們直接比較一下工作區和版本庫的差異吧!

  # 比較 test.txt 文件在工作區和版本庫的差異 $ git diff HEAD -- test.txt diff --git a/test.txt b/test.txt index d31bdd2..56c76b7 100644 --- a/test.txt b/test.txt @@ -3,4 3,4 @@ git init git diff understand how git control version how git work -git tracks changes git tracks changes of files $

  由此可見,工作區比版本庫多了git tracks changes of files,少了git tracks changes,所以說第二次修改内容 git tracks changes of files 并沒有被提交.

  現在我們再解釋一下-git tracks changes 和 git tracks changes of files 的問題:

  首先查看工作區 test.txt 文件内容

  $ cat test.txt git test git init git diff understand how git control version how git work git tracks changes of files $

  根據上述分析,我們知道第一次的修改git tracks changes 已被提交到版本庫,第二次的修改git tracks changes of files 沒有被提交而是繼續留在工作區.

  因此,可以推斷出目前版本庫的文件應該是這樣的:

  git test git init git diff understand how git control version how git work git tracks changes

  既然如何,工作區和版本庫相比豈不剛好是少了一個git tracks changes,多了git tracks changes of files,其餘文件内容完全相同!

  透過現象看本質,已經分析了現象也解釋了産生現象的原因,是時候分析一下本質了.

  抛出問題:因為git tracks changes of fiels 和 git tracks changes 被視為不同的更改,所以才會造成上述現象.如果git tracks changes of fiels 被認為是git tracks changes of fiels 兩者疊加産生的更改,還會産生上述現象嗎?

  答案是否定的,如果兩個更改可以疊加的話,按照版本控制的思路,第二次的修改即便沒有提交也隻是 of fiels 沒有加入到版本庫而已,如此一來,工作區和版本庫的差異将不再是少了一個git tracks changes,多了git tracks changes of files,而僅僅是多了of files!

  由此可見,git 版本控制系統其實是全量更新的思維模式,并不是差量更新模式.

  小結

  工作區的更改需要git add 添加到暫存區,git commit 将暫存區的全部更改提交到版本庫.工作區,暫存區,版本庫三者既相關獨立又密切關聯,三者是傳遞性依賴的關系.git 版本控制的是文件的更改,而不是文件本身,是全量更新模式,而不是差量更新模式.

  ,

Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
安卓幾大系統問題
安卓幾大系統問題
安卓幾大系統問題?認真算來,這是安卓系統發展的第15個年頭,首款搭載Android系統的智能手機——HTCG1的出現,對安卓系統的發展起到了裡程碑的意義時至今日,它已經發展成為全球安裝量最多的移動操作系統,谷歌在I/O開發者大會上也提到An...
2025-06-22
關于花呗影響征信的問題
關于花呗影響征信的問題
各位花呗網友,今天向大家正式彙報一下花呗接入征信系統的工作進展。請放心,正常使用花呗,保持良好使用、還款習慣,不會對征信記錄造成負面影響。也想提醒大家,謹防以征信為名的各類詐騙。花呗不會以征信為由電話聯系您,更不會要求您付費或轉賬。任何聲稱...
2025-06-22
文件不能保存怎麼辦
文件不能保存怎麼辦
文件不能保存怎麼辦?原始文件打開後,先另存為符合現用版本的excel文件簿格式,編輯後可否正常保存,現在小編就來說說關于文件不能保存怎麼辦?下面内容希望能幫助到你,我們來一起看看吧!文件不能保存怎麼辦原始文件打開後,先另存為符合現用版本的e...
2025-06-22
我還記得曾經擁有
我還記得曾經擁有
看着現在滿大街的iPhone、小米、三星,你還記得那個曾經輝煌的諾基亞嗎?沒錯了,今天小編就要為大家帶來一個消息!2016年,我們所熟悉的"機皇"——諾基亞就要強勢回歸啦!那麼問題就來了,你還記得以前所用過的手機嗎?小編列了一下,這些曾經最...
2025-06-22
使用辦公軟件小技巧
使用辦公軟件小技巧
使用辦公軟件小技巧?提高撤銷步數Office默認的撤銷步數隻有20步、有時候我們撤銷很多次的時候,20步是明顯不夠用的,我們可以增加撤銷步數,最多撤銷步驟為150步,我來為大家講解一下關于使用辦公軟件小技巧?跟着小編一起來看一看吧!使用辦公...
2025-06-22
Copyright 2023-2025 - www.tftnews.com All Rights Reserved