Git -- 分支与合并 (命令行+可视化工具p4merge)

简介: 基本命令 把所有的变化都放在master分支并不是最好的做法. 建议的做法是把变化放在分支里面. 至少应该准备一个feature分支之类的, 把变化都隔离开来, 然后等到所有的功能都稳定之后再合并到master分支.

基本命令

把所有的变化都放在master分支并不是最好的做法. 建议的做法是把变化放在分支里面.

至少应该准备一个feature分支之类的, 把变化都隔离开来, 然后等到所有的功能都稳定之后再合并到master分支.

说到分支, 就得使用git branch命令.

列出所有的分支:

git branch 会列出所有的本地分支.

git branch -a 会列出本地和远程的所有分支.

git branch
git branch -a

 

绿色的是本地的分支, 红色的是远程分支.

星号是表示这时当前活跃的分支.

 

创建分支:

git branch 分知名:

git branch mynewbranch

 

 

切换分支.

想切换分支的话, 需要使用git checkout 分知名 这个命令

git checkout mynewbranch

 

那再看看历史纪录: 

因为我现在还没有做任何更改, 所以这些分支都指向同一个commit, 其实分支就是标签/指针而已.

 

修改分支名.

再切换到master分支: git checkout master.

然后使用git branch -m 分支名 新分知名 来进行改名操作.

 

删除分支.

注意不能删除当前活跃的分支.

使用命令git branch -d 分支名.

git branch -d newbranch

 

 

Fast Forward 合并

快捷操作: 切换并创建分支: 

git checkout -b 分支名.

git checkout -b some-change

 

然后我打开某个文件(index.html)修改一下标题.

Commit之后查看历史纪录, 可以看到再some-change分支里, 修改了index.html的title.

如果我想要把这个commit合并到master分支.

首先要切换回到master分支:

git checkout master

 

然后, 我需要知道发生了哪些变化, 也就是比较这两个分支:

git diff master some-change

 

也可以可视化查看: 

git difftool master some-change

 

我这台电脑没有配置p4merge, 所以默认的可能是使用vimdiff可视化工具:

然后按esc再按:q退出.

最后就是合并变化: git merge 需要被合并进来的分支名.

git merge some-change

 

可以看到里面列出了所涉及的commits, 并且这是一个fast-forward合并, 所涉及的文件, 以及有哪些变化.

 

因为这是一个Fast Forward合并, Git把feature分支后来所有的commits都放在了master分支上, 就像没有分开过一样:

但是Fast-forward合并只有在满足这个条件的时候才可能执行: 合并的时候master分支没有任何变化.

合并后的状态如下:

合并之后, 就不需要这个分支了, 删除:

git branch -d some-change

 

这时, git log里面只有master了.

 

禁用 Fast Forward 合并

添加一个分支, 并且换到该分支:

git checkout -b add-text

 

然后我再index.html里面添加点文字, 并commit.

然后再修改README.md, 添加文字, commit.

现在在 add-text这个分支上, 有两个commit, 看下log:

 

然后把这个分支合并到master分支.

首先切换到master分支, 然后再进行git merge, 但是这一次, 我想把我这个分支的过程留下痕迹, 所以要禁用fast-forward 合并:

git merge 要被合并进来的分支 --no-ff.

这样做的话, 将会出现一个新的合并commit, 

然后查看git log:

可以看到, 整个分支的过程被记录了下来.

最后删除这个分支, 并查看log:

可以看到, 删除分支以后, log里面分支的名没有了, 但是分支还在.

 

自动合并

创建一个分支并切换:

git checkout -b simple-changes

 

修改一个文件然后commit:

然后回到master分支:

再修改某个文件, 然后commit:

查看log:

红线里面那部分就比较有趣了, 两个分支都有变化/commits.

这种情况可以这么合并:

git merge 被合并进来的分支 -m "自定义信息".

git merge simple-changes -m "merging changes from simple-changes"

 

查看log:

可以看到分支的合并已经完成了.

最后删除分支, 查看log:

效果一样, 分支名没了, 但是分支的历史还是保留着的.

可以打开两个文件看看, 改变的内容都保留着了.

 

解决合并的冲突

如果两个分支上都对同一个文件进行了修改, 那么就有可能发生冲突.

 

首先创建一个分支, 并切换到该分支上:

然后修改index.html, 修改几个地方吧.

然后查看状态, 并commit:

然后切换到master, 并编辑同一个文件:

而这时index.html并不是realwork分支修改后的样子, 而是修改之前的样子:

然后修改index.html, 修改几处可能引起冲突的地方.

commit:

然后查看log:

接下来最应该做的就是diff:

也可以使用可视化工具进行diff:

下面进行合并:

不出所料, 冲突发生了, 自动合并失败.

现在的状态, 应该叫做Merging状态.

现在打开index.html是这样的:

可以看到两处冲突, 每处都有HEAD(master)版的和realwork分支版的.

上图我使用的是Visual Studio Code, 可以点击上面的按钮来进行冲突的解决, 也可以手动修改文件进行解决.

但是在这里我使用我配置好的mergetool:

git mergetool. 这个命令将会打开p4merge(我本机配置的mergetool):

按图示操作, 点击图标选择不同的版本, 最后点击保存即可.

关闭p4merge:

然后commit:

commit之后, 状态就不再是merging了, 但是会出现一个未被追踪的文件:

这是因为在解决冲突的时候, git会保存一个带有触痛的原始版本, 以备不时之需:

但是.orig文件是不应该被追踪的, 所以需要添加到.gitignore文件中:

然后查看状态:

这次只有.gitignore发生了变化.

commit:

最后可以删除 realwork 分支了:

查看log:

Ok.

下面是我的关于ASP.NET Core Web API相关技术的公众号--草根专栏:

目录
相关文章
|
1天前
|
Rust 数据可视化 网络安全
一款高颜值、现代化的 Git 可视化管理工具
GitButler 是由 GitHub 联合创始人 Scott Chacon 开源的 Git 客户端,采用 Tauri/Rust/Svelte 构建。它支持虚拟分支、轻松提交管理、GitHub 集成、SSH 密钥管理和 AI 工具等功能,目前仅支持 macOS 和 Linux 平台。用户可以通过拖拽方式快速聚合多个分支的改动,实现灵活的跨分支操作。
|
9天前
|
存储 开发工具 git
git工具使用教程全讲解
本文介绍了版本控制的概念及其重要性,详细对比了多种版本控制工具,如VSS、CVS、SVN和Git,重点讲解了Git的基本使用方法、工作原理及与SVN的区别。此外,文章还介绍了GitHub、GitLab和Gitee等流行的代码托管平台,以及如何在这些平台上注册账号、创建和管理仓库。最后,文章还提供了如何在IntelliJ IDEA中配置和使用Git的具体步骤。
29 1
|
1月前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
104 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
|
1月前
|
开发工具 git 开发者
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
本文通过具体操作和截图,详细讲解了如何在Git中解决分支冲突问题,包括如何识别冲突、手动解决冲突代码、提交合并后的代码,以及推送到远程分支。
316 3
关于git 解决分支冲突问题(具体操作,包含截图,教你一步一步解决冲突问题)
|
1月前
|
存储 数据可视化 开发工具
2款.NET开源且免费的Git可视化管理工具
2款.NET开源且免费的Git可视化管理工具
|
2月前
|
缓存 开发工具 git
Git创建分支以及合并分支
在Git中,创建分支使用`git branch [branch_name]`,切换分支使用`git checkout [branch_name]`。修改文件后,通过`git add [file]`添加到暂存区,然后`git commit`提交到本地仓库。如果是新建分支的第一次推送,使用`git push origin [branch_name]`推送到远程仓库,之后可以简化为`git push`。合并分支时,使用`git merge [branch_name]`将指定分支的更改合并到当前分支。
58 2
Git创建分支以及合并分支
|
1月前
|
开发工具 git
Git分支使用总结
Git分支使用总结
35 1
|
1月前
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
37 1
|
2月前
|
存储 Linux 开发工具
Git基础命令,分支,标签的使用【快速入门Git】
本文详细介绍了Git版本控制系统的基础概念和常用命令,包括工作区、暂存区和版本库的区别,文件状态的变化,以及如何进行文件的添加、提交、查看状态、重命名、删除、查看提交历史、远程仓库操作和分支管理,还涉及了Git标签的创建和删除,旨在帮助读者快速入门Git。
Git基础命令,分支,标签的使用【快速入门Git】
|
2月前
|
测试技术 开发工具 git
掌握 Git 分支策略:提升你的版本控制技能
在现代软件开发中,版本控制至关重要,Git 作为最流行的分布式版本控制系统,其分支管理策略对于高效协作和代码维护尤为重要。本文介绍了几种常用的 Git 分支策略,包括主线开发模型、功能分支模型、Gitflow 工作流和 Forking 工作流,并探讨了如何根据项目需求选择合适的分支模型。通过保持 `master` 分支稳定、及时合并清理分支、使用命名规范、利用 Pull Request 进行代码审查及自动化测试等最佳实践,可以显著提升团队协作效率和软件质量。掌握这些策略将帮助开发者更好地管理代码库,加快开发流程。