[Git] bisect

[์›๋ณธ ๋งํฌ]

bisect๋Š” ๋ฌธ์ œ ์ถ”์ ์„ ์œ„ํ•œ ๋…ํŠนํ•œ ๋ช…๋ น์–ด ์ค‘ ํ•˜๋‚˜๋‹ค.
์ด๊ฑด ์ปค๋ฐ‹ ํžˆ์Šคํ† ๋ฆฌ ๋‹จ์œ„๋กœ "์ด์ง„ ํƒ์ƒ‰"์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

์‹œ์Šคํ…œ์„ ์šด์˜ํ•˜๋‹ค๋ณด๋ฉด, ์–ด๋–ค ์ปค๋ฐ‹์—์„œ ๋ฌธ์ œ๋‚˜ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ถ”์ ํ•ด์•ผํ•  ์ผ์ด ๋“œ๋ฌผ์ง€ ์•Š๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.
๋ฌธ์ œ๊ฐ€ ๋ช…ํ™•ํ•˜๋‹ค๋ฉด ๊ทธ๋ƒฅ ์•Œ์•„์„œ ์ž˜ ๊ณ ์น˜๋ฉด ๋˜์ง€๋งŒ, ๊ทธ๋Ÿฌ๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์ „/ํ›„์˜ ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ๋น„๊ตํ•˜๊ณ  ๊ฒฐ๋ก ์„ ๋„์ถœํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํšจ๊ณผ์ ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ปค๋ฐ‹์ด ์ ๊ฑฐ๋‚˜, ๋ณธ์ธ์ด ๊ทธ ๋ณ€๊ฒฝ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์–ผ์ถ” ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด ์ปค๋ฐ‹์„ ์ฐพ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ปค๋ฐ‹ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ๋ฐฉ๋Œ€ํ•œ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋Ÿฌ๋Š” ๊ฒƒ๋„ ์‰ฌ์šด ์ผ์ด ์•„๋‹ˆ๋‹ค.

bisect๋Š” ์ด๋Ÿฐ ์ƒํ™ฉ์— ์‚ฌ์šฉ๋œ๋‹ค. ์ด๊ฒƒ ์ž์ฒด๊ฐ€ ๊ท€์‹ ๊ฐ™์ด ์•Œ์•„์„œ ์ฐพ์•„์ฃผ๊ณ  ๊ทธ๋Ÿฌ๋Š”๊ฑด ์•„๋‹ˆ๊ณ , ์ด์ง„ํƒ์ƒ‰ํ•˜๋“ฏ์ด ์ปค๋ฐ‹ ๋‚ด์—ญ์„ ์ด๋™ํ•˜๋ฉด์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์ง€์ ์„ ์ถ”์ ํ•˜๋Š” ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ํ•ด์ค„ ๋ฟ์ด๋‹ค.

์ด๊ฑธ ์“ฐ๋ ค๋ฉด ์šฐ์„  start ๋ช…๋ น์„ ์‚ฌ์šฉํ•ด์„œ bisect ์ปจํ…์ŠคํŠธ์— ์ง„์ž…ํ•ด์•ผ ํ•œ๋‹ค.

git bisect start

๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ์ปค๋ฐ‹์ด "๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”" ์ปค๋ฐ‹์ด๋ผ๊ณ  ๋งˆํ‚นํ•ด๋†“๋Š”๋‹ค.

git bisect bad

์ด๊ฒŒ ์ด์ง„ํƒ์ƒ‰์˜ ์˜ค๋ฅธ์ชฝ ๋ ์ข…๋ฃŒ์ง€์ ์ด ๋œ๋‹ค.

๊ทธ๋Ÿผ bisect log๋ฅผ ํ†ตํ•ด ์ƒํƒœ ๋‚ด์—ญ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด์ง„ํƒ์ƒ‰์˜ "์‹œ์ž‘์ "๋„ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.
ํ™•์‹คํžˆ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ์ปค๋ฐ‹์„ ํ•˜๋‚˜ ์„ ํƒํ•œ ๋‹ค์Œ์—, ๊ทธ๊ฑธ "good(๋ฌธ์ œ ์—†์Œ)"์œผ๋กœ ๋งˆํ‚นํ•œ๋‹ค.

git bisect good <์ปค๋ฐ‹ํ•ด์‹œ>

์ž, ์ด๋Ÿฌ๋ฉด bisect๋กœ ๋ฌธ์ œ๋ฅผ ์ฐพ์„ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋œ ๊ฒƒ์ด๋‹ค.
์ด์ œ๋ถ€ํ„ฐ๋Š” ํ˜„์žฌ ์ปค๋ฐ‹์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด good, ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด bad๋ฅผ ์ฐ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿผ ๋งˆํ‚น์„ ํ• ๋•Œ๋งˆ๋‹ค ์ด์ง„ํƒ์ƒ‰ ์›๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ git์ด ์ž๋™์œผ๋กœ ๋ฒ”์œ„๋ฅผ ์ขํžˆ๋ฉด์„œ ์Šค์œ„์นญ์„ ํ•ด์ค€๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๊ณ„์† ์ฐ๋‹ค๋ณด๋ฉด, ๊ฒฐ๊ตญ์—๋Š” good->bad๋กœ ๋ณ€ํ™”ํ–ˆ๋‹ค๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ์ปค๋ฐ‹์„ ์ถ”๋ก ํ•ด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ์ด๋ ‡๊ฒŒ ๊ฒฐ๋ก ์„ ๋‚ด์ค€๋‹ค.

๋ณ„๊ฑฐ ์•„๋‹Œ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ Git์—์„œ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
์‹œ์Šคํ…œ์˜ ๋ณต์žก๋„๊ฐ€ ๋†’๊ณ  ์—ฎ์—ฌ์žˆ๋Š” ๊ฒƒ์ด ๋งŽ๋‹ค๋ฉด ๊ทธ๋ƒฅ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


๊ทธ๋ž˜์„œ ํŒ๋‹จ์ด ๋‹ค ๋๋‚ฌ๋‹ค๋ฉด, reset์„ ์‚ฌ์šฉํ•ด์„œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ๋œ๋‹ค.



์ฐธ์กฐ
https://git-scm.com/docs/git-bisect
https://kevin3010.github.io/git/2025/11/02/At-the-end-you-use-git-bisect.html