[英]Apply git diff/patch multiple times
我使用git flow從develop
分支創建了一個新分支newFunction
。 我將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";
}
}
是否可以在那個時間點應用develop
和newFunction
之間的diff
? 可能使用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";
}
}
等等。我知道它當前生成的代碼是不正確的,因為這些函數具有相同的名稱。 例如,我將用它來生成遺留系統中的樣板代碼。
我認為您正在尋找的命令是git apply 。 假設newFunction分支上的最后一次提交僅添加了newFunction的四行,則可以使用以下命令在developer分支上應用相同的更改:
git checkout develop
git diff newFunction^ newFunction | git apply --3way
# "newFunction^" means the second last commit on newFunction branch
Git apply將在此處嘗試將與newFunction分支上一次提交相同的更改應用於dev分支。
在使用測試存儲庫為每個提交添加一個功能的測試時,上述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文件的輸出進行武裝,我們可以獲取所有相關版本並創建具有相應內容的文件,並在其中運行kdiff3。 例如
$ 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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.