git学习(5)分支管理(续)

1.解决冲突

冲突的产生

如我们在新建分支和原来master分支上对同一文件做了修改并提交,在合并分支的时候就会遇到冲突

比如我新建了分支myBranch,在这个分支上修改readme.txt,然后commit,然后在master的分支上也修改readme.txt,然后也commit,这个时候进行merge,这个时候git会提醒存在冲突,需要我们在把冲突解决后再提交。

步骤如下:

新分支和主分支各自修改readme.txt--->主分支合并新分支产生冲突---->解决冲突--->主分支提交--->删除新分支

从合并分支开始

$ git merge myBranch
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
$ cat readme.txt
...
new branch record
<<<<<<< HEAD
createing a new branch is quick & simple.
=======
createing a newbrach is quick and simple.
>>>>>>> myBranch

git使用<<<<<<< ,=======,>>>>>>>来标记不同分支的内容,把冲突的内容修改为最终需要的代码,然后add,commit,最后删除分支

可以通过git log --graph查看分支合并的情况

$ git log --graph --pretty=oneline --abbrev-commit
* 2a4d4ea confict fixed
|\
| * 41048a1 add simple word
* | 9f00674 & simple
|/
* 86c291c new branch
..

2.Bug分支

当在分支newBranch工作的时候收到修改bug 108的通知,这个时候需要新建一个分支issue-108,当前newBranch分支又无法立即完成,如果新建一个分支的话,原来newBranch因为没有提交会丢失,提交吧newBranch又没有完成,总不能写一个“待完成”的提交原因吧。这个时候,stash来拯救我们了:

$ ls
currentwork.txt newDev.txt readme.txt
$ git status
On branch master
Your branch is up-to-date with 'origin/master'. Untracked files:
(use "git add <file>..." to include in what will be committed) currentwork.txt nothing added to commit but untracked files present (use "git add" to track)

上面可以看到我们正在currentwork.txt玩命工作,这个时候接到修复readme.txt的bug,用stash(隐藏物的意思)功能把当前的工作区隐藏起来就能新建一个分支了。

首先确定currentwork.txt已经被add,没有add的话,文件是还没有添加到git的管理中的,添加后就能使用stash命令了

$ git stash
Saved working directory and index state WIP on currentBranch: 832fb4f fix readme bug
HEAD is now at 832fb4f fix an importent bug
$ git status
On branch master
On branch currentBranch
nothing to commit, working directory clean

好了现在可以知道工作区已经被隐藏起来,切换到master可以放心的建立新分支了

建立新分支,修复readme bug,然后合并分支,跟之前分支管理内容是一样的:

$git checkout master
Switched to branch 'master'
$ git checkout -b issue-108
Switched to a new branch 'issue-108'
/*修复bug*/
$ git status
On branch issue-108
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: readme.txt no changes added to commit (use "git add" and/or "git commit -a")
$ git add readme.txt
$ git commit -m "fix readme bug"
[issue-108 832fb4f] fix readme bug
1 file changed, 1 insertion(+)
$ git checkout master
Switched to branch 'master'
$ git merge issue-108
Updating 2a4d4ea..832fb4f
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)

好了bug修复了,现在可以切回我们的开始工作的工作区了,用stash list命令查看一下当前的隐藏工作区,找到以后使用stash pop找回工作区并删除原来隐藏工作,或者使用stash apply找回原来工作区,但是需要用stash drop删除隐藏的工作区,

$ git checkout currentBranch
Switched to branch 'currentBranch'
$ ls
newDev.txt readme.txt
$ git stash pop
$ ls
currentwork.txt newDev.txt readme.txt

ok,工作区又回来了,可以继续工作了

但是看看readme.txt内容还是原来的也就是这个bug因为没有合并主分支,并没有得到修复,怎么办呢,我的建议是如果bug不影响当前开发的话就先继续开发,以后合并分支后,重新建立该分支。注意的是即使合并分支后currentBranch的分支bug也还是存在的。但是主master不会因为合并丢失bug修复。

3.feature 分支

软件开发中总是有新功能需要添加进来,添加一些实验性质的代码我们最好不好把主分支给搞乱了,所以需要新建一个分支。但是如果在实验阶段证明新功能并不适合实际需要,需要删除。。like this:

$ git checkout -b feature-talk
Switched to a new branch 'feature-talk' /*修改currentwork.txt*/ $ git add currentwork.txt
$ git commit -m "talk"
[feature-talk c680bff] talk
1 file changed, 1 insertion(+)

ok,虽然完成了很多功能,但是需要删除了

$ git branch -d feature-talk
error: The branch 'feature-talk' is not fully merged.
If you are sure you want to delete it, run 'git branch -D feature-talk'.

