你可以用git和bash的组合来实现。我写了一个示例脚本来展示如何完成它。你可以随时修改它并使其更好。我也提供了一些解释。该文件被称为adder.sh
。
#!/bin/bash
# $1 -> Files from the branch you want (core)
# $2 -> Branch you want to merge into (master)
git checkout $2
git diff --name-status $1..$2 | grep '^\(D\|M\)\s*' | cut -f2 > ~/.dummy
git checkout $1 -- $(cat ~/.dummy)
git add .
要调用它,只需使用$ sh adder.sh core master
。在此之后,core
分支中的所有新添加和修改的文件都将添加到master
回购。使用git状态,您可以看到新增内容,然后进行相应的提交和推送。
$ git commit -m "Skipping Conflicts"
$ git push
一些解释它是如何工作的:
$ git diff --name-status master..core
产生以下输出:
M public/stylesheets/main.css # Modified
D public/templates/createUser.html # Present in core branch and not master (new file)
A public/templates/dashboard.html # Present in master and not in the core branch (don't touch)
所以写一个简单的正则表达式来只选择修改,新文件和将其修改为适当的格式,然后将其存储在临时文件中。
$ cat ~/.dummy
public/templates/createUser.html
public/stylesheets/main.css
然后我们需要将这些文件添加到我们当前的分支,所以我们使用git checkout。有关如何使用git checkout
,请参阅this answer。
还有另一种方法可以做到这一点。官方的方式,使用git rerere
。从the man page:
在工作流程采用相对长期的特性分支,开发人员有时需要一遍又一遍地解决同样的冲突,直到话题分行完成(或者合并到“释放”分支,或发送并接受上游)。
此命令通过记录初始手动合并冲突automerge结果和相应的手的决心的结果,以及应用先前记录的手的分辨率为它们相应的automerge结果有助于这个过程中的显影剂。
注意:您需要设置,以使该命令rerere.enabled配置变量。
This article给出了一个体面的命令及其使用案例的概述。
不能使用[子模块](https://git-scm.com/docs/git-submodule)? –
你想'git checkout分支 - 文件...'也许? – o11c
Git正在项目级别工作。除非您使用子模块,否则无法为特定文件“选择”备用远程设备。 –