直接記錄快照,而非差異比較
git對待資料更像是乙個快照流,每次你提交更新或者在git中儲存狀態時,他會對全部檔案建立乙個快照並儲存索引,對於沒有改變的檔案,git不會再次儲存,而是保留乙個連線,連線到之前儲存的檔案。
在上圖中,版本1建立了三個檔案,提交後,git建立了快照;緊接著修改了a和c檔案,再次提交,git重新建立快照,此時檔案a和c更改了檔案,git儲存為a1和c1,b檔案沒有更改,直接使用乙個連線指向1版本內的b檔案…
git保證資料的完整性
git中資料在儲存前都計算校驗和,然後用校驗和進行檔案引用,每個檔案在發生變化後,其計算的校驗和也會發生變化,並且git會給你體現出來,未發生變化的檔案,校驗和計算後不會改變,也就是說,你不可能在git不知情的情況下更改任何內容。git 用以計算校驗和的機制叫做 sha-1 雜湊(hash,雜湊),它基於 git 中檔案的內容或目錄結構計算出來,大概長這樣24b9da6552252987aa493b52f8696cd6d3b00373
,就是我們每次commit後對應的提交版本標識。it 資料庫中儲存的資訊都是以檔案內容的雜湊值來索引,而不是檔名。
正常合併
場景1master分支拉出hotfix解決線上bug,然後合併回master
上圖所示,我們需要將c4版本合併到c2,此時的c4其實是c2的下游,即差異僅僅只有c4內更改的內容,執行合併操作
$ git checkout master
$ git merge hotfix
updating f42c576..3a0874c
fast-forward
index.html | 2 ++
1 file changed, 2 insertions(+)
在日誌內我們看到了fast-forward
,這是因為c4是c2的直接下游,git對於這種分支合併,只需要將指標向前移動。
場景2實際場景中,分支並行很常見,master作為穩定分支存在,線上緊急bug我們會拉出hotfix,同時我們也可能會有新的迭代分支正在開發。
繼續場景1後的操作,hotfix與master分支合併後master進入快照c4,現在迭代分支開發測試完成,準備上線。此時的迭代分支的上游還是c2,但實際master已經到了c4,git會如何處理呢?
git會將兩個分支最末端的快照(c4和c5)與他們共同的祖先(c2),做乙個簡單的三方合併,並且在合併之後,git會建立乙個新的快照,並且自動建立乙個新的提交指向它。所有我們工作專案中,一般的分支合併後,只需要執行push
操作推到遠端即可,不需要執行add``commit
操作。git 會自行決定選取哪乙個提交作為最優的共同祖先。
遇到衝突時合併
開發過程中多個分支並行,難免會對同一檔案的同一處進行變動,此時,git無法自動合併他們,在合併時就產生了衝突。此時git只做了簡單合併,沒有建立合併提交,因為git需要你來解決衝突。所有的衝突檔案,git會給出未合併標識,在檔案內加入標準衝突解決標記,如下:
<<<<<<< head:index.html
contact : [email protected]
*****==
please contact us at [email protected]
>>>>>>> iss53:index.html
<<<<<<< , *****== , 和 >>>>>>>
為衝突標記,*****==
上面是待接收合併的分支,下面是需要合併的分支。為了解決衝突,你需要在*****==
的上下兩部分選擇保留一處,或手動保留兩處(複製貼上或刪除衝突標記行),衝突解決後要保證刪除所有衝突標記行。
對每個檔案使用git add
命令來將其標記為衝突已解決。 一旦暫存這些原本有衝突的檔案,git 就會將它們標記為衝突已解決。使用圖形化工具會更加清晰的解決這一問題。
標記解決後就可以提交,建立新的快照了。
三維動畫的這些應用優勢你得知道
作為動畫行業燃起的新星,三維動畫憑藉其精確性 真實性和無限的可操作性,受到了外界的許多喜愛,並被廣泛應用於醫學 教育 軍事 娛樂等諸多領域。三維動畫製作在藝術和技術方面有著很深的關聯,在製作過程中,一方面是要在技術上充分展示廣告創意的要求,另一方面還要在畫面色調 構圖 明暗 鏡頭設計組接 節奏把握等...
C C 這些知識點,你都知道嗎?
生成 只對你改動過的檔案重新生成沒有改動過的檔案不會重新生成 重新生成 對所有的檔案都重新生成。當你只改動某些.cpp之類的檔案的時候可以用生成省了編譯沒有改動的那些些檔案的時間 但是改動了某些.h之類的檔案最好用重新生成,因為有可能能有些檔案包含.件也需要重新編譯。除錯 就是先生成解決方案再執行的...
機器學習,你首先得知道這十個知識點
1.機器學習意味著從資料中學習,而ai呢是乙個比較炫酷時髦的詞。機器學習基於這樣的假設 我們可以通過將正確的資料放到正確的演算法中去訓練解決一系列複雜的問題。當你需要融資或者發布產品的時候可以毫不猶豫的稱之為人工智慧 ai 但是你心裡需要明白現在ai是乙個幾乎可以代表一切時髦用詞。2.機器學習包括資...