git 两个分支对比以及合并
git 两个分支对比以及合并
git diff
不加参数即默认比较工作区与暂存区。
git diff
命令在生成和应用补丁方面扮演着重要的角色。它允许开发者查看代码的差异,并且能够生成补丁文件,这些补丁文件包含了代码修改的差异部分,不包含任何文件的完整内容。
显示两个分支提示之间的差异
git branch -vagitdiff 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文件。
gitdiff commit_id1 commit_id2 > test.patch
git diff commit_id
会生成最后一次提交到目前修改过的内容补丁
gitdiff 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分支。
- 切换到main分支:
git checkout main
- 使用git merge命令合并feature分支:
git merge feature
合并操作可以通过reset 命令来取消
git reset --merge
rebase 命令使用
Rebase是另一种整合分支的方法,它会将当前分支的更改“重新播放”在另一个分支的顶部。这意味着它会创建一个新的更改序列。
使用场景
- 当你想要一个干净、线性的项目历史时。
- 在将功能分支合并到主分支之前,确保功能分支的更新。
如果你想用rebase将feature分支的更改整合到main分支。
- 切换到feature分支:
git checkout feature
- 使用git rebase命令将feature分支变基到main分支:
git rebase main
解决可能出现的冲突,并继续变基过程。
- 最后,切换到main分支,并使用git merge将变基后的feature分支合并进来
版权归原作者 西京刀客 所有, 如有侵权,请联系我们删除。