Git cherry pick未能选择正确的更改
注意:这是我这边的一个错误。我挑了一份家长的杂烩。请参阅Git cherry pick未能选择正确的更改,git,cherry-pick,Git,Cherry Pick,注意:这是我这边的一个错误。我挑了一份家长的杂烩。请参阅更新部分。 原始问题: 我在“test_imu”分支中有一个文件vmu_hw_test,其变化类似于下面所示 if( g_imu_spi.readFromFifo() == 0) { //Find local maxima and minima event g_imu_spi.compute_event(); //compute the euler g_imu_spi.compute_euler();
更新部分。
原始问题:
我在“test_imu”分支中有一个文件vmu_hw_test
,其变化类似于下面所示
if( g_imu_spi.readFromFifo() == 0)
{
//Find local maxima and minima event
g_imu_spi.compute_event();
//compute the euler
g_imu_spi.compute_euler();
//From the average values compute the max
//g_imu_spi.compute_Max();
g_imu_spi.compute_Max(buffer);
}
此提交中引入了if
语句和删除注释。
和master
分支机构
//Find local maxima and minima event
g_imu_spi.compute_event();
//compute the euler
g_imu_spi.compute_euler();
//From the average values compute the max
g_imu_spi.compute_Max(buffer);
问题
1.正如我所读的cherry pick
接受一个提交更改并应用它。如果分支不同(在提交历史记录中)是否有问题
2.一位微软公司的人说不要随便挑选。摘樱桃是一种坏习惯吗?
3.为什么cherry pick会失败?(更新:它没有更新。)
Git Diff
有关test_imu.c
diff --git a/Src/vmu_hw_test.c b/Src/vmu_hw_test.c
index 14b0a67..1954d64 100644
--- a/Src/vmu_hw_test.c
+++ b/Src/vmu_hw_test.c
@@ -2694,14 +2694,16 @@ unsigned short IMU_sendData(void)
}
}
//Regular run
- g_imu_spi.readFromFifo();
- //Find local maxima and minima event
- g_imu_spi.compute_event();
- //compute the euler
- g_imu_spi.compute_euler();
- //From the average values compute the max
-// g_imu_spi.compute_Max();
- g_imu_spi.compute_Max(buffer);
+ if( g_imu_spi.readFromFifo() == 0)
+ {
+ //Find local maxima and minima event
+ g_imu_spi.compute_event();
+ //compute the euler
+ g_imu_spi.compute_euler();
+ //From the average values compute the max
+ g_imu_spi.compute_Max(buffer);
+ }
+
更新
Git cherry pick没有失败。我试着按照torek
的建议查看差异,发现差异确实说明了一个cherry pick应该包含if
语句
这是git diff--find重命名的(请参考torek的答案)
而git diff--find renames
已经在git diff
部分提供了。从这里我们可以看到,if
语句应该被选中
出错的是我选择了错误的散列(我选择了父散列) git cherry pick
通过合并工作,但是合并的输入有点不寻常
具体来说,对于一个普通的、典型的合并,我们从提交图开始,从中我们可以找到您在分支上所做的事情,与其他人在其分支上所做的事情相比:
A--B--C <-- you (HEAD)
/
...--o--o--*
\
D--E--F <-- them
同样,Git必须比较commitF
——他们最新的提交工作*
,以查看他们更改了什么:
git diff --find-renames <hash-of-*> <hash-of-F> # what they changed
如果在这种情况下,由于您在master
上,commitA
是您当前的提交,并且您发出以下命令:
git cherry-pick test_imu
Git进行合并,合并基是commitB
——commitC
的父级,这是您正在选择的提交,commitC
和a
是两个比较的提交:
git diff --find-renames <hash-of-B> <hash-of-A> # what you did
git diff --find-renames <hash-of-B> <hash-of-C> # what they did
git diff——查找重命名#你做了什么
git diff--查找重命名#他们做了什么
Git现在结合了这些变化。在合并冲突中,两人对同一文件的同一行进行了不同的更改
如果通过从commitB
到commitA
删除了If
测试,但是B
-to-C
中没有任何内容触及If
测试,Git假设正确的操作是保持对If
测试的删除。要确定Git为什么会做Git所做的事情,唯一的方法是查看这三个输入,例如,通过运行这两个Git diff
命令
我发现将merge.conflictStyle
设置为diff3
非常有帮助,这样当发生冲突时,Git会包括基本提交文件部分以及两个冲突的更改。这通常不需要直接查看提交B
。但是,在特别复杂的情况下,您可能需要查看所有三个输入。git cherry pick
通过合并工作,但是合并的输入有点不寻常
具体来说,对于一个普通的、典型的合并,我们从提交图开始,从中我们可以找到您在分支上所做的事情,与其他人在其分支上所做的事情相比:
A--B--C <-- you (HEAD)
/
...--o--o--*
\
D--E--F <-- them
同样,Git必须比较commitF
——他们最新的提交工作*
,以查看他们更改了什么:
git diff --find-renames <hash-of-*> <hash-of-F> # what they changed
如果在这种情况下,由于您在master
上,commitA
是您当前的提交,并且您发出以下命令:
git cherry-pick test_imu
Git进行合并,合并基是commitB
——commitC
的父级,这是您正在选择的提交,commitC
和a
是两个比较的提交:
git diff --find-renames <hash-of-B> <hash-of-A> # what you did
git diff --find-renames <hash-of-B> <hash-of-C> # what they did
git diff——查找重命名#你做了什么
git diff--查找重命名#他们做了什么
Git现在结合了这些变化。在合并冲突中,两人对同一文件的同一行进行了不同的更改
如果通过从commitB
到commitA
删除了If
测试,但是B
-to-C
中没有任何内容触及If
测试,Git假设正确的操作是保持对If
测试的删除。要确定Git为什么会做Git所做的事情,唯一的方法是查看这三个输入,例如,通过运行这两个Git diff
命令
我发现将merge.conflictStyle
设置为diff3
非常有帮助,这样当发生冲突时,Git会包括基本提交文件部分以及两个冲突的更改。这通常不需要直接查看提交B
。但是,在特别复杂的情况下,您可能需要查看所有三个输入。好的,交互式重新基址基本上是通过更好的界面进行樱桃选择樱桃选择应用樱桃选择的提交引入的更改,而不是最终状态。是否在您选择的提交中没有引入if语句?它是在我选择的提交中引入的。哈希本身仅对拥有您的存储库副本(包括该特定提交)的人有用。如果存储库是公共的,那么它很有用;如果不是,那就不是了。你能不能展示你所看到的真实证据,而不是展示部分的、相互冲突的、经过编辑的证据?你在这里的演示比你实际看到的情况更让人困惑。互动式再基地基本上是通过nic进行的樱桃采摘