【转载】GIT教程 猴子都能懂得git入门
完整官方承認教程
猴子都能懂得git入門
https://backlog.com/git-tutorial/cn/
?
?
GIT
入門
GIT與其他的區別
git是一個開源的分布式版本控制系統,用以快速高效的處理項目從很小到非常大的項目的版本控制的所有事情。
直接記錄快照,而非差異比較
????Git 和其它版本控制系統(包括 Subversion 和近似工具)的主要差別在于 Git 對待數據的方法。 概念上來區分,其它大部分系統以文件變更列表的方式存儲信息。 這類系統(CVS、Subversion、Perforce、Bazaar 等等)將它們保存的信息看作是一組基本文件和每個文件隨時間逐步累積的差異。存儲每個文件與初始版本的差異,如下圖所示 -?
? ?
????Git 不按照以上方式對待或保存數據。 反之,Git 更像是把數據看作是對小型文件系統的一組快照。 每次你提交更新,或在 Git 中保存項目狀態時,它主要對當時的全部文件制作一個快照并保存這個快照的索引。 為了高效,如果文件沒有修改,Git 不再重新存儲該文件,而是只保留一個鏈接指向之前存儲的文件。 Git 對待數據更像是一個 快照流。如下圖所示 -?
?
????這是 Git 與幾乎所有其它版本控制系統的重要區別。 因此 Git 重新考慮了以前每一代版本控制系統延續下來的諸多方面。 Git 更像是一個小型的文件系統,提供了許多以此為基礎構建的超強工具,而不只是一個簡單的 VCS。 稍后我們在 Git 分支討論 Git 分支管理時,將探究這種方式對待數據所能獲得的益處。
?
修改記錄的提交
1 系統按時間順序記錄
2 系統通過計算得到40位英文+數字命名用來指定提交文件。
3執行提交時,系統會要求輸入提交信息。請務必輸入提交信息,因為在空白的狀態下執行提交會失敗的
?
共享遠程數據庫
克隆(clone)
進行克隆(Clone)操作就可以復制遠程數據庫。
??????
拉取(Pull)
進行拉取(Pull) 操作就可以把遠程數據庫的內容更新到本地數據
?
推送(push)
???????? 需要在Git執行推送(Push)操作。執行Push之后,本地的修改記錄會被上傳到遠程數據庫。所以遠程數據庫的修改記錄就會和本地數據庫的修改記錄保持同步。
?
工作樹和索引
在數據庫和工作樹之間有索引,索引是為了向數據庫提交作準備的區域
?
?
?
?
?
?
?
?
?
?
?
索引區域是用于單獨提交文件
不加入索引區域無法提交?????
?
?
?
?
高級
什么是分支
分支是為了將修改記錄的整體流程分叉保存。分叉后的分支不受其他分支的影響,所以在同一個數據庫里可以同時進行多個修改。
分叉的分支可以合并。
為了不受其他開發人員的影響,您可以在主分支上建立自己專用的分支。完成工作后,將自己分支上的修改合并到主分支。因為每一次提交的歷史記錄都會被保存,所以當發生問題時,定位和修改造成問題的提交就容易多了。
master分支
在數據庫進行最初的提交后, Git會創建一個名為master的分支。因此之后的提交,在切換分支之前都會添加到master分支里。
?
分支的運用
???????? ???????? 分支分為 Merge分支 和 Topic分支
?
?
?
?
?
Merge分支
???????? 用于隨時發布版本的分支,一般使用master分支當作Merge分支使用,為了版本穩定merge分支不進行修改,而是創建Topic分支進行修改。Merge分支只用于Merge發布穩定版本。
Topic分支
Topic分支是為了開發新功能或修復Bug等任務而建立的分支。若要同時進行多個的任務,請創建多個的Topic分支。
Topic分支是從穩定的Merge分支創建的。完成作業后,要把Topic分支合并回Merge分支
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
分支的切換
若要切換作業的分支,就要進行checkout操作。進行checkout時,git會從工作樹還原向目標分支提交的修改內容。checkout之后的提交記錄將被追加到目標分支。
?
Stash(貯藏)
還未提交的修改內容以及新添加的文件,留在索引區域或工作樹的情況下切換到其他的分支時,修改內容會從原來的分支移動到目標分支。
但是如果在checkout的目標分支中相同的文件也有修改,checkout會失敗的。這時要么先提交修改內容,要么用stash暫時保存修改內容后再checkout。
stash是臨時保存文件修改內容的區域。stash可以暫時保存工作樹和索引里還沒提交的修改內容,您可以事后再取出暫存的修改,應用到原先的分支或其他的分支上。
?
HEAD
HEAD指向的是現在使用中的分支的最后一次更新。通常默認指向master分支的最后一次更新。通過移動HEAD,就可以變更使用的分支。
?
解決沖突
可識別沖突內容
無法識別沖突內容
分支合并
完成作業后的topic分支,最后要合并回merge分支。合并分支有2種方法:使用merge或rebase。使用這2種方法,合并后分支的歷史記錄會有很大的差別。
?
Merge
快速合并:是merge沒有修改沒有沖突 直接合并到當前分支
?
合并前
?
合并后
?
?
?
?
?
融合合并:master分支如果分叉后修改,要把master分支的修改內容和bugfix分支的修改內容匯合起來。
?
融合前
融合后
?
執行合并時,如果設定了non fast-forward選項,即使在能夠fast-forward合并的情況下也會生成新的提交并合并。
Rebase(衍合)
rebase方法進行分支合并,會出現下圖所顯示的歷史記錄。現在我們來簡單地講解一下合并的流程吧。
?
合并前
合并后
首先,rebase bugfix分支到master分支, bugfix分支的歷史記錄會添加在master分支的后面。歷史記錄成一條線,相當整潔。
Rebase需要解決沖突
rebase之后head的位置不變,需要合并master分支head才會移到bugfix這里
?
?
?
兩種方式區別
?
- merge
保持修改內容的歷史記錄,但是歷史記錄會很復雜。 - rebase
歷史記錄簡單,是在原有提交的基礎上將差異內容反映進去。
因此,可能導致原本的提交內容無法正常運行。
?
topic分支和merge分支的運用實例
B版本已經完畢還沒打包,需要保存當前狀態,開發新功能開新分支(藍O)開發新功能
開發新功能的時候發現B版本里面有BUG需要修改,在B上面創建新的分支(紫X)
B版本準備打包將修改BUG的X 版本與B版本合并生成C版本
開發新版本是發現之前的BUG影響了新功能需要C版本,將新版本REBASE后繼續開發,C版本可繼續打包。
Rebase后繼續開發。
?
完整官方承認教程
猴子都能懂得git入門
https://backlog.com/git-tutorial/cn/
總結
以上是生活随笔為你收集整理的【转载】GIT教程 猴子都能懂得git入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(3256):react中添加t
- 下一篇: plsql 注册码