git 分支

目录

 

目录

git分支简介

分支创建

分支切换

分支新建与合并

新建分支

合并分支

遇到冲突的分支合并

分支管理

远程分支

 查看远程分支

远程跟踪分支

fetch拉取数据

 推送

 删除远程分支

变基


git分支简介

git的每次提交都会包含三部分:commit object、blob、tree.

blob:暂存操作会将每个文件计算校验和(SHA-1哈希算法),然后将当前版本的文件快照以Blob对象的形式保存到git仓库中,最后将校验和加入到暂存区。

tree:在commit 提交操作时,会先计算每个子目录的校验和,然后以tree对象保存在git中,可以在需要时重现本次提交的目录结构

commit object:提交对象,包含提交作者的姓名邮箱、提交时的信息及指向它的父对象的指针(首次提交不包含父对象指针)。

以上三部分均可以在 .git/objects文件夹下找到,

通过两条命令查看信息。

git cat-file -t/-p SHA-1

example:git cat-file -t 193569360fcd037aff2b965acbf7a4598a998c1d

 注意要将19/3569360fcd037aff2b965acbf7a4598a998c1d中间的/去掉。

分支创建

git banch testing(banchname)

创建一个分支,分支名为branchname,但是并没有切换到新分支上。

 HEAD指针:一个特殊指针,指向当前所在的本地分支。

Detached head:只想分支的非最新节点,当checkout之前的版本时会有提醒。

 

 我们可以使用--decoratel来查看当前的分支情况

git log --oneline --decorate

分支切换

git checkout testing(branchname)

切换到分支branchname上。

我们可以用git log --oneline --decorate --graph --all查看分支及项目分支分叉情况。

分支新建与合并

新建分支

git checkout -b iss(branch-name)

 以上命令代表着两条命令。新建分支iss,并切换到分支iss。

$ git branch iss
$ git checkout iss

合并分支

git checkout master
git merge iss(branch-name)

 合并分支分两步:

先切换到目标分支(即融合到的分支),

然后使用merge命令将源分支并入目标分支。

分支合并分两种情况,一种是fast-forward,即目标分支是源分支的直接上游,目标分支分支只做简单的指针向前移动。不产生新的提交。

 将hotfix合并到master后,master分支指针移动到hotfix最新节点上。如下图:

另一种是三方合并,即两个分支的末端及他们的共同祖先三者分支做一个合并,然后创建一个新的快照并生成一个新的提交指向它。它的特点在于不止并一个父对象。

合并后

合并完可以使用-d删除分支。

遇到冲突的分支合并

当合并的两个对象存在冲突,则会暂停下来,等待你去解决合并产生的冲突。

<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> iss53:index.html

=====上下方分别为冲突文件中的两部分内容,可以选择均保存,或者修改为其他内容 。

在你解决了所有文件里的冲突之后,对每个文件使用 git add/git commit -a 命令来将其标记为冲突已解决,然后再提交。

分支管理

 查看分支

git branch (-v)

查看已合并分支

git branch --merged

查看未合并分支

git branch --no-merged

 

远程分支

 查看远程分支

可以通过git ls-remote (remote)查看远程分支列表。

通过git remote show (remote)查看远程仓库的详细信息。

远程跟踪分支

 远程引用是对远程仓库的引用,包括分支、标签等。更常用的方法是远程跟踪分支。

远程跟踪分支以remote/branch形式命名,默认情况下为origin/master。origin为默认远程分支名,master为默认主分支名。他并不是与远程仓库实时更新的,一段时间后可能会落后于远程仓库,需要使用pull或fetch更新。

当我们从远程仓库clone后的状态如下:

 而在一段时间后,如果远程仓库被别人更新后,变为

 可见本地的跟踪origin/master落后于远程仓库。

fetch拉取数据

 通过fetch命令拉取远程仓库数据到本地,

 此时本地的远程跟踪分支更新了,但是却形成了两个分支,所以需要将两个分支合并,这样在以后push到远程仓库时才不会出现冲突。当然这里如果用pull命令代替fetch,则会自动执行fetch和merge两个命令,不过仍然需要人工解决合并冲突的问题。

 推送

 之前介绍的都是本地修改或者将远程仓库内容拉到本地,同样的我们可以通过push将本地仓库推送到远程仓库

git push remotename branchname 

 上述命令为将一个本地分支推送到远程仓库。也可以通过--all将本地所有分支推送。

git push remotename --all

 删除远程分支

git push origin --delete serverfix

变基

 将源分支上与目标分支不同的操作再在目标分支上重演一次。

$ git checkout experiment
$ git rebase master

 如此将可以对过去的提交进行修改,但是也存在一个重大的风险,所以请记住:

不要对在你的仓库外有副本的分支执行变基。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值