2012-10-11 26 views
1

我想将项目的主分支的特定提交反向移交给某个分支出来的旧分支。 例如在“branchA”下,/my/nice/path/MyClass.java“应该接受”master“下的特定提交所做的更改,”/my/nice/refactored/file/path/MyClass.java“。 我实现了这个“正确的方式”(例如,我可以手动复制这些更改并将“branchA”中的更改视为常规编辑,但这看起来不对)如果在分支之间文件w /更改的路径已更改,那么如何反向移植更改?

在perforce中,我可以执行整合的方式,让我来指定两个路径,其中包括分支机构;有什么混帐相当于

感谢

+0

可能相关:http://stackoverflow.com/questions/9772598/backport-changes-from-renamed-file –

回答

0

COMMIT_TO_PORT=(commit hash) 
for f in `git show --pretty="format:" --name-only ${COMMIT_TO_PORT}` 
do 
PATH_UNDER_MASTER=$f 
PATH_UNDER_BRANCHA=(make branchA path out of $f) 
FILEID=(optional - extract file name or some other ID to preserve new-old files for reference if auto-generated conflicts are not clear) 
git show "${COMMIT_TO_PORT}:{$PATH_UNDER_MASTER}" > "new_${FILEID}" 
git show "${COMMIT_TO_PORT}~1:{$PATH_UNDER_MASTER}" > "old_${FILEID}" 
git merge-file $PATH_UNDER_BRANCHA "old_${FILEID}" "new_${FILEID}" 
# optional - open $PATH_UNDER_BRANCHA 
unset FILEID PATH_UNDER_MASTER PATH_UNDER_BRANCHA 
done 
unset COMMIT_TO_PORT 
0

我认为你正在寻找git cherry-pick

给定一个或多个现有的提交,应用每个引入的更改,为每个提交一个新的提交。

这就是我最后做这样的事情(不处理新文件)“正确的方式”

+0

that does not work with changed paths。它只是在新路径创建文件/删除文件 – Sergey

+0

啊,没有看到。我认为如果你的道路改变了,那么没有“好”的方法来做到这一点。请参阅评论中与您的问题相关的答案,以获取相关帮助。 – Chronial