Git的分支管理(4)

创建与删除分支

  指针HEAD总是指向当前分支,不管是master分支还是dev分支,当前切换的是哪个分支就指向哪个。

  Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

  在Fast forward模式下,删除分支后,会丢掉分支信息的commit信息。准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward,则会在master中保留分支dev的commit信息。   

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

代码冲突的概念及解决

  出现问题的条件,当满足以下四个条件时,master合并dev时会有代码冲突(代码行冲突):

  1. 当版本在C的位置创建新的分支dev。
  2. 分支dev经过一次或者多次提交。
  3. 分支master也经过一次或者多次提交。
  4. 分支master与dev对相同文件的相同位置(一般以行为单位)进行了修改。

  导致的结果

    分支master相对于版本C没有做修改的地方,如果分支dev做了修改,则会合并dev的修改,包括添加或者删除文件。

    如果master和dev都修改了相同文件的相同行,则会出现代码冲突。

  解决办法:

    需要修改存在代码冲突的文件,再次git add file,git commit,则会解决问题。此时应该删除分支dev,因为已经合并,没有利用价值。

保存现场

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

注意,经过实测

在 dev分支中做了文件修改,不做git stash现场保存的话,会把文件的修改状态包括暂存区状态带到master,并认为是在master的状态。

更多使用命令

git branch -D <name> :强行删除。分支经过多次修改没有合并,使用git branch -d命令会提示错误 。则

git remote -v查看远程库信息显示更详细的信息。

git push origin branch-name从本地推送分支使用,如果推送失败,先用git pull抓取远程的新提交;代码冲突的机制是一样的。

git checkout -b branch-name origin/branch-name :在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致。

git branch --set-upstream branch-name origin/branch-name建立本地分支和远程分支的关联,使用;

标签管理

什么是标签?

  发布一个版本时,我们通常先在版本库中打一个标签(tag),这样就唯一确定了打标签时刻的版本,标签是版本库的一个快照,它指向某个commit的指针,所以创建和删除标签都是瞬间完成的。

Git有commit ID,为什么还要引入tag?

  commit ID不容易记忆,给它取一个别名,方便记忆和版本识别。

命令介绍

git tag <name> :切换到分支,使用此命令就可以打一个新标签。

git tag <name> <commit ID> :把之前的提交打上标签。

git tag -a <tagname> -m "msg" :可以指定标签信息

git tag查看所有标签。

git push origin <tagname>可以推送一个本地标签。

git push origin --tags :可以推送全部未推送过的本地标签;

git tag -d <tagname> :可以删除一个本地标签;

git push origin :refs/tags/<tagname>:可以删除一个远程标签。

文章参考廖雪峰Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

posted @ 2018-05-09 23:29  zephyr~  阅读(471)  评论(0编辑  收藏  举报