2012-03-03 149 views
3

我有一个项目,我一直在做一些实验性的修改。到目录A中的子项目。但是,在项目的主分支中,子项目已移至如此一个单独的目录,目录B.Git樱桃挑选文件,从目录A到目录B

我有大约10次提交,我希望有效地樱桃选择主,但我怎么能告诉混帐旧目录到新的?

后来
我试图挑樱桃,因为我想只介绍我的修改,保留历史的清洁。这不仅仅是文件移动。我也添加了新的类。它没有检测到所有的动作(想到的第一个文件是pom.xml)

+0

它应该自动检测移动(至少在合并期间) – knittl 2012-03-03 09:58:03

回答

3

您可以将这些提交转换为补丁,手动编辑补丁(用新路径代替旧路径),然后应用。

$ git init 
Initialized empty Git repository in /tmp/gitt/.git/ 
$ mkdir olddir 
$ cp /home/vi/code/_/ucontext.cpp olddir/ucontext.cpp 
$ git add . 
$ git commit -m "initial commit" 
[master (root-commit) c0bf371] initial commit 
1 files changed, 97 insertions(+), 0 deletions(-) 
create mode 100644 olddir/ucontext.cpp 

$ printf '22\na\n// Sup, /git/!\n.\nw\nq\n' | ed olddir/ucontext.cpp 
1983 
    if (!stacks) { stacks = stacks3; } 
1998 
$ git commit -am 'sample commit' 
[master 83940c9] sample commit 
1 files changed, 1 insertions(+), 0 deletions(-) 
$ printf '33\nd\nw\nq\n' | ed olddir/ucontext.cpp 
1998 
    }else{ 
1990 
$ git commit -am 'sample commit 2' 
[master 6599932] sample commit 2 
1 files changed, 0 insertions(+), 1 deletions(-) 

$ git format-patch HEAD~2 --stdout > saved-commites.patch 
$ git reset --hard HEAD~2 
HEAD is now at c0bf371 initial commit 
$ git mv olddir newdir 
$ git commit -m 'rename dir' 
[master bd8a77e] rename dir 
1 files changed, 0 insertions(+), 0 deletions(-) 
rename {olddir => newdir}/ucontext.cpp (100%) 

$ sed -i.bak 's!\([ab]/\)olddir/!\1newdir/!g' saved-commites.patch 
$ git am saved-commites.patch 
Applying: sample commit 
Applying: sample commit 2