Git版本2.19引入了git range-diff应该用于比较两个提交范围的版本.我一直在阅读文档,但我不明白这个新功能的目的是什么.
我检查了官方的Git文档,我无法理解它的语法(省略标志):
git range-diff ( <range1> <range2> | <rev1>...?<rev2> | <base> <rev1> <rev2> )
Run Code Online (Sandbox Code Playgroud)
什么是rev1和rev2?
有人可以解释它们何时有用我的意思是每个案例?
我还没有实际使用过呢,但他们是为了为在旧的改善git cherry*流分析/比较一些上游或下游的变化设定VS你现在所拥有的.为了使范围集有用,我们想要一些"这是我的提交"和"这里是他们的",尽可能简单地表达.
一个范围1范围2组woiuld写成,如:
git range-diff theirs~5..theirs ours~4..ours
Run Code Online (Sandbox Code Playgroud)
如果你有,例如:
T1--T2--T3--T4--T5 <-- theirs
/
...--o--* <-- base
\
O1--O2--O3--O4 <-- ours
Run Code Online (Sandbox Code Playgroud)
在O提交的"我们"和T提交的"他们".
但是,鉴于这种完全相同的配置,我们也可以写:
git range-diff theirs...ours # or ours...theirs
Run Code Online (Sandbox Code Playgroud)
(注意三个点).(例如,这是与之一起使用的语法git rev-list --cherry-mark --left-right.)
或者,再次给出同样的情况,我们可以写:
git range-diff base theirs ours # or base ours theirs
Run Code Online (Sandbox Code Playgroud)
这base是他们和我们的停止点,避免不得不倒数5.
如果情况更复杂 - 如图中所示:
X1--T1--T2--T3 <-- theirs
/
...--o--* <-- base
\
Y1--Y2--O1--O2--O3--O4 <-- ours
Run Code Online (Sandbox Code Playgroud)
无论三点还是base ours theirs那种语法都不起作用,所以两组范围(theirs~3..theirs ours~4..ours)最好.
Range diff 在解决合并冲突(after rebase、cherry-pick等)之后非常有用,尤其是当您有多个冲突的 commit并且您想确保在此过程中没有意外破坏某些内容时。
这是一种通常发生在您在一个分支中进行多次提交的情况。
假设我们有一个名为“our”的分支,我们的分支在 master 分支的后面:
m1-m2-m3-m4 <- "master" branch
\
o1-o2-o3 <- "our" current branch
Run Code Online (Sandbox Code Playgroud)
在变基之前,我们会备份我们的分支(只需创建一个名为“our_bkp”的副本分支)
git branch our_bkp
Run Code Online (Sandbox Code Playgroud)
然后我们开始与 master 进行 rebase
git rebase master
Run Code Online (Sandbox Code Playgroud)
并解决提交“o1”上的一些合并冲突...
注意:如果“o1”上的冲突文件也在“o2”或“o3”中使用/更改,
那么我们将不得不重新解决同样的合并冲突也发生在他们身上。
现在,让我们说在一个令人筋疲力尽的 rebase 过程之后,我们有这样的事情:
_<- branch "master"
/
m1-m2-m3-m4-o1'-o2'-o3' <- branch "our" (after rebase)
\
o1-o2-o3 <- branch "our_bkp"
Run Code Online (Sandbox Code Playgroud)
由于存在许多合并冲突,因此我们是否遗漏了某些内容并不清楚。
这就是范围差异的亮点。
为了确保我们没有错过任何更改或意外损坏任何东西,我们可以简单地将旧版本分支的提交与新版本进行比较:
git range-diff our_bkp~3..our_bkp our~3..our
Run Code Online (Sandbox Code Playgroud)
或者
git range-diff o1..o3 o1'..o3'
Run Code Online (Sandbox Code Playgroud)
如果差异仅与冲突部分有关,那么我们很好,除了它们之外没有改变任何东西。
但是如果我们看到其他一些意想不到的差异,那么我们或 git 做错了什么,我们需要修复它们。
笔记
o1..o3我的意思是这些提交,例如数:0277a5883d132bebdb34e35ee228f4382dd2bb7..e415aee3fa53a213dc53ca6a7944301066b72f24~3中our_bkp~3说的git采取承诺,这是3在最后一个之前提交our_bkp分支。将数字替换为您在分支上的提交数量,当然不要忘记将分支名称替换为our_bkp您的备份分支名称。