使用git flow我在newFunction
分支之外创建一个新分支develop
。
我将newFunction添加到示例类:
class ExampleClass
{
public function exampleFunction(){
return "example";
}
public function newFunction(){
return "new";
}
}
让我说我把它合并到develop
,几个月后我回来了,我的班级看起来像这样。
class ExampleClass
{
public function exampleFunction(){
return "example";
}
public function anotherFunction(){
return "another";
}
public function yetAnotherFunction(){
return "yetAnother";
}
public function newFunction(){
return "new";
}
}
是否可以在diff
和develop
之间应用newFunction
?可能使用git patch
或某种黑魔法。
所以我运行了一个神奇的git something
命令,我最终得到了类似的东西:
class ExampleClass
{
public function exampleFunction(){
return "example";
}
public function anotherFunction(){
return "another";
}
public function yetAnotherFunction(){
return "yetAnother";
}
public function newFunction(){
return "new";
}
public function newFunction(){
return "new";
}
}
如果我再次这样做,我会得到这个:
class ExampleClass
{
public function exampleFunction(){
return "example";
}
public function anotherFunction(){
return "another";
}
public function yetAnotherFunction(){
return "yetAnother";
}
public function newFunction(){
return "new";
}
public function newFunction(){
return "new";
}
public function newFunction(){
return "new";
}
}
等。 我知道它当前生成的代码不正确,因为函数具有相同的名称。 例如,我会用它来在遗留系统中生成样板代码。
答案 0 :(得分:1)
我认为你要找的命令是 git apply 。假设newFunction分支上的最后一次提交只为newFunction添加了四行,您可以使用以下命令在develop分支上应用相同的更改:
git checkout develop
git diff newFunction^ newFunction | git apply --3way
# "newFunction^" means the second last commit on newFunction branch
Git apply将在这里尝试将在newFunction分支上的最后一次提交中完成的相同更改应用到开发分支。
使用测试存储库进行测试时,为每次提交添加一个函数,上面的git apply不能完全应用。但是当使用三向模式时,它将打开结果以供手动解析,例如git status
将为文件显示both modified
,git ls-files -u
将显示类似
100644 21ecaba537582661c82c9dd2dff920a88a4b69a1 1 file.php
100644 56728941868d309cc06a49a8c49afc72cb0285b7 2 file.php
100644 0bbcab178802667c0228e424ce84f4c13a2b4c94 3 file.php
默认的git行为是为合并冲突部分插入一些文本标记,我觉得很难处理。我更喜欢使用KDiff3以图形方式合并,并且使用ls-files的输出,我们可以获取所有相关版本并创建具有相应内容的文件,我们运行kdiff3。 E.g。
$ git cat-file blob 21ecaba537582661c82c9dd2dff920a88a4b69a1 > file1.php
$ git cat-file blob 56728941868d309cc06a49a8c49afc72cb0285b7 > file2.php
$ git cat-file blob 0bbcab178802667c0228e424ce84f4c13a2b4c94 > file3.php
$ kdiff3 -o file_merged.php file1.php file2.php file3.php
$ mv file_merged.php file.php
$ git add file.php
$ git commit -m "Manually resolved git apply result"
使用两个手动差异对齐,不难解决:
就个人而言,我已经创建了一个脚本,其核心是执行上述命令来解决git冲突,虽然有点复杂,我一直都在使用它,我喜欢kdiff3。