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

相关文章
相关标签/搜索