我有一个项目,我一直在进行一些实验性的更改。它是一个在A目录下的子项目。然而,在项目的主分支中,这个子项目已经移动到了一个独立的目录B。
我有大约10个提交,我想有效地将它们合并到主分支中,但是我该如何告诉git将旧的目录放入新的目录中呢?
后来
我尝试使用cherry-pick,因为我只想引入我的更改并保持历史记录的清晰。这不仅仅是文件移动。我还添加了新的类。它也没有检测到所有的移动。(我首先想到的是pom.xml)
我有一个项目,我一直在进行一些实验性的更改。它是一个在A目录下的子项目。然而,在项目的主分支中,这个子项目已经移动到了一个独立的目录B。
我有大约10个提交,我想有效地将它们合并到主分支中,但是我该如何告诉git将旧的目录放入新的目录中呢?
后来
我尝试使用cherry-pick,因为我只想引入我的更改并保持历史记录的清晰。这不仅仅是文件移动。我还添加了新的类。它也没有检测到所有的移动。(我首先想到的是pom.xml)
您可以将这些提交转换为补丁,手动编辑补丁(用新路径替换旧路径)然后应用。
$ 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