【问题标题】:How does one backport a change if the path of the file w/changes has changed between branches?如果带有更改的文件的路径在分支之间发生了更改,如何向后移植更改?
【发布时间】:2012-10-02 10:50:15
【问题描述】:

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

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

谢谢!

【问题讨论】:

标签: git


【解决方案1】:

我想你在找git cherry-pick:

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

那是“正确的方式”

【讨论】:

  • 这不适用于更改的路径。它只是在新路径创建文件/删除文件
  • 啊,没看到。我认为,如果您的路径发生了变化,那么就没有“好”的方法可以做到这一点。请参阅评论中链接到您问题的答案以获得帮助。
【解决方案2】:

我最终做了这样的事情(不处理新文件)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-04
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 2014-07-03
    • 2012-06-07
    • 2019-11-06
    相关资源
    最近更新 更多