2013-11-27 31 views
23

在我目前正在研究的一個項目中,我們保留每個功能自己的brach,並在功能準備就緒時將其合併回主設備。每個功能分支中的提交可能會包含大量「WIP」功能,並在其完成並保持穩定之前打破其他功能的功能。如何僅在一個分支的提交中使用`git bisect`?

無論如何,由於主分支的提交是唯一(應該是)穩定的提交,我只想在該分支上使用git bisect

有沒有辦法在一個分支上限制git bisect

+1

可能的重複:http://stackoverflow.com/questions/5638211/how-do-you-get-git-bisect-to-ignore-merged-branches – bacar

回答

16

有沒有簡單的方法來完成這個沒有進一步的工作。在玩了一會之後,我有一些東西可以幫助你。

git bisect start master f9d5924 

for rev in $(git rev-list f9d5924..master --merges --first-parent); do 
    git rev-list $rev^2 --not $rev^ 
done | xargs git bisect skip 

這將啓動混帳與f9d5924爲你的好提交和master平分爲你的壞提交。然後它發現每個合併提交的右側的祖先不在左側。它通過這些祖先到git bisect skip跳過它們。但是,當它發現哪個提交不好時,它會顯示錯誤合併提交中所有可能的跳過提交。像下面這樣

$ git bisect good 
There are only 'skip'ped commits left to test. 
The first bad commit could be any of: 
0622204625d8817c5d8fd1a2a68b3aa91f2dcdf9 
0c771566b9e77e3bdc0a66a7404c8eae9f321a68 
5098b44f43f84b213eaab110073a6acd26a5cc02 
8b05a808d5e15852fbddaa529ba241fdac8ff693 
b0c755c3fa57e3c8d527e76fae38bc9925c01353 
We cannot bisect more! 

在這種情況下b0c755c3fa57e3c8d527e76fae38bc9925c01353是合併提交失敗。

編輯:這將工作,如果你有章魚合併。

+3

我覺得'git bisect'需要'--first -parent'國旗,並在幫助中描述。它只會遍歷實際分支的提交和合並提交,而不是它的合併分支或分支氣泡。你可以在你的分支上找到提交,在其他人之間依次排列,或者完成合並提交,並且知道問題出現在當前合併分支的某處。 –

+2

「章魚合併」是什麼意思? – Kostas

+1

當您將兩個以上的分支合併在一起時。你可以合併多個分支,比如'git merge branch-one branch-two branch-three'。 –

0

我認爲git bisect--no-parent標誌可以做到這一點很容易,但它不存在。

我能想到的唯一事情就是重新創建分支,並在新分支中提交。下面是在Linux shell中的例子:

$ git branch bisecttemp <first> 
$ for h in `git log --oneline --decorate --first-parent --reverse --format=%H <first>..<last>`; do git checkout -f $h; sleep .5; git reset bisecttemp; git commit -am"$h"; git checkout testing; git reset --hard [email protected]{1}; done 

,使一個bisecttemp分支關閉<first>提交我們關心,得到只是該範圍內的<first><last>提交我們關心的哈希值,每次訪問列表,在每次修改之後重置爲bisecttemp分支,而不更改工作樹,將所有與其提交的哈希提交不同的內容,再次檢查bisecttemp,然後將其重新設置回最後一位,即新的承諾。

有可能是做這一切的一個更聰明的方式,但基本是,它創造過我們關心的提交的範圍內開始一個新的分支,然後提交的分支只提交(常規狀態提交和合並,但沒有任何子分支提交)。你不能在櫻桃選擇這裏,因爲櫻桃選擇看父母,並且這將在合併承諾失敗。

這不是真的測試過,可能都是錯的。這只是一個想法。它可以全部在一個需要一系列提交的函數中彙總。

-1

要在一個分支上使用git bisect而不檢出主數據:
在您想要測試的分支上。

git bisect start --no-checkout 

這將啓動對當前分支平分線僅

繼續你的對開正常。

-1

我也想要一個適當的本地到git的解決方案來解決這個問題,只檢查單個分支上的提交,從而「責備」整個合併和/或合併請求。然而:

因爲主分支的提交是唯一的(應該是)穩定的,我想只在該分支git平分。

如果提示這個問題的問題是,一些你所給出的損壞,並且你不能測試提交的,你可以使用:

git bisect skip

要跳過這完全和檢查提交一個不同的。這將解決您在提交失敗時遇到的問題。一旦找到了破壞該功能的提交,您可以按照合併到您正在跟蹤的分支中。

我想你甚至可以git bisect skip所有提交不合並,無論是通過手動檢查或通過腳本。這會給出問題中的行爲。

相關問題