簡體   English   中英

如何找到Git存儲庫中存在沖突的所有合並?

[英]How can I find all the merges that had conflicts in a Git repository?

我正在研究開源項目中的合並。

我最近問過如何在Git存儲庫中找到所有具有多個父級的提交? ,並得到了很好的答案。

現在我需要縮小查詢范圍,只查找有沖突的提交。

對於沖突,我的意思是在兩個貢獻提交中修改了相同的文件。

另外,如果我能找到一個git或bash(grep,awk?)命令,它只會給我兩個貢獻者修改同一行的提交,這將非常有用。

我們的想法是找到無法自動解決的提交。

那么,我怎樣才能找到git存儲庫中存在沖突的所有合並?

一旦創建了合並提交,遺憾的是丟失了如何執行合並的信息。 這很重要,因為git merge接受了許多影響沖突外觀的選項,例如策略和每策略選項。 但是,如果您的目標是覆蓋查找可能與默認合並選項發生沖突的合並的合理情況,則可以強制執行:轉換合並提交,重新創建合並,並標記git報告的合並。

注意:此腳本檢出許多不同的提交,並在每次迭代中運行git reset --hard甚至git clean -fdx 一定要只在結帳中運行它,其中不包含git未知的重要文件!

#!/bin/bash

old_branch=$(git symbolic-ref --short HEAD)
for commit in `git rev-list --merges HEAD`
do
  # find the parents of the merge commit
  parents=$(git log -1 --format=%P $commit)
  fst=${parents%% *}
  rest=${parents#* }
  # check out the first parent
  git checkout -q $fst
  # merge with the rest of them
  git merge --no-commit $rest >/dev/null 2>&1
  # if there are any conflicts, print the commit and abort the merge
  if git ls-files --unmerged | grep -q '^'; then
    echo $commit
    git merge --abort
  fi
  # get rid of changes so the next checkout doesnt complain
  git reset -q --hard
  git clean -fdxq
done
git checkout -q $old_branch

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM