2015-02-10 143 views
2

要做代碼審查,我經常做一個功能分支的git difftool hash_of_parent_of_first_commit_in_branch last_commit_in_branch。 feature_branch是從它的源代碼創建的(我們稱之爲master分支),並完成了它的工作。但是在這段時間裏,master分支收到了一些提交,並且這些提交被合併到了feature_branch中。爲了說明一下,如果我使用的是git log,這個命令很簡單:git log feature_branch ^master(也許根據不同情況使用--no-merges或者不使用)。有了這個,我將主要提交過濾出feature_branch。分支的Git diff,不包括其他分支的提交

我做了一些研究,但無法弄清楚我怎麼能做到這一點。也許使用櫻桃挑選?關於如何在diff/difftool命令上實現類似的任何想法?

+0

你確切的問題是什麼?您是否正在查找命令以查看功能分支中存在的源分支中不存在的提交? – 2015-02-10 14:20:09

回答

2

首先,你可以得到合適的提交列表,像這樣:

git rev-list --reverse --no-merges feature_branch ^master 

這得到每一個非合併提交的feature_branch不是來自主可達。 反轉將它們按時間順序排列,適用於應用。

其次,你可以櫻桃採摘這些到一個臨時分支:

git branch review $(git merge-base feature_branch master) 
git checkout review 
git rev-list --reverse --no-merges feature_branch ^master | xargs git cherry-pick 

,然後您的評論將在

git diff $(git merge-base feature_branch master)..review 

注意xargs可能使其難以解決交互式地出現問題cherry-pick。你可以編寫一個包裝腳本來完成所有這些,使用for循環代替xargs來保持與終端的連接。

+0

接受,因爲它是正確的答案!僅僅爲了幫助其他人,當在開發過程的中間從主人合併到feature_branch時,feature_branch上的下一次提交無法從合併插入的更改中完全「分離」。 (這很明顯,但我沒有注意到)所以,雖然這是正確的答案,並且如果人們改變的文件不同,那麼「古代神明的智慧」是正確的:小的請求可以節省很多時間。當正確(以及何時可以)應用時,重新保存時間會節省很多時間。 – jademcosta 2015-02-10 16:26:57