【发布时间】:2019-09-17 11:03:08
【问题描述】:
我的分支中有一个文件,当我将它合并到 master 并推送 master 时,它工作正常,然后我编辑文件,删除其中的一些文本部分,并添加一些部分,我正在这样做分支,所以当我再次合并它时,我只想添加主文件中的文本,并且不应该合并删除的部分。我怎么做? 这是我的存储库 https://github.com/intern-it123/myrepo.git
【问题讨论】:
我的分支中有一个文件,当我将它合并到 master 并推送 master 时,它工作正常,然后我编辑文件,删除其中的一些文本部分,并添加一些部分,我正在这样做分支,所以当我再次合并它时,我只想添加主文件中的文本,并且不应该合并删除的部分。我怎么做? 这是我的存储库 https://github.com/intern-it123/myrepo.git
【问题讨论】:
当您添加文件时,请使用 git add -p 并仅选择所需的更改。
git add -p它被称为patch mode 或interactive mode。执行git add -p 后,您将获得可供选择的选项列表:
Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]?
如果我理解正确,您有一个大文件,您只想使用(添加)文件的一部分。在这种情况下,您需要将其与 s 分开,然后选择 y/n 是否使用此块。
And here the option you will have to choose from:在您的情况下,您必须拆分更改 s,然后仅选择所需的更改。
【讨论】:
$ git add -p myFirstBranch.txt diff --git a/myFirstBranch.txt b/myFirstBranch.txt index 6f3aab7..5be9c98 100644 --- a/myFirstBranch.txt +++ b/myFirstBranch.txt @@ -1 +1 @@ - in branch dvs, added \ No newline at end of file +sasd in branch dvs, \ No newline at end of file Stage this hunk [y,n,q,a,d,e,?]?
没有真正简单的方法可以做到这一点。合并机制的设置是为了将 all 来自另一个分支的更改合并到当前分支[1]。
您可以调整文件的合并方式如果合并的“双方”都更改了文件,则使用合并驱动程序。这是相对容易且有据可查的。但除非在 master 上修改了文件,否则分支中的更改将按原样应用,而无需调用自定义合并驱动程序。
要更改整体提交的处理方式,您可以切换合并策略。例如,ours 策略保持当前分支中的内容不变,即使当前分支中的文件未更改但在“其他”分支中更改。
提供的合并策略都不能满足您的需求,因此您必须自己编写。这仍然需要完成默认策略所做的大部分事情(不是小任务),并且必须修改“他们的”补丁以启动(识别和删除不需要的更改)。
而且我还没有找到很好的文档来做这件事。这是有道理的,因为我不认为这是最终用户打算与 git 交互的一种方式。可以在此处找到有关自定义合并策略的一些信息:git: How do I add a custom merge strategy?
[1] 嗯....它比这更笼统一些;您可以说“提交行”而不是分支,并且通过章鱼合并,您可以一次合并两个以上(如果满足某些条件)。
【讨论】: