Git分支管理和标签管理

一、分支管理

1. 解决冲突

如果在两个不同的分支中,对同一个文件进行了不同的修改,Git 就没法很干净的合并它们。此时,我们需要手动打开这些冲突的文件手动解决冲突,解决冲突后重新提交。

下面我们先模拟一个冲突,操作如下:

  1. 准备新的 dev 分支并修改提交

    git switch -c dev
    

    修改 README.md,添加一行文本内容“我是dev分支”。

    然后在 dev 分支上提交:

    git add README.md
    git commit -m "update README.md from dev"
    
  2. 切换到 master 分支并修改提交

    git switch master
    

    也修改 README.md,添加一行文本内容“我是master分支”。

    然后在 master 分支上提交:

    git add README.md
    git commit -m "update README.md from master"
    
  3. 然后合并 dev 分支

    git merge dev
    

    这时你会发现 README.md 文件存在冲突,此时必须手动解决冲突后再提交。

如何手动解决这个冲突呢?

  1. 在编辑器中打开 README.md 文件以查看并解决冲突的文本。 Git 添加了一组标记来指示冲突文本的实例。
<<<<<<< HEAD
update README.md from master
=======
update README.md from dev
>>>>>>> dev

之间的<<<<<<< =======文本是冲突文本的目标分支版本。

之间的======= >>>>>>>文本是冲突文本的源分支版本。

  1. 编辑文件以解决冲突的文本。 通过删除合并冲突标记,可让 Git 知道已解决冲突。
  2. 解决所有冲突文本后,运行 git add README.md 以暂存文件。
  3. 对内容冲突的所有文件重复上述步骤。

2. Bug 分支

Bug 无处不在,每个bug都可以通过创建一个新的临时的分支来进行修复,修复后,合并分支,最后将临时这个分支删除。

当手头工作没有完成时,先把工作现场通过 git stash 一下,然后再去临时新建 bug 分支,修复后,再通过 git stash applygit stash pop,恢复之前工作现场。

两种恢复方法的区别:

一种方式是使用 git stash apply 恢复,但是恢复后,stash 内容并不删除,若需删除,使用 git stash drop 来手动删除;

另一种方式是用 git stash pop,恢复的同时自动把 stash 内容也删除了。

示例如下:

  1. 首先确定要在哪个分支上修复 bug 。

    假定需要在 master 分支上修复,请先确保 master 分支上有已暂存但未提交的代码,接着执行 git stash 把当前工作现场“储存”起来。

    git stash
    

    现在,用 git status 查看工作区,就是干净的(除非存在没有被git管理的文件)。接下来就可以放心地创建分支来修改 bug。

  2. 从 master 分支创建临时 bug 分支进行修复。

    git checkout master
    git checkout -b issue-1024
    

    然后进行bug修复,修复之后提交:

    git add .
    git commit -m "fix bug 1024"
    
  3. 切换到 master 分支,完成合并,最后删除临时 bug 分支。

    git checkout master
    git merge issue-1024
    git branch -d issue-1024
    
  4. 最后,恢复 master 分支之前“储存”的工作现场,接着继续开发未完成的工作。

    git stash pop
    

3. 分支管理策略

在实际开发中,我们通常按照以下几个基本原则进行分支管理:

  1. 首先,master 分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活的;
  2. 干活都在 dev(develop) 分支上,也就是说,dev 分支是不稳定的,到某个时候,比如 1.0 版本发布时,再把 dev 分支合并到 master 上,然后再 master 分支发布 1.0 版本。

4. 多人协作

  1. 查看远程仓库的信息,用 git remote -v

  2. 推送本地分支

    如果是第一次将本地分支推送到远程仓库,需要执行如下的命令:

    git push -u 远程仓库的别名 本地分支名称:远程分支名称
    

    -u表示把本地分支和远程分支进行关联,远程仓库的别名一般是origin

    如果不是第一次将本地分支推送到远程仓库,需要执行如下命令:

    注意:需要切换到要推送到分支后直接 git push 就可以将本地分支推送到远程仓库

    git push
    
  3. 抓取分支

    查看本地和远程的分支,用 git branch -a,然后就可以抓取你想抓取的分支。示例代码如下:

    git checkout -b dev origin/dev
    

    最后总结一下,多人协作的工作模式通常是这样的:

    1. 首先,可以尝试用 git push origin 分支名称 推送自己的修改;
    2. 如果推送失败,则因为远程分支比你的本地更新,需要先用 git pull 拉取并合并;
    3. 如果合并出现冲突,则解决冲突,并在本地提交;
    4. 如果没有冲突或解决掉冲突之后,再用 git push origin 分支名称 推送就能成功了。

二、标签管理

标签(tag)是 Git 版本库的一个标记,指向某个 commit 的指针。标签主要用于发布版本的管理,一个版本发布之后,我们就可以使用 git 打上 v1.0、v1.1…这样的标签。

  1. 打标签

    切换到 master 分支上,然后执行如下命令:

    git tag -a 标签名 -m "描述说明"
    
  2. 推送某个标签到远程

    git push 远程仓库名称 标签名
    

你可能感兴趣的:(git,git,github)