2012-10-11 25 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