如果文件w / changes的路径在分支之间发生了变化,那么如何向后端移动更改?

时间:2012-10-11 17:30:00

标签: git

我想将一个特定的提交从一个项目的主分支反向移植到一个分支的旧分支。 例如。在“branchA”下,/ my / nice / path / MyClass.java“应该接收”master“下的特定提交对”/my/nice/refactored/file/path/MyClass.java“所做的更改。 我如何实现这种“正确的方式”? (例如,我可以手动复制更改并将“branchA”中的更改视为常规编辑,但这似乎不正确)

在perforce中,我可以以允许我指定两条路径的方式进行集成,包括分支;什么是git等价物?

谢谢!

2 个答案:

答案 0 :(得分:0)

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

  

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

这是“正确的方式”

答案 1 :(得分: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