Github & Git基础操作总结 Ⅱ分支管理

Github & Git基础操作总结 Ⅱ分支管理

参考廖雪峰老师网站:Git教程

5.Git 分支管理

分支管理可以使版本库的演进保持简洁,主干清晰,各个分支各司其职、井井有条。

主分支Master只有一个,它是自动建立的,默认就是在主分支在进行开发。所有提供给用户使用的正式版本,都在这个主分支上发布。
开发分支Develop,这个分支可以用来生成代码的最新隔夜版本(nightly)。如果想正式对外发布,就在Master分支上,对Develop分支进行"合并"(merge)。
团队成员都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并。

5.1创建和合并分支

Git用master指向最新的提交,每次提交,master分支都会向前移动一步。

1)创建新的分支dev
Git新建了一个指针指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上

git checkout -b dev 或 git switch -c dev#创建并切换到dev分支

相当于

git branch dev #创建新的分支
git checkout dev  #切换到新分支

查看当前分支

git branch
* dev
  master

2)在dev分支进行修改和提交(vim + add + commit)

此时如果回到master分支查看文件,文件还是修改前的状态

3)merge master and dev

git switch master #切换到master分支
git merge dev #合并指定分支到当前分支

此时master分支中文件的内容和dev分支的最新提交是完全一样的。

4)删除dev分支

git branch -d dev
5.2解决冲突

master分支和feature1分支各自都分别有新的提交,变成了这样

此时进行合并会有冲突,必须手动解决冲突。可以直接查看文件中的内容

没问题的部分+
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

手动修改master中的部分再add,commit,merge,如图所示

用git log --graph可以看到分支的合并情况

$ git log --graph --pretty=oneline --abbrev-commit
*   cf810e4 (HEAD -> master) conflict fixed
|\
| * 14096d0 (feature1) AND simple
* | 5dc6824 & simple
|/
* b17d20e branch test
...

最后,删除feature1分支

5.3–no-ff方式的git merge

1)合并方式
合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

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

用git log看看分支历史:

*   e1e9c68 (HEAD -> master) merge with no-ff
|\
| * f52c633 (dev) add merge
|/
*   cf810e4 conflict fixed
...

2)Fast-forward与no-ff的区别

来自fangchao3652博客git Fast-forward与no-ff的区别

使用no-ff后,会多生成一个commit 记录,强制保留dev分支的开发记录
而fast-forward的话则是直接合并,看不出之前Branch的任何记录

5.4Bug分支

当你接到一个修复一个代号101的bug的任务时,你想创建一个分支issue-101来修复它,但是,当前正在dev上进行的工作还没法提交,Git stash功能可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。

$git stash
Saved working directory and index state WIP on dev: f52c633 add merge

用git status查看工作区,就是干净的,可以放心地创建分支来修复bug。

假定需要在master分支上修复,就从master创建临时分支,修复bug,add,commit,merge,删除issue-101分支,回到dev分支干活。此时查看工作区

$git status
On branch dev
nothing to commit, working tree clean

用git stash list命令看看:

$ git stash list
stash@{0}: WIP on dev: f52c633 add merge

进行恢复同时把stash内容也删了

git stash pop
git stash apply stash@{0} #恢复指定的stash

在dev分支上修复同样的bug,我们只需要把commit时显示的4c805e2 fix bug 101这个提交所做的修改“复制”到dev分支。

$ git branch
* dev
  master
$ git cherry-pick 4c805e2
[master 1d4b803] fix bug 101
 1 file changed, 1 insertion(+), 1 deletion(-)
5.5Feature分支

开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以强行删除

git branch -D <分支名>
5.6多人协作

1)查看远程库的信息
远程仓库的默认名称是origin

git remote (-v) #-v显示更详细信息

2)抓取分支

clone下远程仓库

git clone git@github.com:

默认情况下,只能看到本地的master分支,可以用git branch查看。

要在dev分支上开发,就必须创建远程origin的dev分支到本地

git checkout -b dev(本地分支名) origin/dev(远程分支名)

在本地dev上修改,add,commit

3)推送分支

把本地分支上的所有本地提交推送到远程库

git push origin master/dev/...(本地分支名)

4)解决冲突

如果同事的最新提交和你试图推送的提交有冲突导致push失败,先抓取最新提交在本地合并解决冲突

git pull

如果没有指定本地dev分支与远程origin/dev分支的链接导致git pull失败,提示“no tracking information”

git branch --set-upstream branch-name origin/branch-name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值