Pro Git学习笔记(三)

Git 分支

    与其他版本控制系统不同,Git保存的不是文件的差异,而是某一时刻文件的快照。Git在提交是会创建一个提交对象,这个提交对象里包含了指向暂存文件快照的指针,也包含作者的姓名、邮箱和提交信息等信息,还有一个指向提交父对象的指针(第一次产生的提交对象没有父对象,而由多个分支合并产生的提交对象有多个父对象)。

    假设现在有三个文件准备提交,暂存操作为每一个文件计算校验和,然后把当前文件快照存入到Git仓库中(使用Blob对象进行保存),最后把校验和加入到暂存区等待提交。当执行了commit提交后,Git会计算每个子目录的校验和,然后在仓库将这些校验和保存为一个树对象,最后Git生成一个提交对象,除了保存上面的信息以外,还包含了一个指向这个树对象的指针。

           

    每一次提交都会产生一个提交对象,并指向上一个提交对象作为自己的父对象。Git分支也就是指向提交对象的可变指针。

    git branch <分支名>

    创建一个新分支,例如,git branch test将创建一个名为test的分支。这条命令是通过创建一个指向当前提交对象的指针完成的。虽然创建了一个新分支,但是并不会自动切换到新分支上。在Git里,由HEAD指针指向当前分支。    

    git branch -b <分支名>

    删除分支

    git branch 

    (没有参数)这个命令可以列出当前分支的列表,其中“*”表示此时HEAD指针指向的分支。

    git branch -v

    查看每一个分支的最后一次提交

    git branch --merged/--no-merged

    过滤列表中已合并或尚未合并到当前分支的分支。   

    git checkout <分支名>

    切换到一个已存在的分支上,HEAD指针也将指向这个分支。之后使用commit命令进行提交,该分支的指针会随着移动,但是master指针不动,因此以后可以随时恢复到master指针指向的文件快照,也就是忽略了在这个新的分支上的修改。

    git checkout -b <分支名>

    新建一个分支并切换到该分支上。与命令git branch+git checkout等价。Git在切换分支时,Git会重置工作目录,使其恢复到最后一次提交时的样子。

    git log --oneline --decorate

    使用这个命令可以查看各分支当前所指的对象。

    git log --oneline --decorate --graph --all

    这个命令可以输出提交历史,各分支的指向以及项目的分支情况。     

    git merge <分支名>

    合并分支。Git在合并分支时,如果沿着一个分支走下去能到达另一个分支,则Git在合并两者时仅仅是将指针向后移动而已,否则Git将会选择这两个分支末端的文件快照与两者的共同祖先一起进行三方合并,即新建一个快照并创建一个提交指向它,这个提交的父对象就是两个分支末端的提交对象。

    git ls-remote(remote)

    显示获得远程引用的列表。

    git remote show(remote)

    这个命令能获得更多关于远程分支的信息

    git push (remote) (branch)

    推送到远程的某个分支

    git push origin --delete <分支名>

    删除远程分支    

    

猜你喜欢

转载自blog.csdn.net/u011063112/article/details/81124125