![]() |
1
415
你使用 cherry-pick 从一个分支获取单个提交的命令。
如果所需的更改不在单个提交中,则使用此处显示的方法
split the commit into individual commits
. 粗略地说,你用
There is another nice method here
在红帽杂志上,他们使用
拆分更改后,您现在可以选择所需的更改。 |
![]() |
2
882
我和你上面提到的问题完全一样。但我发现 this 更清楚地解释答案。 总结:
|
![]() |
3
275
要有选择地将文件从一个分支合并到另一个分支,请运行
哪里
这个
根据合并文件的方式,有四种情况: 1)你想要一个真正的合并。在这种情况下,您接受合并文件的方式是git自动合并它们,然后提交它们。 2)有些文件您不想合并。例如,您希望在当前分支中保留版本,并忽略正在合并的分支中的版本。 要选择当前分支中的版本,请运行:
这将检索的版本
3)如果需要BranchX中的版本(而不是真正的合并)。运行:
这将检索的版本
4)最后一种情况是,如果只想在
|
![]() |
4
89
我不喜欢上面的方法。使用cherry-pick非常适合选择单个更改,但是如果你想引入除某些坏更改之外的所有更改,这是一种痛苦。这是我的方法。
没有
以下是备选方案: 分支“feature”中有一些更改,您希望以一种不马虎的方式将它们中的一些(但不是全部)提交给“master”(即,您不希望对每一个进行挑选和提交)
所以只需将其包装在shell脚本中,将master更改为$to,将feature更改为$from,就可以开始了:
|
![]() |
5
80
还有另一条路要走:
它是介于
|
![]() |
6
49
虽然其中一些答案相当不错,但我觉得实际上没有一个回答了OP的原始约束:从特定的分支中选择特定的文件。这个解决方案可以做到这一点,但是如果有许多文件,可能会很麻烦。
假设你有
这将为您所需的每个文件提供文件内差异。再也没有了。没什么。在不同版本之间,文件发生了根本不同的更改,这很有用——在我的例子中,将应用程序从Rails2更改为Rails3。
编辑
:这将合并文件,但会进行智能合并。我不知道如何使用这个方法来获取文件中的差异信息(也许对于极端的差异,它仍然是如此)。如果不使用
|
![]() |
7
45
1800信息的答案完全正确。不过,作为一个Git Noob,“使用Git Cherry Pick”还不足以让我在互联网上多挖掘一点,所以我想我会发布一个更详细的指南,以防其他人在类似的船上。 我的用例希望有选择地将其他人的Github分支中的更改拉到我自己的分支中。如果已经有一个本地分支进行了更改,则只需执行步骤2和5-7。
|
![]() |
8
39
以下是您可以替换的方法
注意,这将覆盖(而不是合并)并忽略主分支中的本地更改。 |
![]() |
9
25
简单的方法,实际上 合并 来自两个分支的特定文件,而不仅仅是用另一个分支的特定文件替换。 第一步:区分分支
创建当前分支和分支之间的差异的修补文件 第二步:对匹配模式的文件应用修补程序
关于选项的有用注释
你可以使用
斜杠不需要逃跑。 另外,您可以使用--exclude来代替它,并将它应用于除匹配模式的文件之外的所有内容,或者使用-r反转修补程序。
-p1选项是*unix patch命令的一个保留项,事实上,补丁文件的内容在每个文件名之前
查看Git Apply的手册页了解更多选项。 第三步:没有第三步显然,您希望提交您的更改,但谁会说您在提交之前没有其他相关的调整。 |
![]() |
10
21
下面是如何让历史记录只跟踪来自另一个分支的几个文件,而不必大惊小怪,即使一个更“简单”的合并会带来很多您不想要的更改。 首先,您将采取不同寻常的步骤提前声明您将要提交的是合并,而不需要Git对工作目录中的文件做任何操作:
. …其中“branchname”是您声称要合并的内容。如果你马上承诺,它不会做任何改变,但它仍然显示出来自另一个分支的祖先。如果需要,也可以向命令行添加更多的分支/标记等。不过,此时没有要提交的更改,所以接下来从其他修订版获取文件。
如果要从多个其他分支合并,请根据需要重复。
现在,来自另一个分支的文件在索引中,准备提交,带有历史记录。
在提交消息中,您将有很多解释要做。 不过,请注意,如果不清楚,这是一个混乱的事情要做。这不是一个“分支”的目的,而樱桃采摘是一个更诚实的方式来做你将要做的,在这里。如果你想对上次没有带来的同一个分支上的其他文件执行另一个“合并”,它将用一条“已经更新”消息阻止你。当我们应该有分支时,这是一种不分支的症状,在“从”分支中应该有多个不同的分支。 |
![]() |
11
14
我知道我有点晚了,但这是我合并选择性文件的工作流程。
|
![]() |
12
14
我发现 this post 包含最简单的答案。只做:
例子:
更多信息请参见帖子。 |
![]() |
13
13
最简单的方法是将repo设置为要与之合并的分支,然后运行,
如果你跑
您将看到文件已被暂存… 然后运行
简单。 |
![]() |
14
10
奇怪的是Git仍然没有这样一个“开箱即用”的方便工具。我在更新一些旧版本分支(仍然有很多软件用户)时大量使用它
只是一些
从当前版本分支修复错误。在这种情况下,通常需要快速
只是一些
行代码来自主干中的文件,忽略了许多其他更改(不应该进入旧版本)。当然
交互式三向
在这种情况下需要合并,
您可以轻松做到:
只需将此行添加到
它意味着你用得比不上。如果需要,只需更改您选择的软件。或者,如果不需要交互式选择性合并,可以将其更改为三向自动合并:
然后这样使用:
这会给你真正的选择 树路 合并其他分支中任何文件的机会。 |
![]() |
15
7
我和你上面提到的问题完全一样。但我发现 this git blog 更清楚地解释答案。 来自上述链接的命令:
|
![]() |
16
7
这不是你想要的,但对我很有用:
这是一些答案的混合。 |
![]() |
17
6
我会做一个
通过这种方式,您可以限制来自分支的文件模式的提交范围。 被盗: http://www.gelato.unsw.edu.au/archives/git/0701/37964.html |
![]() |
18
6
我喜欢上面的“Git Interactive Merge”答案,但有一个更简单。让Git为您使用Interactive和On的Rebase组合:
因此,您需要“feature”分支(分支点“a”)中的c1和c2,但目前没有其他分支。
如上所述,它将您放入交互式编辑器中,在其中为C1和C2选择“Pick”行(如上所述)。保存并退出,然后它将继续执行REBASE,并为您提供分支“temp”,同时指向master+c1+c2:
然后,您只需将master更新为head并删除temp分支,就可以开始了:
|
![]() |
19
5
我知道这个问题很老,还有很多其他的答案,但是我编写了自己的脚本“pmerge”来部分合并目录。这是一项正在进行的工作,我仍然在学习Git和Bash脚本。
此命令使用
用途:
我没有做过广泛的测试。工作目录应该没有任何未提交的更改和未跟踪的文件。
|
![]() |
20
2
你可以使用
要执行合并,请使用
|
![]() |
21
1
当两个分支的当前提交之间只有几个文件发生了更改时,我通过浏览不同的文件手动合并更改。
|
![]() |
22
1
按文件选择合并/提交的简单方法:
|
![]() |
23
0
如果您没有太多已更改的文件,这将使您没有额外的提交。
1。临时复制分支
2。重置为上次想要提交
三。从原始分支签出每个文件
现在,如果需要,您可以提交并强制推送(覆盖远程)。 |
![]() |
24
0
如果您只需要合并一个特定的目录,并保留所有其他内容,同时保留历史记录,那么您可以尝试这样做…创建新的
下面的步骤假设您有两个分支
|