- 浏览: 309613 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
fanlei77:
很有用,谢谢
git branch -
han1051:
123123
Spring框架下PropertyPlaceholderConfigurer类 -
wangbing9577:
言简意赅。
代理模式 适配器模式 与 外观模式 区别 比较 特点 -
azheng270:
用户和权限为什么会有直接连线
通用权限管理系统设计篇(一) -
cectsky:
nice,i know ,thank you ~
Spring框架下PropertyPlaceholderConfigurer类
http://f2e.us/wiki/git-branch.html#!/
理解分支
git在创建分支的时候,实际上是从整个提交历史里的某个起点开始(该起点被记录为分支的祖先,标识分支的起始位置),创建提交历史树的枝干。
由于git每次提交的时候均会记录当次提交的校检和,配合将数据打包存储,记录当前仓库相对于前一版本的变化。所以git的分支,实际上只是一串包含对象校检和(SHA-1)的文件。通过这个校检和,得出分支在提交历史树上的走向。
git里创建删除分支变得非常简单。这一点不像svn那样每创建一个分支就需要整个目录拷贝一份。在git上非常推荐频繁使用分支。
甚至可以一个issue(bug)一个分支,解决完切回主分支合并;没解决完就让分支继续走,主分支继续正常任务。
基本操作
创建和销毁
分支列表:
$: git branch * master prepub product
创建分支:
$: git branch prepub
切换已有分支:
$: git checkout prepub Switched to branch 'prepub'
创建并切换分支:
$: git checkout -b issue1234 Switched to branch 'issue1234'
删除分支:
$: git branch -d issue1234 Deleted branch issue1234 (was b904c07).
合并和冲突
合并前要先切回 要并入 的分支。
以下表示issue1234
分支合并入master
分支
$: git checkout master $: git merge issue1234 Merge made by recursive. README | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
冲突的时候,git会报出哪些文件冲突,这时候需要手动解决完冲突方可提交。
$: git merge issue1234 Auto-merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result.
通过git status
查看冲突文件。
$: git status index.html: needs merge # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # unmerged: index.html #
打开index.html
,git会在冲突位置做上标示。
<<<<<<< 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
解决完冲突,这时候需要手动标识该冲突已经解决,类似svn的resolved
。
$: git add index.html $: git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: index.html #
这时候就可以提交了。
$: git commit -m "合并issue1234" [master e3ece67] 合并issue1234 1 files changed, 1 insertions(+), 0 deletions(-)
管理多个分支
前面提到,git非常推荐频繁使用分支,在大量分支的情况下,我们需要对分支做好管理(曾经一次上线,开了13个分支 = =
)
通过-v
可以看到最后一次提交日志。
$: git branch -v * master b904c07 把丘迟的产品搜改动合并一下 p4popt 8b93380 p4p加上refpid,开发给出来的配置是 P4P_refpid prepub a6cc66b P4P解析参数少一次替换,顺便解决\!失效的问题 product 301ae4e rankbar图片换成data uri
通过--merged
和--no-merged
来查看分支是否已经合并完成。
$: git branch --merged * master p4popt $: git branch --no-merged prepub product
未合并的分支,在删除时会提示分支未合并。
$: git branch -d product warning: deleting branch 'product' that has been merged to 'refs/remotes/s/product', but it is not yet merged to HEAD. Deleted branch product (was 301ae4e).
分支管理流程
一般情况下,分支可以划分为长分支和短分支两种。
长分支
-
长期任务
-
prepub
:上线前合并,根据上线列表,从各个分支中集中到该分支,统一部署提测 -
master
:上线后合并,长期保留一个稳定可用的分支应付紧急任务
-
- 项目
- 较难解决的bug
- 新特性试验田
- 重构
长分支,经常会落后其他分支一大截,需要养成习惯,适时从其他重要分支进行合并, 尤其是项目分支 。
短分支
- 临时需求
- 小bug
分支可视化
git本身的log
提供--gragh
选项,可以提供字符界面的分支可视化视图。
$: git log --graph --pretty=oneline | * 50cc7a78b7f2704a2014afa3667f6ac5b5b47374 merging refs/remotes/origin/prepub into HEAD | |\ | | * 8f685bd1be3757effe32d6ff37f86bd07dd2b549 又被无情地冲掉了代码 | * | 75a17b4ad610327a9b0e1eecfc6c4bf9cade7359 修改icon | |/ | * 146a0990de450c854b1a7d9995e12979fff2d537 merging refs/remotes/origin/prepub into HEAD | |\ | | * 93b379680796eb443961bb8c59008f8ae5678be4 Merge branch 'prepub' of search.ued.taobao.net:projects/search into prepub | | |\ | | * | 8b93380ccfb9020bf8f8e1e8a4a553601de3c788 p4p加上refpid,开发给出来的配置是 P4P_refpid | * | | 08201de89834f6fecb195c2b7c3546b5cafccc85 秒杀折扣浮动层样式 | | |/ | |/| | * | 0f4d1df17f79c7aa3ca3d36ab848c10b78029010 修改icon | * | ae719fc29cc550321f284323db06a294b97c1398 p4p创意优化 | |/ | * a6d4501e1456589d30ab1a5800b651876629c8ca 修改icon
git还有很多GUI工具,可以提供可视化地分支走势图,比如gitk
,qgit
,GitX
等等。
远程分支
至今为止,前面所有提到的概念都是直接本地操作的,并不需要任何网络连接。
而git本身是一个分布式代码管理工具(DVCS),所以分支管理上,存在本地分支和远程分支两种概念。
可以简单的理解,远程分支就是别人的本地分支push
到服务器上的时候产生的。比如master
就是一个最典型的远程分支(默认)。
$: git push origin master
除了master
之外,我们还可以随便创建分支,然后push
到服务器上去。
$: git push origin prepub Counting objects: 27, done. Delta compression using up to 2 threads. Compressing objects: 100% (15/15), done. Writing objects: 100% (15/15), 7.30 KiB, done. Total 15 (delta 10), reused 0 (delta 0) To git@search.ued.taobao.net:projects/search.git 1b95a57..779dbe1 prepub -> prepub
远程分支的标识形式为{remote/branch}
,比如origin/product
。
$: git branch -a master p4popt * prepub product remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/p4popt remotes/origin/prepub remotes/origin/product
远程分支和本地分支需要区分,所以,在从服务器上拉取特定分支的时候,需要指定本地分支名字。
$: git branch product origin/product Branch product set up to track remote branch product from origin.
而1.6.2以上版本的git,可以通过--track
选项,简化这一过程。这也是为什么直接执行git clone
的时候,会自动创建本地master
分支的原因。(实际上,pull
操作相当于fetch
+merge
。)
$: git checkout --track origin/product Branch product set up to track remote branch refs/remotes/origin/product. Switched to a new branch "product"
远程分支和本地分支是松散的结构,可以把任意远程分支合并到任意本地分支里;同样,也可以把任意本地分支push
到任意远程分支上。
# THIS WILL MESS UP YOUR REPO!! $: git branch master * prepub p4popt product $: git pull origin product $: git push origin master
同步本地远程分支。
$: git fetch origin
删除远程分支。
$: git push origin :p4popt To git@search.ued.taobao.net:projects/search.git - [deleted] p4popt
References
发表评论
-
性能监控与性能问题定位之:Java篇
2012-04-09 15:50 1110http://hi.baidu.com/higkoo/ ... -
BeanUtils.copyProperties 日期转字符 日期转Long
2012-03-15 11:05 2420建立自己的日期转换类 import org.apache.c ... -
java 正则
2011-11-18 13:27 793http://edu.yesky.com/edupxpt/18 ... -
apache common 工具
2011-11-03 16:24 1277common-lang (2.1) ... -
TortoiseSVN svn:external 设置外部svn目录的属性
2011-02-17 14:57 6038项目开发时,各个人员之间都会使用公共项目中的文件。可 ... -
synergy quicksynergy 共享ubuntu 和 windows 7
2011-01-21 19:27 26651. 在windows 7 下 安装 synergy 2. ... -
浅析VO、DTO、DO、PO的概念、区别和用处
2010-10-18 16:03 1228概念: VO ( View Obje ... -
详细解析Java中抽象类和接口的区别
2010-10-12 15:25 938抽象类和接口 抽象类仅提供一个类的部分实现 ... -
文件操作
2010-09-25 20:56 989File File 类 只操作文件,不对文件中的内容进行操作 ... -
中文乱码问题解决,过滤器配置,get post提交乱码,filter,struts乱码,jsp乱码
2010-09-14 15:19 1215Xml代码 <filter> ... -
PO/VO/DAO/BO/POJO是什么(JAVA几种对象的解释)
2010-08-31 00:17 1449java的几种对象(PO,VO,DAO,B ... -
svn 中tag branch trunk 的用法
2010-05-19 15:54 2047在SVN中Branch/tag在一个功能选项中,在使用中也往往 ... -
interview
2010-05-04 09:44 0以下题有些经过测试,修改之后,大多能运行。 1.现在输入 ... -
Sting字符串交集并集差集
2010-04-29 13:31 0package com.thomas.test; imp ... -
jsp的url中文参数解决办法
2009-06-23 18:38 10251.页面头部添加 <%@ page contentTy ... -
getAttribute和getParameter的区别
2008-07-18 10:00 1180getAttribute和getParameter的区别 JS ... -
JSP编程进度条设计
2008-07-14 10:42 1038许多Web应用、企业应用涉及到长时间的操作,例如复杂的数据库 ... -
[zt]JDBC DAO设计
2008-07-08 13:48 1380Connection的含义 Connection表示了一 ... -
Linux下内存释放问题相关知识
2008-07-03 15:20 1384细心的朋友会注意到,当 ... -
hashtable和hashmap的区别
2008-06-12 10:48 940HashTable的应用非常广泛,HashMap是新框架中用来 ...
相关推荐
tmux-git, 在Tmux状态栏中,显示当前 git branch的脚本 Tmux中的 git-branch tmux-git 在 tmux 状态栏中显示当前目录的git repo 信息,如当前分支。dirtiness 。存储等等。概述在你的Linux终端提示符( 就像我在这里...
讲述了git分支的使用,创建分支,修改分支,删除分支,克隆分支
git-directory-deploy, 将目录部署为 git branch 这是用于部署文件到 git branch的脚本,例如在使用文书构建单个页面应用程序和部署到 GitHub页面的脚本。 不像 git方法,它不要求生成的文件被提交到源分支。 它在...
**vim-gitbranch 插件详解** `vim-gitbranch` 是一款专为 Vim 编辑器设计的插件,它的主要功能是在 Vim 的状态栏显示当前工作目录下的 Git 仓库的分支名称。对于频繁进行 Git 操作的开发者来说,这是一个非常实用的...
git-when-merged, 确定特定提交合并到 git branch的时间 git when-mergedgit when-merged 帮助你了解什么时候以及为何将提交合并到分支中。如果使用标准的Git工作流,则为你正在处理的每个特性创建一个特性分支。 当...
**Jenkins 插件 GitBranch-Column 深度解析** `Jenkins-Plugin-GitBranch-Column` 是一个专为 Jenkins 设计的插件,它的主要功能是在 Jenkins 的 listview(列表视图)中展示 Git 仓库的分支名称。这对于多分支策略...
git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看远程所有分支 git commit -am "init" 提交并且加注释 git remote add origin git@192....
本示例"gitbranch-demo"旨在演示Git分支的使用,特别是与Java开发相关的实践。 在Java开发中,使用Git分支能有效提高团队协作效率。以下将详细讲解Git分支及其相关操作: 1. **创建分支**: 使用`git branch ...
git-branch-select 存储库中的交互式(本地)分支选择。 通过安装 $ npm install --global git-branch-select 用法 $ git branch-select [options] [search] # Alias it in your .gitconfig for added convenience,...
Git 常用命令 4.1 初始化仓库 git init # 在当前目录下初始化一个新的 Git 仓库 4.2 查看仓库状态 git status # 查看当前仓库的状态 4.3 文件操作 将文件添加到暂存区 ... git branch -d 分支名
1 安装GIT 代码如下:$ sudo aptitude install git$ sudo aptitude install git-doc git-svn git-email git-gui gitk git软件包包含了大部分Git命令,是必装的软件包,第二行命令也是...(1)git branch 查看本地分支
14. 删除远程分支:`git push origin --delete [branch-name]` 或 `git branch -dr [remote/branch]` ### 标签 标签用于标记特定的commit,便于后续引用: 1. 列出所有标签:`git tag` 2. 创建新标签:`git tag ...
GitBranch 是一个与版本控制工具 Git 相关的主题,它主要涉及到在 Git 中如何管理和使用分支。Git 是一个分布式版本控制系统,广泛应用于软件开发和协作,它的分支功能是其核心特性之一。在这个主题中,我们将深入...
`git branch -m branch_0.1 branch_1.0`** - **功能**: 重命名分支。 - **示例**: `git branch -m old-feature new-feature` - **用途**: 更改现有分支的名称。 **44. `git checkout branch_1.0`** - **功能**...
2. **回到远程仓库的状态**:通过`git checkout <branch>`切换到远程分支,或者使用`git fetch`下载最新的远程仓库数据后再使用`git merge origin/<branch>`或`git rebase origin/<branch>`来同步远程分支的状态。...
- 要删除远程分支,则需要使用`git push origin --delete [branch-name]`或者`git branch -dr [remote/branch]`。 以上这些命令组成了日常工作中常用的Git命令清单,通过这些命令可以进行绝大多数的代码管理操作。...
* `git branch 新分支 某个 commit 的 id`: 基于某个 commit 创建分支 * `git checkout -b 新分支`: 创建并切换到该分支 * `git branch -d 要删除的分支`: 安全删除本地某分支 * `git branch -D 要删除的分支`: 强行...
git视频教程.4.1.Git 命令 - git branch.mp4 git视频教程.4.2.Git 命令 - git branch.mp4 git视频教程.4.3.Git 命令 - git branch.mp4 git视频教程.4.4.Git 命令 - git checkout.mp4 git视频教程.4.5.Git 命令 - git...
`-m` 或 `--move` 用于重命名分支,如 `git branch -m old-branch-name new-branch-name`,当前分支可以使用 `git branch -m new-branch-name` 重命名。 5. **git checkout**: `git checkout` 用于切换分支或恢复...
10. `git branch --set-upstream [branch] [remote-branch]`:在当前分支与指定的远程分支之间建立追踪关系。 除了这些基本操作,还有其他如合并、解决冲突、查看历史、重置、拉取、推送等高级命令,它们构成了Git...