git 分支复制_Git基础知识(五)
Git基礎知識(五)
分支
都說Git的分支是它的必殺技特性,由于沒有接觸過太多的版本管理工具,就使用過的SVN來說,兩者真的差別巨大。SVN創建一個分支,需要將內容復制一遍!這個時間真的是非常的漫長,而Git只需要幾秒鐘。所以Git鼓勵在工作流中頻繁的使用分支和合并。
Git保存數據的方式
Git保存的不是文件的變化或者差異,而是不同時刻的文件快照。
Git每次進行提交操作的時候,會保存一個提交對象:這個提交對象包含了一個指向暫存內容快照的指針,并且這個對象還包含了作者的姓名,郵箱,提交信息,指向它的父對象的指針。
- 首次提交產生的提交對象沒有父對象
- 普通提交操作產生的提交對象有一個父對象
- 多個分支合并產生的提交對象有多個父對象
舉一個例子:
在一個空的文件夾中創建Git倉庫,新建三個文件并完成提交。
git add README test.rb LICENSE git commit -m 'The initial commit of my project'例子
首先先來查看一下當前的狀態
然后進入cd .git/objects/進到git存放對象的地方
查看當前狀態
使用ls -al可以看到這些個東西都是文件夾「d開頭」
查看具體文件信息
感興趣可以了解更多Linux文件屬性的知識:
Linux文件
剛才通過git log看到的哈希值為:e011573e4a35dda973b7cdadd8ef5954cfa8314f,所以進入e0這個文件夾,發現
e0文件夾內容:11573e4a35dda973b7cdadd8ef5954cfa8314f組合:e011573e4a35dda973b7cdadd8ef5954cfa8314f進入e0
所以這個對象就是提交對象。
查看Git的對象
由于這個提交也就是當前位置,所以可以直接使用拿到這一段內容
$ cat .git/HEADref: refs/heads/master$ cat .git/refs/heads/mastere011573e4a35dda973b7cdadd8ef5954cfa8314fimage-20190404195709051
這些文件的內容其實是壓縮的數據外加一個標注類型和長度的頭.
類型可以是
- 塊(blob)
- 樹(tree)
- 提交(commit)
- 標簽(tag)
使用git cat-file -t 可以看到它的類型
查看類型
tree
blob
使用git cat-file commit 可以看到提交信息
提交信息
使用git ls-tree 可以看到樹的信息,我們在這棵樹里面看到了我們剛新建的三個文件
樹的信息
使用git cat-file blob 可以看到文件的內容,不過可惜我這次的提交是空文件。
我對文件進行修改之后再進行了一次提交,然后再查看blob的時候可以看到和我新增的修改一樣
文件內容
首次提交對象及其樹結構
在修改之后,指針就會指向新的提交
提交后指向
創建分支
我們要創建一個分支,就相當于要創建一個可以移動的新指針。
使用的是git branch
創建分支
雖然我們創建了一個分支,但其實我們還是在master上,我們當前的位置其實是由HEAD這個特殊的指針決定的。
切換分支
$ git checkout testing切換分支
我們可以在這個分支上進行后續的提交
分支上新增一個提交
假設我們回到master分支上進行一個提交
新建文件
我們就可以發現兩個分支往不同的方向走去了
使用git log --oneline --decorate --graph --all ,它會輸出你的提交歷史、各個分支的指向以及項目的分支分叉情況。
也可以用git log --graph --all查看分支圖的詳細信息
分支圖詳細信息
不加上--all的話只會顯示當前所在分支的內容
當前分支的內容
以上就學會了Git基礎的數據存放方式,分支的創建,當前狀態的查看。
歡迎關注我的公眾號:zx94_11
總結
以上是生活随笔為你收集整理的git 分支复制_Git基础知识(五)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unity 知道2点计算线段选择角度_影
- 下一篇: 用python写名字代码_用python