我有两个提交,其中一个是另一个的祖先。 (它们恰好是分支的起点和终点。我认为不重要,但如果有的话,我会把它包括在内。)
我希望看到两个提交之间的差异,但排除在两次提交之间进行的合并提交(即所有具有多个父级的提交)期间所做的更改。 (基本上,我想要对分支进行任何“真正的”提交,不包括合并。)
这可能吗?如果是这样,你如何做到这一点?
如果有必要,假设在合并提交期间没有解决冲突...但是可以优雅地处理它们的解决方案的奖励积分。
答案 0 :(得分:8)
你的问题有些含糊不清,但我想你想要这个。
git log --no-merges -p branch-start..branch-end
答案 1 :(得分:3)
如果您的合并全部来自同一个分支(例如master
)或全部包含在另一个分支中,则可以使用solution中的this question。
假设你有一棵如下所示的树:
x---y-+-z-+-branch
/ / /
---a---b---c-+-d-+-e---master
您要比较的两个提交是 b
和 branch
。然后直接比较两个提交,运行
git diff master...branch
将显示在分支(x,y,z
)上完成的所有更改,但不包括master
(c,d,e
(合并)上的所有内容。请注意,这也忽略了对master中尚未进行的任何更改。
来自文档:
git diff [--options] commit ... commit [ - ] [...]
此表单用于查看包含和最多第二次提交的分支上的更改,从两者的共同祖先开始 提交。 “git diff A ... B”相当于“git diff $(git-merge-base A B)B“。
答案 2 :(得分:2)
我不知道--no-merges -o选项,但这里有另一个解决方案(我想合并已经从master完成):
git checkout -b temp
git rebase --onto master branch-start branch-end
git diff master
答案 3 :(得分:0)
这是我将检出的分支与master进行比较的方式,不包括合并提交期间所做的更改。我更喜欢使用Meld的目录模式。
function saveCheckBoxes(){
checkBoxStorage = window.localStorage;
var chkbxsObj = $("input:checkbox");
const chkbxsArrObj = Object.keys(chkbxsObj).map(i => chkbxsObj[i]); //array che contiene tutti gli oggetti checkbox
var arrayChecked = []; //array che conterrà gli id dei checkbox segnati
var chkbxsArr = []; //array che conterrà gli id rappresentanti tutti i checkbox
for(var i=0;i<chkbxsArrObj.length; i++){
if(chkbxsArrObj[i].checked == true){
arrayChecked.push(chkbxsArrObj[i].id);
// chkbxsArr.splice(i,1);
}else{
chkbxsArr.push(chkbxsArrObj[i].id);
}
}
checkBoxStorage.setItem("chkbxsArrObj",JSON.stringify(chkbxsArrObj));
//I get soething like: chbxsArrObj: Array(13) [input#id, input#id, input#id, input#id, ...]
checkBoxStorage.setItem("chkbxsArr",chkbxsArr);
checkBoxStorage.setItem("arrayChecked",arrayChecked);
}