Git-隨筆

Git 中的對象git

  commit服務器

    1.本次提交的 committerfetch

    2.本次提交的註釋 commentspa

    3.0/1/N 個祖先(零個或一個或多個指向該提交對象的父對象指針)3d

    4.指向暫存內容快照的指針 (若是恢復到某個提交, 則把分支指針指向這個 commit 對象, 把此快照恢復到工做區便可)指針

    5.指向 tree 的指針對象

  tree(目錄樹內容及其中各個文件對應 blob 對象索引)blog

    1.目錄樹索引

    2.每一個文件的SHA1值rem

    3.每一個文件的大小等

    4.每一個文件對應的 blob 對象索引

  blob(文件內容對象)

    1.文件內容對象

  tag

    1.標籤

對象關係圖

 

提交對象 commit 指向一個快照

 

分支指向提交對象 commit, 切換分支即改變分支指向的 commit對象, 能夠恢復 commit 指向的快照的內容到工做區

 

建立分支

 

切換當前分支

 

當前分支產生提交

 

清理現場(提交本分支中的信息), 恢復到原沒有修改的分支

 

原有分支產生提交

 

新建分支: 會建立一個分支, 指向當前分支所指向的提交, 即兩個分支指向同一個提交

切換分支: Git 會把工做目錄的內容恢復爲檢出某分支時它所指向的那個提交對象的快照, 若是暫存區或者工做目錄裏, 有未提交的修改, 會和即將檢出的分支產生衝突從而阻止 Git 爲你切換分支, 因此切換分支時最好保持一個清潔的工做區域, 能夠使用 stashing 或者 commit amending

合併分支:

  1.能夠 Fast forward, 向前移動指針, 兩個分支再次指向同一個提交, 不會產生新的提交

  2.有分叉, 找出三方(兩個分支和共同祖先)最佳的同源合併點, 生成一個新的快照, 並自動建立一個指向此快照的提交對象, 會產生新的提交

找出三方節點

合併內容, 併產生一個新的提交指向新的快照

若此時有衝突, Git 會合並, 但不提交 , 等手工解決衝突(一旦 add 就至關於已解決)後再手動完成此次合併提交, 提交後也會如上圖

 

 遠程分支

  git branch -r 查看全部遠程分支

  git branch -a 查看本地和遠程的全部分支

  git remote show [originname] 查看遠程與本地分支關係

  只要你不和服務器通信, 你的 origin/bname 指針就會保持原位不會移動, 當 fetch 的時候會移動, 此時執行 git merge [遠程名]/[遠程分支名] 會自動合併到本地分支

  Git 向遠程服務器 PUSH 時, 若是遠程服務器沒有此分支, 則會建立此分支

  追蹤遠程分支的幾方法:

    1.git checkout -b [本地分支名] [遠程名]/[遠程分支名]

    2.git push -u [遠程名] [本地分支名]:[遠程分支名] #第一次PUSH的時候會自動跟蹤

    3.git branch --set-upstream [本地分支名] [遠程名]/[遠程分支名]

    4.修改配置文件

      [branch "sns"]

             remote = origin              merge = refs/heads/sns

相關文章
相關標籤/搜索