2014-02-10 55 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