2014-03-13 39 views
9

是否可以选择性地将更改从一个分支应用到另一个分支?Git - 如何有选择地将更改从一个分支应用到另一个分支?

更具体地说,我使用公共dev分支为GitHub和一个私人master分支部署。当对一个分支进行更改时,他们需要应用到另一个分支,但某些代码行需要保持不同。在我的情况下,这是一些CSS类和饲料。

我是新来的Git的,但我做了我的研究:

  • git merge --no-commit --no-ff可以通过git mergetool使用遵循选择什么,我想在冲突的情况下。问题是它只适用于冲突Git不能自动合并,所以我想保留不同的东西在我有机会使用我的mergetool之前被取代。

  • git difftool --cached是有用的,因为它让我看到的差异,但我需要复制我想从那里保持和手动使用文本编辑器替换它,因为我不能简单地选择并保存像我可以与合并工具是什么。

  • git cherry-pick似乎适用规定的提交到另一个,但我想留什么不同,可以分散到不同的提交,提交这些可能不仅包括什么,我想留下不同。我不能看到这个工作,除非我做出数以百万计的提交,这会让我发疯。

而且要清楚,我不想一个分支成为另一个,似乎是一个合并的情况。 我想要两个独立的分支各自的不同之处,并应用从一个到另一个的变化。

是否有更好的工作流程,可以让我通过应用更改并保留一些差异来保留开发和部署版本?如果它导致解决方案,我不介意使用单独的存储库或不同的工具。

+0

所以,本质上,你可能需要的只是一些部分进行提交时间,这可能是从一个文件中的一些行到一个提交中的很多文件? –

+0

我需要在合并时保留几行不同的代码,例如分支中的白色背景和其他黑色背景中的代码。我想合并的文件中可能还有其他更改,因此文件排除不会解决所有情况。 – toucanb

回答

2

我不认为有办法从同一个文件中选择部分提交。我会说你需要简单地重新考虑你的代码,将这些部分移动到不同的文件中。

顺便说一句,如果你想从提交文件中提取一些文件,你可以使用其他命令组合的樱桃挑选,如here所解释的。

+2

按照链接中的解释执行'git checkout -p branchname'确实有窍门!这使我可以在不合并的情况下从其他分支以交互方式进行选择性更改。 Cherry-pick也可以工作,但每次提交只能获得更改。 – toucanb

11

我也发现了修补:

要创建补丁:git diff dev > master.patch

应用它:patch < master.patch

+0

谢谢 - upvoted!但是有一点需要注意 - 因为我的'git'被配置为在我的diff中放置虚拟目录名'a /'和'b /',第二个命令对我来说略有不同:'patch -p1

+0

而不是使用'patch',你可以使用'git apply master.patch' ... –

相关问题