git分支/标签操作

git分支类似于某一个模块,等到所有模块开发完毕时,最后聚合在一起形成一个项目。而分支之间一般是不会受影响的。
git 分支的基本操作:

  1. git branch branchname 表示创建分支,新建分支的命令是基于当前所在分支创建的,创建新分支的内容和当前所在分支的内容是完全一样的。

  2. git checkout branchname 表示切换到指定分支上。

  3. git checkout -b branchname 表示创建分支并且切换到分支。

  4. git merge branchname表示合并分支到主分支master。在执行这个操作的时候,要先切换到master分支,然后在执行该命令。

  5. git branch 表示本地分支列表,git 默认是在master分支上的,当前分支前面会有一个*号。

  6. git branch -r 表示查看远程分支列表。

  7. git branch -d branc_name 表示删除本地分支。 git branch -D branch_name(强制删除分支)。

  8. git push origin :branch_name 表示删除远程分支。

  9. 把分支推送到远程仓库:git push origin branch_name ,如果想要给远程分支取另一个名称的话:git push origin branch_name:branch_othername。

  10. 远程有个分支,而本地没有,将远程分支迁到本地:git checkout branch_name origin/branch_name。同样的,将远程分支迁到本地并且切换到该分支:git checkout -b branch_name origin/branch_name。

  11. merge和rebase
    merge和rebase都有合并分支的作用,但是二者又有一些区别。
    例如现在有一个分支A,现在要把A分支合并到master分支,可以如下操作:
    git checkout master
    git merge A
    先切换到master分支,在进行合并。

    利用rebase也一样能完成同样的功能。
    git checkout master
    git rebase A
    执行完毕也一样完成了分支的合并。
    他们的区别参见:https://blog.csdn.net/liuxiaoheng1992/article/details/79108233


解决分支合并时的冲突
有时候分支在合并的时候会出现冲突,这个时候需要先解决冲突然后在合并。解决冲突就是手动编辑我们需要的内容。当不存在冲突时在合并即可。
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
git log --graph --pretty=oneline --abbrev-commit 可以查看分支合并的情况。

通常一般在合并分支时git采用的是Fast-forward模式,即快速合并分支,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m "merge with no-ff" dev 注意:--on-ff表示禁用fast-forward模式,因为会生成一个新的commit所以需要把描述信息-m加上。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
git的分支特别强大,一般master主分支都是比较稳定的,开发的话都是在dev分支上进行,当每一个功能模块开发完成过后只需要将它合并到dev中即可,如果没有问题了可以将dev合并到master分支上。


当需要紧急修复bug的时候,而你正在开发新的功能,功能还没有开发完成,但是有bug需要立马处理,这时怎么办呢? 别担心,你只管切换分支到需要修改bug的分支去修复bug就好,其他的工作交给stash来完成。

stash命令:用于暂时存储你没有完成的工作,相当于一个管家,让他先帮你把没有完成的工作先保管起来,等你bug修复完成了回来继续做原来没有做完的工作。
执行git stash,就把没有完成的工作暂时存储起来了,在执行git status会发现工作区很干净。
想要看暂存区里面有多少工作没有完成可以输入git stash list 查看列表。
当你把bug修复完成了,想要继续先前的工作,有两种方式恢复。
方式一:git stash apply,执行完成后你以前暂存的文件就已经恢复了,像什么都没有发生一样。紧接着就要删除暂存区记录,git stash drop这样就把记录删除了。
方式二:git stash pop,它与apply的区别是他不但帮你恢复了暂存文件,而且还帮你删除了暂存区记录。
drop 只是删除一条记录,可以跟参数stash_id删除指定的文件,不指定的话删除最近的文件,而想要清空的话,可以使用git stash clear。表示将暂存区的所有记录全部清空。
当暂存区有很多条记录时,你可指定恢复那一条内容:git stash apply stash@{0}
如下图所示:


多人协作时对远程仓库的操作


当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。

  1. git remote 表示查看远程仓库有哪些分支
  2. git remote -v表示查看远程仓库的详细信息,可以查看远程分支哪些可以抓取和推送的分支

    fetch表示可以抓取的仓库,push表示可以提交的仓库。
  3. git remote show origin 可以查看远程分支详细信息,比如当前在哪个分支,本地哪个分支和远程分支进行了关联等等。
  4. git log --oneline --decorate 命令查看各个分支当前所指的对象。
  5. git branch 可以查看当前的分支列表。
  6. git branch -v 可以查看每一个分支的最后一次提交信息。
  7. --merged 与 --no-merged 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支。 如果要查看哪些分支已经合并到当前分支,可以运行 git branch --merged。
  8. 如果要同步你的工作,运行 git fetch origin 命令。 这个命令查找 “origin” 是哪一个服务器(在本例中,它是 git.ourcompany.com),从中抓取本地没有的数据,并且更新本地数据库,移动 origin/master 指针指向新的、更新后的位置。
  9. git push origin master 表示推送分支,将本地分支推送到远程仓库。如果需要推送其他分支,将master换成其他的即可,origin是表示远程仓库的名字。
  10. git pull 表示将远程仓库抓取到本地
    一般通常情况下,都是先pull在push。

多人协作的工作模式通常是这样:
首先,可以试图用git push origin 推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to=origin/branchname 创建链接关系。
例如git branch --set-upstream-to=origin/dev dev,创建一个dev分支并且和远程dev分支建立连接关系。
关于分支冲突,以及分支的处理可以参见:https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320


git的标签相关操作


git中的标签和分支差不多的,它也是指向的是某一次commit提交,标签的好处就是可以让你迅速回到某一个版本,标签也就是用来标记版本信息的,例如当前版本是v1.0,那么就在master上打一个标签。打标签需要切换到对应的分支。默认的标签是打在最近最新的一次commit上,如果某一次commit之后没有打标签,只需要通过日志找到commit_id即可。
在git中标签有两种:轻量标签和附注标签。一个轻量标签很像一个不会改变的分支 - 它只是一个特定提交的引用。然而,附注标签是存储在 Git 数据库中的一个完整对象。 它们是可以被校验的;其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息;并且可以使用 GNU Privacy Guard (GPG)签名与验证。 通常建议创建附注标签,这样你可以拥有以上所有信息;但是如果你只是想用一个临时的标签,或者因为某些原因不想要保存那些信息,轻量标签也是可用的。

  1. git tag tag_name 表示创建一个标签,标签总是指向一个commit(这样创建的标签就是轻量标签)。
  2. 还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字。例如:git tag -a tag_name -m"说明文字" |commit_id。(这样创建的标签就是附注标签)
  3. git show tag_name可以查看标签的一些信息。
  4. 要切换到某个标签,可以使用 git checkout 标签名。
  5. 直接使用git tag表示查看仓库的标签信息。
  6. 对指定某一次提交打标签git tag tag_name commit_id。即可。
  7. 需要注意的是标签不是按时间顺序列出,而是按字母排序的。可以用git show 查看标签信息。如果没有标签信息就是查看最近的一次提交信息。
  8. git tag -d tag_name 表示删除某一个标签。
  9. git push origin 表示推送某个标签到远程。
  10. git push origin --tags 表示一次推送所有未推送的标签到远程。
  11. 如果想删除远程标签,需要先删除本地标签然后在删除远程标签。
    git tag -d tag_name
    git push origin :refs/tags/tag_name

以上就是git 分支和标签的基本操作

原文地址:https://www.cnblogs.com/jasonboren/p/11094977.html