git会很友好的告诉我们这个分支还没有合并不能删除啊,如果强制删除使用 -D

好吧,我们确实是不需要了,删除这个分支

$ git branch -D feature-talk
Deleted branch feature-talk (was c680bff).

git学习(5)分支管理(续)的更多相关文章

  1. git学习笔记 ---分支管理

    分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...

  2. 四、git学习之——分支管理、解决冲突

    分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并 ...

  3. git学习笔记 --分支管理策略

    通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的comm ...

  4. 五、git学习之——分支管理策略、Bug分支、feature分支、多人协作

    一.分支管理策略 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生 ...

  5. git学习(7)标签管理

    git学习(7)标签管理 1. 建立标签 在发布版本时候,我们通常会在版本库中打一个标签,这样就唯一确定了打标签的版本,有点像个里程碑,这里会有一个指向某个commit的指针 打标签很简单,首先切换到 ...

  6. python使用git进行版本控制-分支管理

    1.远程克隆 最好的方式是先创建远程库,然后,从远程库克隆: 首先在github上创建一个新的仓库,名字叫gitskills 我们勾选Initialize this repository with a ...

  7. Git如何进行分支管理?

    Git如何进行分支管理?     1.创建分支     创建分支很简单:git branch <分支名>     2.切换分支     git checkout <分支名>   ...

  8. Git 远程仓库分支管理

    目录 目录 速查表 关联远程代码仓库 克隆远程仓库 分支管理 创建分支 切换分支 合并分支 删除分支 解决冲突 速查表 指令 作用 git branch 查看分支 git branch newBran ...

  9. Git远程和分支管理

    一.远程       Git是分布式版本控制系统,最重要的优点就是远程仓库托管代码.不用自己搭建一个服务器,在github上面注册一个账户就可免费获取远程仓库.      首先需要先在github上面 ...

  10. Git教程之分支管理之二

    分支管理策略 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息.如果要强制禁用Fast forward模式,Git就会在merge时生成一个 ...

随机推荐

  1. 安装oracle11g 并且开启APEX 安装

    1.Windows下Oracle安装图解----oracle-win-64-11g 详细安装步骤 - souvc - 博客园 oracle 11g 下载网址   一. Oracle 下载   官方下地 ...

  2. Linux SSH登录服务器报ECDSA host key "ip地址" for has changed and you have requested strict checking.错误

    Linux SSH命令用了那么久,第一次遇到这样的错误:ECDSA host key "ip地址" for  has changed and you have requested ...

  3. 一些lua代码

    1.把k--v表转化为数组表,只支持2级 2.取中值 3.字符串按每行最多n像素分割,并返回每行最大宽度,可以用"\n"手动换行

  4. Gogs http和ssh地址显示localhost的问题

    问题描述: 如下图所示HTTP和SSH地址显示的是localhost而不是对应的域名或地址. 解决方案: 按以下方法修改Gogs配置文件并重启服务器 域名问题 RUN_USER = git DOMAI ...

  5. 树形dp - Codeforces Round #322 (Div. 2) F Zublicanes and Mumocrates

    Zublicanes and Mumocrates Problem's Link Mean: 给定一个无向图,需要把这个图分成两部分,使得两部分中边数为1的结点数量相等,最少需要去掉多少条边. ana ...

  6. [android] AndroidManifest.xml - 【 manifest -> 其他次要配置】

    <uses-sdk> 作用:使应用程序的兼容性更好,指明应用程序需要的最小API,编译API以及最大支持的API.值都是整数 <uses-sdk android:minSdkVers ...

  7. 多媒体开发之rtsp 实现rtsp over tcp/http/udp---rtsp发送

    (1) (2) (3) http://itindex.net/detail/51966-海康-rtsp-客户端 http://bbs.csdn.net/topics/390488547?page=1# ...

  8. 【noip模拟题】天神下凡(贪心)

    vijos某次模拟赛原题... 处理出每个圆的一级祖先就行了... 其实没有那么麻烦,贪心即可出解. 我们将每个圆转换成线段后按左端点小右端点大的方法排序 然后维护一个栈: 对于每一个圆i 如果栈顶右 ...

  9. 转载:基于Redis实现分布式锁

    转载:基于Redis实现分布式锁  ,出处: http://blog.csdn.net/ugg/article/details/41894947 背景在很多互联网产品应用中,有些场景需要加锁处理,比如 ...

  10. [WPF]实现密码框的密码绑定

    正如绑定TextBox控件的Text属性一样, 我们希望能够将PasswordBox空间的Password属性进行绑定, 比如在MVVM模式中,这似乎是必须的, 但可惜的是, Password属性是不 ...