在我目前正在研究的一個項目中,我們保留每個功能自己的brach,並在功能準備就緒時將其合併回主設備。每個功能分支中的提交可能會包含大量「WIP」功能,並在其完成並保持穩定之前打破其他功能的功能。如何僅在一個分支的提交中使用`git bisect`?
無論如何,由於主分支的提交是唯一(應該是)穩定的提交,我只想在該分支上使用git bisect
。
有沒有辦法在一個分支上限制git bisect
?
在我目前正在研究的一個項目中,我們保留每個功能自己的brach,並在功能準備就緒時將其合併回主設備。每個功能分支中的提交可能會包含大量「WIP」功能,並在其完成並保持穩定之前打破其他功能的功能。如何僅在一個分支的提交中使用`git bisect`?
無論如何,由於主分支的提交是唯一(應該是)穩定的提交,我只想在該分支上使用git bisect
。
有沒有辦法在一個分支上限制git bisect
?
有沒有簡單的方法來完成這個沒有進一步的工作。在玩了一會之後,我有一些東西可以幫助你。
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
是合併提交失敗。
編輯:這將不工作,如果你有章魚合併。
我覺得'git bisect'需要'--first -parent'國旗,並在幫助中描述。它只會遍歷實際分支的提交和合並提交,而不是它的合併分支或分支氣泡。你可以在你的分支上找到提交,在其他人之間依次排列,或者完成合並提交,並且知道問題出現在當前合併分支的某處。 –
「章魚合併」是什麼意思? – Kostas
當您將兩個以上的分支合併在一起時。你可以合併多個分支,比如'git merge branch-one branch-two branch-three'。 –
我認爲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,然後將其重新設置回最後一位,即新的承諾。
有可能是做這一切的一個更聰明的方式,但基本是,它創造過我們關心的提交的範圍內開始一個新的分支,然後提交的分支只提交(常規狀態提交和合並,但沒有任何子分支提交)。你不能在櫻桃選擇這裏,因爲櫻桃選擇看父母,並且這將在合併承諾失敗。
這不是真的測試過,可能都是錯的。這只是一個想法。它可以全部在一個需要一系列提交的函數中彙總。
要在一個分支上使用git bisect而不檢出主數據:
在您想要測試的分支上。
git bisect start --no-checkout
這將啓動對當前分支平分線僅
繼續你的對開正常。
我也想要一個適當的本地到git的解決方案來解決這個問題,只檢查單個分支上的提交,從而「責備」整個合併和/或合併請求。然而:
因爲主分支的提交是唯一的(應該是)穩定的,我想只在該分支git平分。
如果提示這個問題的問題是,一些你所給出的損壞,並且你不能測試提交的,你可以使用:
git bisect skip
要跳過這完全和檢查提交一個不同的。這將解決您在提交失敗時遇到的問題。一旦找到了破壞該功能的提交,您可以按照合併到您正在跟蹤的分支中。
我想你甚至可以git bisect skip
所有提交不合並,無論是通過手動檢查或通過腳本。這會給出問題中的行爲。
可能的重複:http://stackoverflow.com/questions/5638211/how-do-you-get-git-bisect-to-ignore-merged-branches – bacar