前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【Git版本控制器】第四弹——分支管理,合并冲突,--no-ff,git stash

【Git版本控制器】第四弹——分支管理,合并冲突,--no-ff,git stash

作者头像
用户11396661
发布2025-02-24 08:52:08
发布2025-02-24 08:52:08
4900
代码可运行
举报
文章被收录于专栏:C++开发C++开发
运行总次数:0
代码可运行

相关笔记: https://blog.csdn.net/djdjiejsn/category_12893502.html

前言:

分布式版本控制系统(Distributed Version Control System,简称 DVCS)是一种将代码仓库完整地复制到每个开发者本地的版本控制系统。与集中式版本控制系统(如 SVN)不同,分布式版本控制系统中的每个开发者都拥有代码仓库的完整副本,包括所有的历史记录分支标签等信息。

1.分支

1.1认识分支:

在前面就讲过每一次提交都会有记录,有一条线,这是master的主分支。然而,我们还可以创建其他的分支,进行分支操作,分支编写代码。

下面就是没其他其他分支的master分支。

代码语言:javascript
代码运行次数:0
复制
git log --graph --abbrev-commit

1.2创建分支:

git branch进行创建分支,没有加名字就是查看当前所有的分支,加上就是创建分支

代码语言:javascript
代码运行次数:0
复制
git branch    //查看所有的分支
git branch (分支名)    //创建分支

比如我查看我现在的分支:

现在只有一个分支:master分支,然后我们创建了dev1,dev2分支。

然后就再次用git branch进行查看分支就有三个了。

* 绿色的就是当前所在的分支。*表示HEAD指向的哪个分支。

1.3切换分支

前面的git checkout -- 是撤销工作区的修改,撤销到最近一次的暂存区或者版本库。

但是不加--的意思就是分支切换了。

代码语言:javascript
代码运行次数:0
复制
git checkout (分支名)    //分支切换

此时的HEAD就指向dev1分支了。

1.4 在分支进行代码操作

我们在dev1分支进行代码编写,然后完成一次add,commit操作以后,进行的就是dev分支进行操作。而且在其他分支下是看到这个新增的代码的。

在dev1新增,并且保存,在master分支,还有dev2分支都是看不到的。

要想在master分支看到,就要在master进行合并。


2分支合并

2.1未发生合并冲突的合并:

使用git merge进行分支合并。

代码语言:javascript
代码运行次数:0
复制
git merge (分支名)

然后我们进行查看,就可以看到dev分支的内容了。

这时候就是正常的合并,没有出现合并冲突的。

特别注意一下Fast-forward这个,ff合并,不会产生新的commit信息。

下面的最新一次信息还是devcommit产生的信息。

这个用图示来解释就是master直接指向dev1分支了。

master直接就指向最新一次的dev1进行的commit。

简化的就是这样了:

正常情况下 ,merge如果没有发生冲突,也没有写--no-ff 进行合并,那么就是Fast forward模式进行合并,这种合并不会产生新的commit。这种合并,如果以后把分支删除了,就分辨不出来这部分是merge到master里面来的,还是正常master,commit提交的。所以我们不建议使用Fast forward模式进行操作。而是每次merge时都要--no-ff,表示不要进行Fast forward模式进行合并。

加上这个选项以后,就要-m "commit描述信息".

这样就会形成一个新的commit。

2.2发生冲突的合并

这种情况就要手动进行代码修改,然后再进行一次commit。

Auto-merging file1 CONFLICT (content): Merge conflict in file1 Automatic merge failed; fix conflicts and then commit the result.

提示信息说,自动合并出错,需要手动fix,然后进行commit最后的结构。

然后我们打开我们的file1

代码语言:javascript
代码运行次数:0
复制
aaaaaaaaaaaaaaaaaa
dev1 add bbbbbbbbb
<<<<<<< HEAD
master master master
=======
dev dev dev dev dev
>>>>>>> dev

<<<<<<<<HEAD到=======是当前分支的内容。

=======到>>>>>>dev是dev分支修改的内容。

然后我们想要怎么修改,我们手动进行修改,再进行commit。

如果没有发生冲突,也是可以用--no-ff 进行mege形成新的commit的。


3.删除分支:

当分支合并以后,分支就基本没用了,我们就可以把分支删除了,使用的命令是:

代码语言:javascript
代码运行次数:0
复制
git branch -d (已经合并的分支名)

这个只能删除已经合并的分支。

不能删除还没有合并的分支。

删除没有合并的分支,要d变为D才能删除。

代码语言:javascript
代码运行次数:0
复制
git branch -D (未合并的分支名)

4.Bug分支

git stash的作用是保护还没有commit的工作区和暂存区。

git stash 的主要用途: 临时保存更改:当你正在开发某个功能或修复某个问题时,突然需要切换到另一个任务,但又不想提交当前未完成的更改。 清理工作区:在切换分支或合并代码之前,需要清理工作区,但又不想丢失当前的更改。 快速切换任务:在多个任务之间快速切换,而不需要频繁提交和回滚更改

代码语言:javascript
代码运行次数:0
复制
//保存当前更改到 Stash
git stash

//切换到修复问题的分支
git checkout fix-branch

//修复问题并提交
git add .
git commit -m "Fix urgent issue"

//切换回原来的分支
git checkout feature-branch

//重新应用保存的更改
git stash apply
代码语言:javascript
代码运行次数:0
复制
//将stash放到工作区
git stash pop
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.分支
    • 1.1认识分支:
    • 1.2创建分支:
    • 1.3切换分支
    • 1.4 在分支进行代码操作
  • 2分支合并
    • 2.1未发生合并冲突的合并:
    • 2.2发生冲突的合并
  • 3.删除分支:
  • 4.Bug分支
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档