![](/img/trans.png)
[英]How can I convert a long series of git merges into a single rebase without merge conflicts?
[英]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.