2014-02-10 52 views
3

什麼是一個簡明的方式來請求「從另一個分支挑選櫻桃只有提交觸摸一個特定的文件」?即命令git log ..other-branch afile給出了其他分支中觸摸「afile」的未提交提交列表;我怎麼能要求在當前分支上重播這一組相同的提交?櫻桃挑選只承諾觸摸一個特定的文件

+0

難道你只是合併在最近的提交觸及相關文件? – dezman

+0

@watson我無法做到這一點,因爲這也會合並在我不想合併的許多提交中。我只想從觸摸一個文件的小部分提交中引入更改。 – gcbenison

+0

我不認爲你想要什麼是可能的,你要麼只需抓取一個文件,從最新的提交改變那個文件的所有內容,或者從你認爲最新的提交中抓取一些文件是相關的。 – dezman

回答

3

git cherry-pick $(git log --reverse --pretty=format:"%H" filename)

應該這樣做。 git log --reverse --pretty=format:"%H" filename基本上給你一個換行符分隔的所有提交的SHA列表,它們以相反順序修改了filename,所以提交以正確順序合併。然後我們將這個列表提供給git cherry-pick。

git cherry-pick $(git rev-list --reverse HEAD -- filename)是由MagnusBäck提供的上述命令的另一個版本。

+0

「,然後sed用所有的\ n(換行符)替換空間「 - 你不需要那個。只要IFS有其默認值,換行符和空格在未加引號的$(...)擴展中的行爲方式相同。 – hvd

+0

我最終使用了這樣的構造 - 我仍然想知道是否有辦法做到這一點,不涉及bash命令插值。我想這不是一個普通的需要... – gcbenison

+0

好吧,從來沒有嘗試過沒有sed部分,也沒有測試用例,所以我不想發佈一些我以前沒有測試過的東西。 – Learath2