git分支/标签操作
git分支类似于某一个模块,等到所有模块开发完毕时,最后聚合在一起形成一个项目。而分支之间一般是不会受影响的。
git 分支的基本操作:
- git branch branchname 表示创建分支,新建分支的命令是基于当前所在分支创建的,创建新分支的内容和当前所在分支的内容是完全一样的。
- git checkout branchname 表示切换到指定分支上。
- git checkout -b branchname 表示创建分支并且切换到分支。
- git merge branchname表示合并分支到主分支master。在执行这个操作的时候,要先切换到master分支,然后在执行该命令。
- git branch 表示本地分支列表,git 默认是在master分支上的,当前分支前面会有一个*号。
- git branch -r 表示查看远程分支列表。
- git branch -d branc_name 表示删除本地分支。 git branch -D branch_name(强制删除分支)。
- git push origin :branch_name 表示删除远程分支。
- 把分支推送到远程仓库:git push origin branch_name ,如果想要给远程分支取另一个名称的话:git push origin branch_name:branch_othername。
- 远程有个分支,而本地没有,将远程分支迁到本地:git checkout branch_name origin/branch_name。同样的,将远程分支迁到本地并且切换到该分支:git checkout -b branch_name origin/branch_name。
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。
- git remote 表示查看远程仓库有哪些分支
- git remote -v表示查看远程仓库的详细信息,可以查看远程分支哪些可以抓取和推送的分支
fetch表示可以抓取的仓库,push表示可以提交的仓库。 - git remote show origin 可以查看远程分支详细信息,比如当前在哪个分支,本地哪个分支和远程分支进行了关联等等。
- git log --oneline --decorate 命令查看各个分支当前所指的对象。
- git branch 可以查看当前的分支列表。
- git branch -v 可以查看每一个分支的最后一次提交信息。
- --merged 与 --no-merged 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支。 如果要查看哪些分支已经合并到当前分支,可以运行 git branch --merged。
- 如果要同步你的工作,运行 git fetch origin 命令。 这个命令查找 “origin” 是哪一个服务器(在本例中,它是 git.ourcompany.com),从中抓取本地没有的数据,并且更新本地数据库,移动 origin/master 指针指向新的、更新后的位置。
- git push origin master 表示推送分支,将本地分支推送到远程仓库。如果需要推送其他分支,将master换成其他的即可,origin是表示远程仓库的名字。
- 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)签名与验证。 通常建议创建附注标签,这样你可以拥有以上所有信息;但是如果你只是想用一个临时的标签,或者因为某些原因不想要保存那些信息,轻量标签也是可用的。
- git tag tag_name 表示创建一个标签,标签总是指向一个commit(这样创建的标签就是轻量标签)。
- 还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字。例如:git tag -a tag_name -m"说明文字" |commit_id。(这样创建的标签就是附注标签)
- git show tag_name可以查看标签的一些信息。
- 要切换到某个标签,可以使用 git checkout 标签名。
- 直接使用git tag表示查看仓库的标签信息。
- 对指定某一次提交打标签git tag tag_name commit_id。即可。
- 需要注意的是标签不是按时间顺序列出,而是按字母排序的。可以用git show 查看标签信息。如果没有标签信息就是查看最近的一次提交信息。
- git tag -d tag_name 表示删除某一个标签。
- git push origin 表示推送某个标签到远程。
- git push origin --tags 表示一次推送所有未推送的标签到远程。
- 如果想删除远程标签,需要先删除本地标签然后在删除远程标签。
git tag -d tag_name
git push origin :refs/tags/tag_name
以上就是git 分支和标签的基本操作
git分支/标签操作的更多相关文章
- GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流
最近听同事说他都在使用GitHub,GitHub是程序员的社区,在里面可以学到很多书上学不到的东西,所以最近在准备入手这方面的知识去尝试学习,正好碰到这么详细完整的文章,就转载了,希望对自己和大家有帮 ...
- 【代码管理】GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流
GitHub操作总结 : 总结看不明白就看下面的详细讲解. . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details ...
- Git tag 标签操作
列表 # 列出已有的标签 $ git tag # 为了能及时看到远程上新增的标签, 在上面的命令之前可以fetch一下 git fetch --all --tags --prune # 列出匹配的部分 ...
- git 分支 branch 操作
创建分支 git branch test: 基于当前commit创建test分支..git/HEAD 文件中记录了当前分支名字. 删除分支 git branch -d test:删除本地test分支 ...
- (七)git分支的操作
1.git branch——显示分支一览表 2.git checkout -b——创建.切换分支 往feature-A中不断add.commit叫培育分支 git checkout - 切回上一个分支 ...
- git 分支相关操作
git status 查看当前工作区 会显示分支 如下 D:\工程\vue_study\testplat_vue>git statusOn branch masternothing to co ...
- git学习(七) git的标签
git的标签操作 git标签操作 git tag 不加任何参数 表示显示标签(按字母序) 非按时间 git tag 标签名 默认是给最近一次提交打上标签 git tag 标签名 commitId 给响 ...
- Git分支及其协同开发
目录 Git分支 Git是如何保存数据的 Git分支的本质 Git分支的操作 远程仓库与本地仓库分支开发 一个项目多个远程仓库 远程仓库操作命令 协同开发 Git flow工作流 GitLub安装搭建 ...
- Git分支管理及常见操作
众所周知,使用Git分支,我们可以从开发主线上分离开来,然后在不影响主线的同时继续工作. 既然要使用Git分支,这里就涉及到Git分支的管理及常见操作,如列出分支,分支的创建,分支的删除,分支的合并等 ...
随机推荐
- POJ 2492 A Bug's Life (带权并查集 && 向量偏移)
题意 : 给你 n 只虫且性别只有公母, 接下来给出 m 个关系, 这 m 个关系中都是代表这两只虫能够交配, 就是默认异性, 问你在给出的关系中有没有与异性交配这一事实相反的, 即同性之间给出了交配 ...
- python3学习笔记(三):注释和字符串
一.注释 为了让别人能够更容易理解程序,使用注释是非常有效的,即使是自己回头再看旧代码也是一样. # 打印圆的周长: print(2* pi* r) 在python 中用井号(#)表示注释.井号(#) ...
- prometheus-pushgateway安装
背景 当prometheus的server与target不在同一网段网络不通,无法直接拉取target数据,需要使用pushgateway作为数据中转点. 弊端 将多个节点数据汇总到 pushgate ...
- Selenium 上手:Selenium扫盲区
Selenium 自述Selenium 是由Jason Huggins软件工程师编写的一个开源的浏览器自动化测试框架.主要用于测试自动化Web UI应用程序. Selenium 工作原理通过编程语言( ...
- 《Effective Java》读书笔记 - 4.类和接口
Chapter 4 Classes and Interfaces Item 13: Minimize the accessibility of classes and members 一个好的模块设计 ...
- vue simple框架打包遇到报错问题
问题描述:之前一个项目使用vue-simple框架 打包时老是报错 :原因是es6转化es5时候有错误: 解决: alias: { 'vue$': 'vue/dist/vue.esm.js', // ...
- 在WCF程序中动态修改app.config配置文件
今天在个WCF程序中加入了修改配置文件的功能.我是直接通过IO操作修改的app.config文件内容,修改后发现发现其并不生效,用Google搜了一下,在园子里的文章动态修改App.Config 和w ...
- Xcode升级10.3后XIB文件报错
Xcode升级10.3后XiB文件包错,提示: Failed to find or create execution context for description '<IBCocoaTouch ...
- MySQL——索引
MySQL索引的概念 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,通俗来讲索引就好比书本的目录,加快数据库的查询速度. 举个简单的例子,见下图: 注意:此例 ...
- Windows环境下Mysql 5.7读写分离简单记录
一.目的 本文记录了在Windows环境中,mysql数据库读写分离配置过程. 二.准备: Master机器:Windows 10 虚拟机,IP:192.168.3.32 Slave机器:Window ...