我有2个分支:FeatureBranch
和ReleaseBranch
。
我确实从c1
到FeatureBranch
选择了提交ReleaseBranch
的文件。
后来我对FeatureBranch
&上的同一个文件做了一些修改。使用身份c2
提交。
我再次在FeatureBranch
上增强了相同的文件并使用ID c3
进行了提交。
现在我不希望c2
加入ReleaseBranch
,我只需要c3
。我尝试用c3
id直接挑选,但是Git返回了一个错误:
无法应用c3 ......
我知道Git中的Index是增量的,因为我不希望c2
更改,我只需要c3
。有没有办法实现这个目标?
答案 0 :(得分:2)
首先:您要维护两个不同版本的代码,一个在FeatureBranch
上,一个在ReleaseBranch
上。您开始看到拥有两个“实时”版本代码的负面影响
我不知道你的约束是什么,但“将功能集成到发布中,或者放弃功能”应该成为你眼前计划中的一个优先里程碑。
您正在针对该文件发生冲突。 git无法以直截了当的方式应用c3
,因为c2
引入了一些更改,这会将修补程序c2 -> c3
转换为无法在Release
上应用的内容。
您必须手动编辑冲突才能修复它,然后提交结果。
如果c2
中的更改很容易丢弃,另一种方法是丢弃当前的挑选,获取文件的完整内容,并编辑它以删除您不想提交的更改发布时间:
# -- from ReleaseBranch
# cancel the cherry-picking :
git cherry-pick --abort
# get the content of the file stored in c3 (will contain modifs from c1+c2+c3) :
git checkout c3 -- path/to/file
# edit the file to remove unwanted code ...
# add and commit
git add path/to/file
git commit
答案 1 :(得分:1)
在功能分支上恢复c2(或从功能分支创建单独的分支并在那里恢复)使c4和樱桃选择它。 我假设Release分支可以重置为c1之前的状态。
git checkout -b RevertFeatureC2 FeatureBranch
git revert C2
OPTION1 - 干净的MasterBranch - 没有C1 C2(但即使已经有C1 C2,也许它会工作)
git checkout MasterBranch
# then cherry pick or merge from RevertFeatureC2
OPTION2 - 如果可以覆盖整个文件 - MasterBranch中没有单独的更改(请仔细检查):
git checkout ResetFeatureC2 the_file.xyz