<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Git on Void Fox</title>
        <link>https://voidfox.cc/tags/git/</link>
        <description>Recent content in Git on Void Fox</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cmn-Hans</language>
        <lastBuildDate>Fri, 18 Jul 2025 11:56:42 +0800</lastBuildDate><atom:link href="https://voidfox.cc/tags/git/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>大型项目使用 git merge 导致多文件混乱问题及解决</title>
            <link>https://voidfox.cc/post/2024/04/git-merge-and-patch.html</link>
            <pubDate>Wed, 10 Apr 2024 20:57:00 +0800</pubDate>
            <guid>https://voidfox.cc/post/2024/04/git-merge-and-patch.html</guid>
            <description>&lt;img src=&#34;https://voidfox.cc/post/2024/04/git-merge-and-patch/cover.webp&#34; alt=&#34;Featured image of post 大型项目使用 git merge 导致多文件混乱问题及解决&#34; /&gt;&lt;h2 id=&#34;1-原因&#34;&gt;1. 原因&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;之前 clone 可以一个大型开源项目，自己创建了一个分支进行修改。&lt;br&gt;&#xA;随着自己的分支和开源项目自身的迭代，自己每次都使用 merge 将远程的主分支合并到自己分支。最近由于隔了非常多版本没有合并，现在使用 merge 合并出现了大量冲突。&lt;br&gt;&#xA;于是使用 &lt;code&gt;git merge -X theirs [other_branch]&lt;/code&gt; 进行合并，该命令是在合并遇到冲突时，保留 &lt;code&gt;[other_branch]&lt;/code&gt; 的改动，删除自己的改动。&lt;/p&gt;&#xA;&lt;p&gt;合并过程顺利，但是实际出现了本不应该存在的文件，自己的分支没有创建过该文件，远程最新主分支也没有该文件，猜测可能是远程分支中途 commit 出现过该文件，但是在后续的迭代中又删除了该文件。&lt;/p&gt;&#xA;&lt;p&gt;由于文件太多，不好一一比较删除，遂另寻他法。&lt;/p&gt;&#xA;&lt;h2 id=&#34;2-解决办法&#34;&gt;2. 解决办法&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;先使用 &lt;code&gt;git diff&lt;/code&gt; 创建差异文件，具体用法：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git diff &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;待合并的分支&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;想要被合并的分支&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; -- &lt;span class=&#34;s1&#34;&gt;&amp;#39;:![排除的文件(夹)1，可使用通配符]&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:![排除的文件(夹)2，可使用通配符]&amp;#39;&lt;/span&gt; &amp;gt; /path/to/patch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;然后使用 &lt;code&gt;git apply&lt;/code&gt; 应用差异，具体用法：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 检查是否可以应用，无任何输出则表示可以应用&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git apply --check /path/to/patch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 应用差异 (先修复空格)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git apply --reject --whitespace&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;fix /path/to/patch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;此时基本没太大问题，因为上面使用了 &lt;code&gt;--whitespace=fix&lt;/code&gt;，有些末尾的空行等被删除了，此时再使用 &lt;code&gt;git merge -X theirs [other_branch]&lt;/code&gt; 合并一次即可。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
