我有一個稍微過時的實驗分支,由於時間限制而被推到一邊。我需要撿起它並將其移動到項目的頭部。將分支分解爲單個文件提交
現在的問題是,分支中的補丁實際上有很多大量的衝突,所以我想將分支中的提交分成單個文件提交,所以我可以更容易地將它們應用一個一。
是否有一些自動命令,這會爲我做,或者我需要手動執行此操作?
我有一個稍微過時的實驗分支,由於時間限制而被推到一邊。我需要撿起它並將其移動到項目的頭部。將分支分解爲單個文件提交
現在的問題是,分支中的補丁實際上有很多大量的衝突,所以我想將分支中的提交分成單個文件提交,所以我可以更容易地將它們應用一個一。
是否有一些自動命令,這會爲我做,或者我需要手動執行此操作?
你可以做到這一點:
git checkout -b experiment master^^^^
git rev-list master^^^..master |
while read rev;
do
git diff --name-only $rev^..$rev |
while read file;
do
git checkout $rev -- $file;
git add $file;
git commit -C $rev;
done;
done
請注意,每個語句
這個假定您要擴大範圍master^^^^..master
^S的數量,它是線性的歷史,或者你不介意失去合併。它還假定您想要爲每次受影響的文件保留相同的提交消息。
我不認爲有一個命令可以做到這一點,但編寫腳本來完成它應該相當容易。它只需要使用git diff
來輸出已更改文件的列表,如果爲空則退出。否則,從列表中選擇頂層文件並使用git add
進行分級,提交併重複。