我正在使用git mergetool命令修复冲突。但是我有成千上万的冲突,有没有办法简化这个,所以我从远程获得一切?
我被要求在命令中输入c,d或a。
{local}: deleted
{remote}: created file
Use (c)reated or (d)eleted file, or (a)bort?
由于我有数千个文件,我不想继续发送c。有没有办法大规模地这样做?
答案 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)
答案 2 :(得分:0)
如果您希望删除所做的所有更改,您将与遥控器同步。 您应该执行以下操作:
git stash
git pull
如果你想恢复你所做的改变,你应该输入:
git stash pop
基本上&#39; git stash&#39;正在将更改移动到临时存储库。
您可以在以下方面了解更多信息: