参考:https://zlargon.gitbooks.io/git-tutorial/content/branch/commit_tree.html
必要的引用:
在 Git 的世界裡,我們可以把每個 patch 都看成是一個小節點
這些 patch 一個一個的串連起來,最後組成了 Commit Tree
不論我們在哪一個節點上面,都可以藉由 parent 一路往回走,最終都會回到 root
root 也就是我們的 first commit
因此每一條從 patch 回到 root 的路徑,其實都是一個的分支
每個 commit id 都是獨一無二的,絕對不會重複,因為每一條路徑都是唯一的
每個 commit id 都可以視為是一個版本分支
本地分支,远程分支与跟踪分支
patch用来记录文件的差异,被提交的patch叫做commit,想象有一颗commit tree,本地和远程共同维护这棵树; 树上的分支被本地和远程分别维护;
LJBJ@PLPSC:~/x11r69/gittest/xvfbzos [0]$git branch -avv
* dev e34d748 [origin/dev] set the .gitattributes for *.sh
master 6be496a [origin/master] init the xvfb project
remotes/origin/HEAD -> origin/master
remotes/origin/dev e34d748 set the .gitattributes for *.sh
remotes/origin/master 6be496a init the xvfb project
- dev 是本地用户维护的一条分支, 这条分支在没有push到远程前仅仅存在在本地数据库,但是会出现在commit tree中
- origin/dev 是远程服务器维护的一条分支, 它与本地的dev 很可能不是同一条分支。
- remotes/origin/dev 代表远程库 origin中的dev分支的最近一次fecth时的状态。 每次fetch会自动移动origin/dev在commit tree中的位置;