Skip to content
Navigation Menu
Toggle navigation
Sign in
In this repository
All GitHub Enterprise
↵
Jump to
↵
No suggested jump to results
In this repository
All GitHub Enterprise
↵
Jump to
↵
In this organization
All GitHub Enterprise
↵
Jump to
↵
In this repository
All GitHub Enterprise
↵
Jump to
↵
Sign in
Reseting focus
You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
Dismiss alert
{{ message }}
git-mirror
/
git
Public
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Issues
0
Pull requests
0
Actions
Projects
0
Security
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security
Insights
Files
a17b1d2
Documentation
arm
compat
contrib
git-gui
gitk-git
gitweb
mozilla-sha1
perl
ppc
t
lib-httpd
t3900
t4013
t4020
t4100
t4101
t5100
t5515
t7004
t7500
t9110
t9111
t9115
t9121
.gitattributes
.gitignore
Makefile
README
annotate-tests.sh
diff-lib.sh
lib-git-svn.sh
lib-httpd.sh
lib-read-tree-m-3way.sh
t0000-basic.sh
t0001-init.sh
t0003-attributes.sh
t0010-racy-git.sh
t0020-crlf.sh
t0021-conversion.sh
t0022-crlf-rename.sh
t0023-crlf-am.sh
t0030-stripspace.sh
t0040-parse-options.sh
t0050-filesystem.sh
t1000-read-tree-m-3way.sh
t1001-read-tree-m-2way.sh
t1002-read-tree-m-u-2way.sh
t1003-read-tree-prefix.sh
t1004-read-tree-m-u-wf.sh
t1005-read-tree-reset.sh
t1020-subdirectory.sh
t1100-commit-tree-options.sh
t1200-tutorial.sh
t1300-repo-config.sh
t1301-shared-repo.sh
t1302-repo-version.sh
t1303-wacky-config.sh
t1400-update-ref.sh
t1410-reflog.sh
t1420-lost-found.sh
t1500-rev-parse.sh
t1501-worktree.sh
t1502-rev-parse-parseopt.sh
t2000-checkout-cache-clash.sh
t2001-checkout-cache-clash.sh
t2002-checkout-cache-u.sh
t2003-checkout-cache-mkdir.sh
t2004-checkout-cache-temp.sh
t2005-checkout-index-symlinks.sh
t2007-checkout-symlink.sh
t2008-checkout-subdir.sh
t2009-checkout-statinfo.sh
t2050-git-dir-relative.sh
t2100-update-cache-badpath.sh
t2101-update-index-reupdate.sh
t2102-update-index-symlinks.sh
t2200-add-update.sh
t2201-add-update-typechange.sh
t3000-ls-files-others.sh
t3001-ls-files-others-exclude.sh
t3002-ls-files-dashpath.sh
t3010-ls-files-killed-modified.sh
t3020-ls-files-error-unmatch.sh
t3030-merge-recursive.sh
t3040-subprojects-basic.sh
t3050-subprojects-fetch.sh
t3060-ls-files-with-tree.sh
t3100-ls-tree-restrict.sh
t3101-ls-tree-dirname.sh
t3200-branch.sh
t3201-branch-contains.sh
t3210-pack-refs.sh
t3300-funny-names.sh
t3400-rebase.sh
t3401-rebase-partial.sh
t3402-rebase-merge.sh
t3403-rebase-skip.sh
t3404-rebase-interactive.sh
t3405-rebase-malformed.sh
t3406-rebase-message.sh
t3407-rebase-abort.sh
t3500-cherry.sh
t3501-revert-cherry-pick.sh
t3502-cherry-pick-merge.sh
t3600-rm.sh
t3700-add.sh
t3701-add-interactive.sh
t3800-mktag.sh
t3900-i18n-commit.sh
t3901-8859-1.txt
t3901-i18n-patch.sh
t3901-utf8.txt
t3902-quoted.sh
t3903-stash.sh
t4000-diff-format.sh
t4001-diff-rename.sh
t4002-diff-basic.sh
t4003-diff-rename-1.sh
t4004-diff-rename-symlink.sh
t4005-diff-rename-2.sh
t4006-diff-mode.sh
t4007-rename-3.sh
t4008-diff-break-rewrite.sh
t4009-diff-rename-4.sh
t4010-diff-pathspec.sh
t4011-diff-symlink.sh
t4012-diff-binary.sh
t4013-diff-various.sh
t4014-format-patch.sh
t4015-diff-whitespace.sh
t4016-diff-quote.sh
t4017-diff-retval.sh
t4017-quiet.sh
t4018-diff-funcname.sh
t4019-diff-wserror.sh
t4020-diff-external.sh
t4021-format-patch-numbered.sh
t4021-format-patch-signer-mime.sh
t4022-diff-rewrite.sh
t4023-diff-rename-typechange.sh
t4024-diff-optimize-common.sh
t4025-hunk-header.sh
t4026-color.sh
t4027-diff-submodule.sh
t4028-format-patch-mime-headers.sh
t4100-apply-stat.sh
t4101-apply-nonl.sh
t4102-apply-rename.sh
t4103-apply-binary.sh
t4104-apply-boundary.sh
t4105-apply-fuzz.sh
t4109-apply-multifrag.sh
t4110-apply-scan.sh
t4112-apply-renames.sh
t4113-apply-ending.sh
t4114-apply-typechange.sh
t4115-apply-symlink.sh
t4116-apply-reverse.sh
t4117-apply-reject.sh
t4118-apply-empty-context.sh
t4119-apply-config.sh
t4120-apply-popt.sh
t4121-apply-diffs.sh
t4122-apply-symlink-inside.sh
t4123-apply-shrink.sh
t4124-apply-ws-rule.sh
t4125-apply-ws-fuzz.sh
t4150-am-subdir.sh
t4200-rerere.sh
t4201-shortlog.sh
t4202-log.sh
t5000-tar-tree.sh
t5100-mailinfo.sh
t5300-pack-object.sh
t5301-sliding-window.sh
t5302-pack-index.sh
t5303-hash-object.sh
t5304-prune.sh
t5305-include-tag.sh
t5400-send-pack.sh
t5401-update-hooks.sh
t5402-post-merge-hook.sh
t5403-post-checkout-hook.sh
t5404-tracking-branches.sh
t5405-send-pack-rewind.sh
t5406-remote-rejects.sh
t5500-fetch-pack.sh
t5502-quickfetch.sh
t5503-tagfollow.sh
t5505-remote.sh
t5510-fetch.sh
t5511-refspec.sh
t5512-ls-remote.sh
t5515-fetch-merge-logic.sh
t5516-fetch-push.sh
t5517-push-mirror.sh
t5520-pull.sh
t5530-upload-pack-error.sh
t5540-http-push.sh
t5600-clone-fail-cleanup.sh
t5700-clone-reference.sh
t5701-clone-local.sh
t5702-clone-options.sh
t5710-info-alternate.sh
t6000lib.sh
t6001-rev-list-graft.sh
t6002-rev-list-bisect.sh
t6003-rev-list-topo-order.sh
t6004-rev-list-path-optim.sh
t6005-rev-list-count.sh
t6006-rev-list-format.sh
t6007-rev-list-cherry-pick-file.sh
t6008-rev-list-submodule.sh
t6009-rev-list-parent.sh
t6010-merge-base.sh
t6020-merge-df.sh
t6021-merge-criss-cross.sh
t6022-merge-rename.sh
t6023-merge-file.sh
t6023-merge-rename-nocruft.sh
t6024-recursive-merge.sh
t6025-merge-symlinks.sh
t6026-merge-attr.sh
t6027-merge-binary.sh
t6028-merge-up-to-date.sh
t6029-merge-subtree.sh
t6030-bisect-porcelain.sh
t6031-merge-recursive.sh
t6101-rev-parse-parents.sh
t6120-describe.sh
t6200-fmt-merge-msg.sh
t6300-for-each-ref.sh
t7001-mv.sh
t7002-grep.sh
t7003-filter-branch.sh
t7004-tag.sh
t7005-editor.sh
t7010-setup.sh
t7101-reset.sh
t7102-reset.sh
t7103-reset-bare.sh
t7104-reset.sh
t7201-co.sh
t7300-clean.sh
t7400-submodule-basic.sh
t7401-submodule-summary.sh
t7500-commit.sh
t7501-commit.sh
t7502-commit.sh
t7502-status.sh
t7503-pre-commit-hook.sh
t7504-commit-msg-hook.sh
t7505-prepare-commit-msg-hook.sh
t7600-merge.sh
t7610-mergetool.sh
t8001-annotate.sh
t8002-blame.sh
t8003-blame.sh
t8004-blame.sh
t9001-send-email.sh
t9100-git-svn-basic.sh
t9101-git-svn-props.sh
t9102-git-svn-deep-rmdir.sh
t9103-git-svn-tracked-directory-removed.sh
t9104-git-svn-follow-parent.sh
t9105-git-svn-commit-diff.sh
t9106-git-svn-commit-diff-clobber.sh
t9106-git-svn-dcommit-clobber-series.sh
t9107-git-svn-migrate.sh
t9108-git-svn-glob.sh
t9110-git-svn-use-svm-props.sh
t9111-git-svn-use-svnsync-props.sh
t9112-git-svn-md5less-file.sh
t9113-git-svn-dcommit-new-file.sh
t9114-git-svn-dcommit-merge.sh
t9115-git-svn-dcommit-funky-renames.sh
t9116-git-svn-log.sh
t9117-git-svn-init-clone.sh
t9118-git-svn-funky-branch-names.sh
t9119-git-svn-info.sh
t9120-git-svn-clone-with-percent-escapes.sh
t9121-git-svn-fetch-renamed-dir.sh
t9200-git-cvsexportcommit.sh
t9300-fast-import.sh
t9301-fast-export.sh
t9400-git-cvsserver-server.sh
t9500-gitweb-standalone-no-errors.sh
t9600-cvsimport.sh
test-lib.sh
test4012.png
test9200a.png
test9200b.png
templates
xdiff
.gitattributes
.gitignore
.mailmap
COPYING
GIT-VERSION-GEN
INSTALL
Makefile
README
RelNotes
alias.c
alloc.c
archive-tar.c
archive-zip.c
archive.c
archive.h
attr.c
attr.h
base85.c
blob.c
blob.h
branch.c
branch.h
builtin-add.c
builtin-annotate.c
builtin-apply.c
builtin-archive.c
builtin-blame.c
builtin-branch.c
builtin-bundle.c
builtin-cat-file.c
builtin-check-attr.c
builtin-check-ref-format.c
builtin-checkout-index.c
builtin-checkout.c
builtin-clean.c
builtin-commit-tree.c
builtin-commit.c
builtin-config.c
builtin-count-objects.c
builtin-describe.c
builtin-diff-files.c
builtin-diff-index.c
builtin-diff-tree.c
builtin-diff.c
builtin-fast-export.c
builtin-fetch--tool.c
builtin-fetch-pack.c
builtin-fetch.c
builtin-fmt-merge-msg.c
builtin-for-each-ref.c
builtin-fsck.c
builtin-gc.c
builtin-grep.c
builtin-http-fetch.c
builtin-init-db.c
builtin-log.c
builtin-ls-files.c
builtin-ls-remote.c
builtin-ls-tree.c
builtin-mailinfo.c
builtin-mailsplit.c
builtin-merge-base.c
builtin-merge-file.c
builtin-merge-ours.c
builtin-merge-recursive.c
builtin-mv.c
builtin-name-rev.c
builtin-pack-objects.c
builtin-pack-refs.c
builtin-prune-packed.c
builtin-prune.c
builtin-push.c
builtin-read-tree.c
builtin-reflog.c
builtin-remote.c
builtin-rerere.c
builtin-reset.c
builtin-rev-list.c
builtin-rev-parse.c
builtin-revert.c
builtin-rm.c
builtin-send-pack.c
builtin-shortlog.c
builtin-show-branch.c
builtin-show-ref.c
builtin-stripspace.c
builtin-symbolic-ref.c
builtin-tag.c
builtin-tar-tree.c
builtin-unpack-objects.c
builtin-update-index.c
builtin-update-ref.c
builtin-upload-archive.c
builtin-verify-pack.c
builtin-verify-tag.c
builtin-write-tree.c
builtin.h
bundle.c
bundle.h
cache-tree.c
cache-tree.h
cache.h
check-builtins.sh
check-racy.c
color.c
color.h
combine-diff.c
command-list.txt
commit.c
commit.h
config.c
config.mak.in
configure.ac
connect.c
convert.c
copy.c
csum-file.c
csum-file.h
ctype.c
daemon.c
date.c
decorate.c
decorate.h
delta.h
diff-delta.c
diff-lib.c
diff.c
diff.h
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c
diffcore-rename.c
diffcore.h
dir.c
dir.h
dump-cache-tree.c
entry.c
environment.c
exec_cmd.c
exec_cmd.h
fast-import.c
fetch-pack.h
fixup-builtins
fsck.c
fsck.h
generate-cmdlist.sh
git-add--interactive.perl
git-am.sh
git-archimport.perl
git-bisect.sh
git-clone.sh
git-compat-util.h
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-filter-branch.sh
git-instaweb.sh
git-lost-found.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-merge-stupid.sh
git-merge.sh
git-mergetool.sh
git-parse-remote.sh
git-pull.sh
git-quiltimport.sh
git-rebase--interactive.sh
git-rebase.sh
git-relink.perl
git-repack.sh
git-request-pull.sh
git-send-email.perl
git-sh-setup.sh
git-stash.sh
git-submodule.sh
git-svn.perl
git-web--browse.sh
git.c
git.spec.in
grep.c
grep.h
hash-object.c
hash.c
hash.h
help.c
http-push.c
http-walker.c
http.c
http.h
ident.c
imap-send.c
index-pack.c
interpolate.c
interpolate.h
list-objects.c
list-objects.h
ll-merge.c
ll-merge.h
lockfile.c
log-tree.c
log-tree.h
mailmap.c
mailmap.h
match-trees.c
merge-file.c
merge-index.c
merge-recursive.h
merge-tree.c
mktag.c
mktree.c
object.c
object.h
pack-check.c
pack-redundant.c
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
pager.c
parse-options.c
parse-options.h
patch-delta.c
patch-id.c
patch-ids.c
patch-ids.h
path-list.c
path-list.h
path.c
pkt-line.c
pkt-line.h
pretty.c
progress.c
progress.h
quote.c
quote.h
reachable.c
reachable.h
read-cache.c
receive-pack.c
reflog-walk.c
reflog-walk.h
refs.c
refs.h
remote.c
remote.h
revision.c
revision.h
run-command.c
run-command.h
send-pack.h
server-info.c
setup.c
sha1_file.c
sha1_name.c
shallow.c
shell.c
shortlog.h
show-index.c
sideband.c
sideband.h
strbuf.c
strbuf.h
symlinks.c
tag.c
tag.h
tar.h
test-absolute-path.c
test-chmtime.c
test-date.c
test-delta.c
test-genrandom.c
test-match-trees.c
test-parse-options.c
test-sha1.c
test-sha1.sh
thread-utils.c
thread-utils.h
trace.c
transport.c
transport.h
tree-diff.c
tree-walk.c
tree-walk.h
tree.c
tree.h
unpack-file.c
unpack-trees.c
unpack-trees.h
update-server-info.c
upload-pack.c
usage.c
utf8.c
utf8.h
var.c
walker.c
walker.h
write_or_die.c
ws.c
wt-status.c
wt-status.h
xdiff-interface.c
xdiff-interface.h
Breadcrumbs
git
/
t
/
t6030-bisect-porcelain.sh
Copy path
Blame
Blame
Latest commit
History
History
executable file
·
289 lines (258 loc) · 8.19 KB
Breadcrumbs
git
/
t
/
t6030-bisect-porcelain.sh
Top
File metadata and controls
Code
Blame
executable file
·
289 lines (258 loc) · 8.19 KB
Raw
#!/bin/sh # # Copyright (c) 2007 Christian Couder # test_description='Tests git-bisect functionality' exec </dev/null . ./test-lib.sh add_line_into_file() { _line=$1 _file=$2 if [ -f "$_file" ]; then echo "$_line" >> $_file || return $? MSG="Add <$_line> into <$_file>." else echo "$_line" > $_file || return $? git add $_file || return $? MSG="Create file <$_file> with <$_line> inside." fi test_tick git-commit --quiet -m "$MSG" $_file } HASH1= HASH2= HASH3= HASH4= test_expect_success 'set up basic repo with 1 file (hello) and 4 commits' ' add_line_into_file "1: Hello World" hello && HASH1=$(git rev-parse --verify HEAD) && add_line_into_file "2: A new day for git" hello && HASH2=$(git rev-parse --verify HEAD) && add_line_into_file "3: Another new day for git" hello && HASH3=$(git rev-parse --verify HEAD) && add_line_into_file "4: Ciao for now" hello && HASH4=$(git rev-parse --verify HEAD) ' test_expect_success 'bisect starts with only one bad' ' git bisect reset && git bisect start && git bisect bad $HASH4 && git bisect next ' test_expect_success 'bisect does not start with only one good' ' git bisect reset && git bisect start && git bisect good $HASH1 || return 1 if git bisect next then echo Oops, should have failed. false else : fi ' test_expect_success 'bisect start with one bad and good' ' git bisect reset && git bisect start && git bisect good $HASH1 && git bisect bad $HASH4 && git bisect next ' test_expect_success 'bisect fails if given any junk instead of revs' ' git bisect reset && test_must_fail git bisect start foo $HASH1 -- && test_must_fail git bisect start $HASH4 $HASH1 bar -- && test -z "$(git for-each-ref "refs/bisect/*")" && test_must_fail ls .git/BISECT_* && git bisect start && test_must_fail git bisect good foo $HASH1 && test_must_fail git bisect good $HASH1 bar && test_must_fail git bisect bad frotz && test_must_fail git bisect bad $HASH3 $HASH4 && test_must_fail git bisect skip bar $HASH3 && test_must_fail git bisect skip $HASH1 foo && test -z "$(git for-each-ref "refs/bisect/*")" && git bisect good $HASH1 && git bisect bad $HASH4 ' test_expect_success 'bisect reset: back in the master branch' ' git bisect reset && echo "* master" > branch.expect && git branch > branch.output && cmp branch.expect branch.output ' test_expect_success 'bisect reset: back in another branch' ' git checkout -b other && git bisect start && git bisect good $HASH1 && git bisect bad $HASH3 && git bisect reset && echo " master" > branch.expect && echo "* other" >> branch.expect && git branch > branch.output && cmp branch.expect branch.output ' test_expect_success 'bisect reset when not bisecting' ' git bisect reset && git branch > branch.output && cmp branch.expect branch.output ' test_expect_success 'bisect reset removes packed refs' ' git bisect reset && git bisect start && git bisect good $HASH1 && git bisect bad $HASH3 && git pack-refs --all --prune && git bisect next && git bisect reset && test -z "$(git for-each-ref "refs/bisect/*")" && test -z "$(git for-each-ref "refs/heads/bisect")" ' # $HASH1 is good, $HASH4 is bad, we skip $HASH3 # but $HASH2 is bad, # so we should find $HASH2 as the first bad commit test_expect_success 'bisect skip: successfull result' ' git bisect reset && git bisect start $HASH4 $HASH1 && git bisect skip && git bisect bad > my_bisect_log.txt && grep "$HASH2 is first bad commit" my_bisect_log.txt && git bisect reset ' # $HASH1 is good, $HASH4 is bad, we skip $HASH3 and $HASH2 # so we should not be able to tell the first bad commit # among $HASH2, $HASH3 and $HASH4 test_expect_success 'bisect skip: cannot tell between 3 commits' ' git bisect start $HASH4 $HASH1 && git bisect skip || return 1 if git bisect skip > my_bisect_log.txt then echo Oops, should have failed. false else test $? -eq 2 && grep "first bad commit could be any of" my_bisect_log.txt && ! grep $HASH1 my_bisect_log.txt && grep $HASH2 my_bisect_log.txt && grep $HASH3 my_bisect_log.txt && grep $HASH4 my_bisect_log.txt && git bisect reset fi ' # $HASH1 is good, $HASH4 is bad, we skip $HASH3 # but $HASH2 is good, # so we should not be able to tell the first bad commit # among $HASH3 and $HASH4 test_expect_success 'bisect skip: cannot tell between 2 commits' ' git bisect start $HASH4 $HASH1 && git bisect skip || return 1 if git bisect good > my_bisect_log.txt then echo Oops, should have failed. false else test $? -eq 2 && grep "first bad commit could be any of" my_bisect_log.txt && ! grep $HASH1 my_bisect_log.txt && ! grep $HASH2 my_bisect_log.txt && grep $HASH3 my_bisect_log.txt && grep $HASH4 my_bisect_log.txt && git bisect reset fi ' # We want to automatically find the commit that # introduced "Another" into hello. test_expect_success \ '"git bisect run" simple case' \ 'echo "#"\!"/bin/sh" > test_script.sh && echo "grep Another hello > /dev/null" >> test_script.sh && echo "test \$? -ne 0" >> test_script.sh && chmod +x test_script.sh && git bisect start && git bisect good $HASH1 && git bisect bad $HASH4 && git bisect run ./test_script.sh > my_bisect_log.txt && grep "$HASH3 is first bad commit" my_bisect_log.txt && git bisect reset' # We want to automatically find the commit that # introduced "Ciao" into hello. test_expect_success \ '"git bisect run" with more complex "git bisect start"' \ 'echo "#"\!"/bin/sh" > test_script.sh && echo "grep Ciao hello > /dev/null" >> test_script.sh && echo "test \$? -ne 0" >> test_script.sh && chmod +x test_script.sh && git bisect start $HASH4 $HASH1 && git bisect run ./test_script.sh > my_bisect_log.txt && grep "$HASH4 is first bad commit" my_bisect_log.txt && git bisect reset' # $HASH1 is good, $HASH5 is bad, we skip $HASH3 # but $HASH4 is good, # so we should find $HASH5 as the first bad commit HASH5= test_expect_success 'bisect skip: add line and then a new test' ' add_line_into_file "5: Another new line." hello && HASH5=$(git rev-parse --verify HEAD) && git bisect start $HASH5 $HASH1 && git bisect skip && git bisect good > my_bisect_log.txt && grep "$HASH5 is first bad commit" my_bisect_log.txt && git bisect log > log_to_replay.txt && git bisect reset ' test_expect_success 'bisect skip and bisect replay' ' git bisect replay log_to_replay.txt > my_bisect_log.txt && grep "$HASH5 is first bad commit" my_bisect_log.txt && git bisect reset ' HASH6= test_expect_success 'bisect run & skip: cannot tell between 2' ' add_line_into_file "6: Yet a line." hello && HASH6=$(git rev-parse --verify HEAD) && echo "#"\!"/bin/sh" > test_script.sh && echo "sed -ne \\\$p hello | grep Ciao > /dev/null && exit 125" >> test_script.sh && echo "grep line hello > /dev/null" >> test_script.sh && echo "test \$? -ne 0" >> test_script.sh && chmod +x test_script.sh && git bisect start $HASH6 $HASH1 && if git bisect run ./test_script.sh > my_bisect_log.txt then echo Oops, should have failed. false else test $? -eq 2 && grep "first bad commit could be any of" my_bisect_log.txt && ! grep $HASH3 my_bisect_log.txt && ! grep $HASH6 my_bisect_log.txt && grep $HASH4 my_bisect_log.txt && grep $HASH5 my_bisect_log.txt fi ' HASH7= test_expect_success 'bisect run & skip: find first bad' ' git bisect reset && add_line_into_file "7: Should be the last line." hello && HASH7=$(git rev-parse --verify HEAD) && echo "#"\!"/bin/sh" > test_script.sh && echo "sed -ne \\\$p hello | grep Ciao > /dev/null && exit 125" >> test_script.sh && echo "sed -ne \\\$p hello | grep day > /dev/null && exit 125" >> test_script.sh && echo "grep Yet hello > /dev/null" >> test_script.sh && echo "test \$? -ne 0" >> test_script.sh && chmod +x test_script.sh && git bisect start $HASH7 $HASH1 && git bisect run ./test_script.sh > my_bisect_log.txt && grep "$HASH6 is first bad commit" my_bisect_log.txt ' test_expect_success 'bisect starting with a detached HEAD' ' git bisect reset && git checkout master^ && HEAD=$(git rev-parse --verify HEAD) && git bisect start && test $HEAD = $(cat .git/BISECT_START) && git bisect reset && test $HEAD = $(git rev-parse --verify HEAD) ' # # test_done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
You can’t perform that action at this time.