利用 Rerere 簡化Git合併衝突

利用 Rerere 簡化Git合併衝突

AI News Bot
2026-06-03
Photo by Daniil Komov on Pexels
預計閱讀 1 分鐘原文來源

利用 Rerere 簡化 Git 合併衝突

在進行 Git 作業時,你是否曾遭遇過合併衝突的困擾?當你需要合併兩個分支時,經常會遇到各種衝突,而每次解決衝突後再次執行 git merge --continue 指令,卻發現同樣的問題依然存在。反覆經歷這樣的過程,最終你可能會因不堪其擾而放棄。然而,有個 Git 特性可以幫助我們簡化這個過程——那就是 Rerere。

Rerere 具體是「Reuse Recorded Resolution」的縮寫,意指重複使用過去解決衝突的方法。當你遇到相同文件中的衝突時,Git 會自動重新套用過去處理該問題的方式。要啟動此功能,只需執行指令 git config --global rerere.enabled true。另外,你也可以在專案的 .git/rr-cache 目錄中建立一個相應的目錄,但使用全域設定較為直觀。

让我们通过一个实际的例子来理解 Rerere 的运作过程:假设我们有一个简单的项目,其中只有一个 user.rb 文件。我们在 master 分支上创建了一个名为 dev 的分支,并在该文件中添加了一行代码。当我们尝试将 dev 分支合并到 staging 分支时,却发现有人已经在 staging 上对 user.rb 文件进行了修改,这与我们正在编辑的行相同。

通常情况下,你会看到标准的衝突提示信息。但如果启用了 Rerere,你将会得到如下输出:


Recorded preimage for 'user.rb'.

此时,你可以运行 git rerere diff 查看当前的解決方案文件状态:


Resolved 'user.rb' using previous resolution.

通过通常的衝突处理流程选择保留哪些更改并提交结果。再次运行 git rerere diff 时,你将看到之前记录的解决方案:


Resolved 'user.rb' using previous resolution.

执行 git merge --continue 指令后,Git 将应用你的提交,并告知文件的新解決方案。

重要的是,输出中会有一行提示「Resolved 'user.rb' using previous resolution」。这表示你无需再查看文件内容,只需直接提交结果即可。这是因为 Git 在检测到衝突时,在 rr-cache 目錄中查找並認知了上次合并操作中的相同片段,並套用了當時的決定。

然而,Rerere 也有其不足之处。如果在任何情况下,你以不正確的方式解決了一個衝突,則必須手動刪除該解決方案(或所有解決方案)。否則,它將會再次應用。

總之,Rerere 是一個非常有用的 Git 特性,能大大提高我們處理合併衝突的效率。然而,在使用此功能時也需要注意其潛在問題,以確保正確和有效地利用它來簡化工作流程。

分享