git 两个分支对比以及合并

git 两个分支对比以及合并

git diff不加参数即默认比较工作区与暂存区。
git diff 命令在生成和应用补丁方面扮演着重要的角色。‌它允许开发者查看代码的差异,‌并且能够生成补丁文件,‌这些补丁文件包含了代码修改的差异部分,‌不包含任何文件的完整内容。‌

显示两个分支提示之间的差异

git branch -va
git diff branch_1 branch_2	

显示两个分支提示之间的差异,包括内容更改

--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单, 对变化的文件名和变化的状态进行打印。

–diff-filter=[(A|C|D|M|R|T|U|X|B)…[*]]仅选择已添加 (A)、已复制 (C)、已删除 (D)、已修改 (M)、重命名 (R)、类型(即常规文件、符号链接、子模块等)已更改 (T)、未合并 (U)、未知 (X) 或配对已中断 (B) 的文件。可以使用筛选器字符的任意组合(包括无字符)。将 *(全部或无)添加到组合中时,如果有任何文件与比较中的其他条件匹配,则选择所有路径;如果没有与其他条件匹配的文件,则不会选择任何内容。

此外,这些大写字母可以小写以排除。例如,–diff-filter=ad 排除添加和删除的路径。

使用图形化工具,如pycharm

本地分支和某个远端分支对比:

  • 绿色:本地分支多出来的文件
  • 蓝色:差异的文件
  • 灰色:目标分支有,本地分支没有的文件

在源码文件或目录上,右键,如下图选择某个分支要和你当前分支进行对比:
在这里插入图片描述

打补丁的一般流程

Git 提供了两种补丁方案,

  • 一是用git diff生成的UNIX标准补丁.diff文件,
  • 二是git format-patch生成的Git专用.patch 文件。

.diff文件只是记录文件改变的内容,不带有commit记录信息,多个commit可以合并成一个diff文件。
.patch文件带有记录文件改变的内容,也带有commit记录信息,每个commit对应一个patch文件。

git diff commit_id1 commit_id2 > test.patch 

git diff commit_id 会生成最后一次提交到目前修改过的内容补丁

git diff commit_id1 commit_id2 

会生成两次提交之间修改过的内容补丁

diff命令:生成补丁包文件

生成补丁是 Git 中一个非常有用的功能,可以将代码进行修改后生成的差异文件。使用 Git 的 diff 命令可以生成补丁文件,供其他开发者进行代码修改或者合并操作。

当diff比较新旧两个文件的差异后,将比较结果保存到patch文件里,然后使用patch命令利用补丁文件升级旧文件(打补丁),或把新文件回退成旧文件(卸载补丁)

patch命令:打补丁命令

TODO

Git Merge 与 Rebase

Git中Merge和Rebase是整合分支的常用方法。Merge保留完整历史记录,但可能产生复杂历史;Rebase创建干净线性历史,但改变提交哈希。

如果你想要保留完整的历史记录,包括所有的分支点和合并点,那么Merge是一个好选择。

个人使用习惯总结: 在main上只用merge,在自己的feature上优先使用rebase拉取main上最新代码。

[重要]使用 merge 命令来进行分支合并

使用 merge 命令来进行分支合并是 Git 中最重要的操作之一。

这种合并是将两个分支的历史合并到一起,现有的分支并不会被更改,它会比对双方不同的文件缓存下来,生成一个commit,去push

  • 优点: 安全,现有分支不会被修改

  • 缺点: 或多或少都会污染一点分支历史,在回看项目时会增加理解项目历史的难度

  • 用处: 一般用于公共master主分支

当你想要将一个分支的更改整合到另一个分支时,可以使用Merge。

假设你有一个主分支main和一个功能分支feature,你想将feature分支的更改合并到main分支。

  1. 切换到main分支:
git checkout main
  1. 使用git merge命令合并feature分支:
git merge feature

合并操作可以通过reset 命令来取消

git reset --merge

rebase 命令使用

Rebase是另一种整合分支的方法,它会将当前分支的更改“重新播放”在另一个分支的顶部。这意味着它会创建一个新的更改序列。

使用场景

  • 当你想要一个干净、线性的项目历史时。
  • 在将功能分支合并到主分支之前,确保功能分支的更新

如果你想用rebase将feature分支的更改整合到main分支。

  1. 切换到feature分支:
git checkout feature
  1. 使用git rebase命令将feature分支变基到main分支:
git rebase main

解决可能出现的冲突,并继续变基过程。

  1. 最后,切换到main分支,并使用git merge将变基后的feature分支合并进来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值