如何解决git中很多文件的合并冲突?

时间:2018-03-16 19:55:01

标签: linux git ubuntu version-control

我正在使用git mergetool命令修复冲突。但是我有成千上万的冲突,有没有办法简化这个,所以我从远程获得一切?

我被要求在命令中输入c,d或a。

{local}: deleted
{remote}: created file
Use (c)reated or (d)eleted file, or (a)bort?

由于我有数千个文件,我不想继续发送c。有没有办法大规模地这样做?

3 个答案:

答案 0 :(得分:2)

您可以在git mergetool之外解决此问题:运行git status --porcelain以机器可读格式获取所有未合并文件及其状态的列表。

如果您的Git足够新,它将支持--porcelain=v2。有关输出格式的详细信息,请参阅the git status documentation。输出格式v2通常优于所有目的,但您应该可以使用任何一种。

接下来,你必须编写一个程序。很遗憾Git没有提供相应的程序。根据您要解决的具体情况,您的程序可以相当简单,并且您可以使用shell脚本(sh或bash)作为编程语言,以保持简单。

由于您担心git mergetool说的情况:

Use (m)odified or (d)eleted file, or (a)bort? 

您对阶段1(“基础”)版本中缺少文件名但在阶段2(“本地”)版本中缺失的情况感兴趣,但存在于阶段3(“远程”)版。 (再次参见git status文档并查看git status --porcelain=v2输出的示例以了解如何检测这些情况。三种模式中的两种将为零。)对于这些特定路径名,只需运行{{ 1}}在路径名上将文件标记为已解析,以支持创建的文件。

标记完所有此类文件后,您可以返回运行git add以解决其他冲突(如果有)。

请注意,您的“程序”可以包含:

git mergetool

然后编辑git status --porcelain=v2 > /tmp/commands.sh 以删除包含您想要/tmp/commands.sh的文件的所有行。然后将所有这些行更改为git add,其中git add <filename>是文件的名称。退出编辑器并运行<filename>以执行所有sh /tmp/commands.sh命令。那是你的计划!

答案 1 :(得分:0)

假设你想要他们的改变并修改你的改变,你可以像下面这样做:

git pull -X他们的

Other stackOverflow answers

git pull -X

git merge strategies此链接将有助于了解futuro的任何其他合并策略

答案 2 :(得分:0)

如果您希望删除所做的所有更改,您将与遥控器同步。 您应该执行以下操作:

git stash
git pull

如果你想恢复你所做的改变,你应该输入:

git stash pop

基本上&#39; git stash&#39;正在将更改移动到临时存储库。

您可以在以下方面了解更多信息:

NDP software:: Git Cheatsheet