Git 学习笔记<分支管理> (三)

分支是什么?

分支就像树分出的树枝,不同的是,它们之间可以互相合并。

将版本的推进想象成一个链表的伸长:  version 1.0 ==》 version 2.0 ==》version3.0  。

master是主要的分支基本上用于发布产品。你可以从master分出一个dev,在上面创建新功能,或者修bug然后调试。最后再合并到master里面。就像下面这样。

master分支:  version 1.0=========》version 2.0===...

\                            / (merge)

dev分支:              \=version 1.5=/=========...

甚至还可以有更多分支

master分支:  version 1.0=========》version 2.0===...

          \                            / (merge)

dev分支 :     \→→→O→→→→  O=========...

             \                     / (merge)

Hanson分支:       \ -> 修BUG ->/

分支不主动删除是不会消失的。

(另外,当前版本可以认为是一个指针指向链表最后一个节点,reset (第二章) 命令 就是把指针往前移,revert命令还是向后移。 )

如何管理分支?

1.创建与查看分支:

现在我们要创建一个名为dev的分支。(Dev在软件开发中多用于开发软件的代号,与Beta(测试版)的意思相近,其意思为"开发中的版本" 即development version或development edition etc。)创建分支的命令是 $git branch dev 移动到指定分支的命令是 $git checkout dev 

也有一个将两个命令合起来的简便方法:$git checkout -b dev  这样就直接创建并转到分支dev上。(相当于当前master版本的一个副本。)

在windows上的git bash上可以通过每行命令上面那行最后的括号确定现在是哪个分支。在linux上没有。

如何查看当前有哪些分支和确定在哪条分支上呢?    输入 :$git branch  ,会列出所有分支,分支前面的星号就是当前所在分支。

$git branch

*dev

master

2.合并与删除分支:

将工作区内容修改后 使用 $git add hello.txt  和 $git commit hello.txt -m "modify" 上传就dev分支

然后 $git checkout master 切换到master分支后,输入 $git merge dev 这样dev就会融入master。

若是想删除掉dev分支 输入$ git branch -d dev 即可。(如果没有合并就想要废弃这条分支 需要使用$git branch -D dev)

在使用merge命令时,可以添加参数 -m "blabla" 也就是添加备注。

还有一个参数是 --no-ff :

顾名思义 这个参数的意思是 不要FF模式。

FF 即 fast forward ,这种模式下,删除分支后,会丢掉分支信息。 就像这个分支从来没存在过一样。

而如果使用 --no-ff 就会我开头举的例子,Hanson分支被删除后仍然存在于记录中。会在merge时生成一个新的commit 。

这条命令会是这样

git merge --no-ff -m "merge with no-ff" Hanson

另外还有一些原则需要遵守

master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

或许你已经想到了这个问题 “要是合并的时候有冲突怎么办?”

比如两个分支不约而同地修改了同一行。 在master上 你改了 hello.txt 最后一行,在dev上也改了hello.txt最后一行都提交上去了。

git是这样做的:合并的时候git发现了这样的冲突,它只好试图将两行合起来,并 提示你:

Auto-merging hello.txt

CONFLICT (content): Merge conflict in hello.txt

Automatic merge failed; fix conflicts and then commit the result.

你从这知道 需要你手动更改文件合并 然后提交。

输入$git status 可以查看冲突的文件

# On branch master
# Your branch is ahead of ‘origin/master‘ by 1 commits.      (这一句是说当前的master超前远程仓库的master一个commit)
#
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both modified:      hello.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

打开对应的 hello.txt 文件 发现你分别修改的两行是以这样的形式存在在文件中:

<<<<<<< HEAD
………的……
=======
………地……
>>>>>>> dev

这样就标记了不同的分支中的内容 然后需要你手动更改并 $git add hello.txt 与commit -m 提交。

使用 $git log带参数可以看到合并情况 关于参数以后再详细记录笔记。

$ git log --graph --pretty=oneline --abbrev-commit

3.临时储存工作现场

你常常会遇到这样的情况,你正在自己的分支上做一个新功能,但是有一个BUG需要在一小时内解决。你不可能直接切换到一个新分支来修复bug,这样你做了大半天的工作就没了。也不可能在这个分支上修复提交,因为等你新功能写完还得好久。

输入 $ git stash save "work in progress for foo feature" (save命令是用于备注,并非必须)吧 你会发现工作区变成了当前分支上次提交的样子,这时候你就可以放心的创建分支修复BUG了。

修复之后,你想回到dev继续工作了!

输入 $git stash list 

下面就会显示stash的列表,像这样:[email protected]{0}: WIP on dev: …………

怎么恢复呢?有两个办法:

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除,

默认是恢复最后一次保存。如果你多次保存,想恢复前面保存的现场。就得根据stash list找到前面的标志恢复,像这样

git stash apply [email protected]{1}  ;

另一种方式是用$git stash pop,恢复的同时把stash内容也删了,这种方法只能恢复最后一次stash。

$git stash clear  用于清除stash列表。

Git 学习笔记<分支管理> (三)

时间: 2024-12-26 09:55:12

Git 学习笔记<分支管理> (三)的相关文章

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

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN! 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了.如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险. 现在有了分支,就不用怕了.你

git学习 六 分支管理

分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平行宇宙合并了,结果,你既学会了Git又学会了SVN! 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了.如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险. 现在有了分支,就不用怕了.你

git学习 九 分支管理策略

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息. 下面我们实战一下--no-ff方式的git merge: 首先,仍然创建并切换dev分支: $ git checkout -b dev Switched to a new branch 'dev' 修改readme.txt文件,并提交一个新的commit

Git 学习笔记&lt;远程仓库与标签管理&gt; (四)

什么是远程仓库? 就像第一章介绍的那样,远程仓库可以储存你编写的所有源码和资源文件. 甚至也可以当网盘使,不过当然有很多契合git管理文本的特性. 下面就要以 github 为示例远程仓库进行介绍.  (也可以自己弄一台服务器作远程仓库). 创建仓库 在主页找到 +New repository 或者右上角的加号里有.输入名字 描述 然后没钱只能public就能确定了.然后呢,点名字打开你的仓库.(主页右下角可以找到) 关于与远程仓库的连接 首先你打开你的保险箱得先证明身份吧,不然我怎么知道你是客

Git学习笔记(8)——标签管理

本文主要记录的Git标签的作用.标签的多种创建方式,以及标签的删除,与推送,和使用GitHub的Fork参与别人的项目. 标签的作用 发布版本时,通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本.无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照.Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像,但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的. 创建标签 [email pro

【版本控制】git学习笔记(三)

接着git学习笔记(二)学习,今天学习下git分支管理. 1.创建合并分支 默认创建的git目录只有master一个分支,现在我们创建dev分支,然后切换到dev分支: $ git checkout -b dev git checkout命令加上-b参数表示创建并切换,相当于以下两条命令: $ git branch dev $ git checkout dev 然后,用git branch命令查看当前分支: git branch命令会列出所有分支,当前分支前面会标一个*号. 然后,我们就可以在d

Git学习笔记(6)——Bug和Feature分支

本文主要记录了通过Git来调试Bug和添加新的功能,也就是Bug分支和Feature分支,以及分支的推送. Bug分支 通过Git,我们可以为每个Bug建立一个分支,Bug修复后,合并分支,然后将临时分支删除. 当有Bug的时候,想创建一个分支bug-101来修复它,如果,当前正在dev上进行的工作还没有完成,不能提交,而且,我们必须马上解决bug,这时,我们借助Git提供的stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作. [email protected]:~/joe

Git学习笔记总结和注意事项

一.Git简介 Git是目前世界上最先进的分布式版本控制系统,其特点简单来说就是:高端大气上档次! 二.Windows上Git安装 最早Git是在Linux上开发的,很长一段时间内,Git也只能在Linux和Unix系统上跑.不过,慢慢地有人把它移植到了Windows上.现在,Git可以在Linux.Unix.Mac和Windows这几大平台上正常运行了. msysgit是Windows版的Git,从http://msysgit.github.io/下载,然后按默认选项安装即可.安装完成后,在开

Git学习笔记整理

Git学习笔记 1.安装Git 注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置 $ git config --global user.name "Your Name" $ git config --global user.email "[email protected]" 2.创建版本库-repository $ mkdir learngit $ cd learngit $ pwd /Users/m