Skip to content

Reversion of erroneous force pushes & branch stocktake #3167

@Lestropie

Description

@Lestropie

Logging here my process for restoring all branches in the repository back to their original state before I erroneously force-pushed the whole repository with unintended rebases.

At the end of the OP is a list of code branches.
Some of these need to be checked by other @MRtrix3/mrtrix3-devs to decide for a given branch whether to create a PR, delete, or leave it hanging.

gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28"   /repos/MRtrix3/mrtrix3/branches

Unfortunately this only gives 30 branches; it's supposed to paginate, and allow you to request up to 100 items per request and then provide links to step through the rest of the data, but for whatever reason, I couldn't get this to work. So I just went through the branches on the GitHub website interface and manually generated a list. Note that I'd already deleted a number of branches that had been erroneously re-created on GitHub due to my local clone not having been pruned, but there are likely still a number of such branches in this list.

Branch list:
dev_terminal_fixes
dwicat_varying_grids_master
labelconvert_schaefer
mesh2voxel_4D_template
mrcalc_polar_example
output_pipe_error_message
sift_null_fixel
wsl_disable_mmap
305_to_dev
5TTmsmt
5TTmsmttorebase
5ttedit_float
5ttgen_freesurfer_enhancements
5ttgen_hsvs_fixes
add_deep_atropos
apodized_disc_function
bbgd_stepsize_enum
bval_clamp_zero
check_first
containers_no_thirdparty
direction_sets_fixed
dvsgen_enhancements
dwi2adc_interface
dwi_metadata
dwicat_to_304
dwidenoise_enhancements
dwifslpreproc_newcli_fixes
dwigradcheck_enhancements
dwirecon
fix_cmdlist_pythonapi
fix_npy_tests
fix_pr2859
fixel_dataset_class
fixel_dataset_class_sift
fixel_dataset_handling
fixelcorrespondence
fixeltransform
fod2fixel_skew
fsl_first_precalc
glm_disable_zlookup
inference_refactor
iwyu
meshsample
mrcalc_transform_check
mrtrix3_run_shebang_alternative
new_peaks_cmds
no_type_various
npy
old_dwidenoise
path_waitfor_fix
poptemplate_fix_multicontrast
population_template_linear_drift_fix
population_template_tweaks
python_citation_notification
python_citation_warning_license
python_cmake_binwrappers_splitall
python_cmd_changes
python_image_piping
python_remove_third_format
sh2metric
split_tests
tckconvert_read_vtk_offsets
tckmap_fixel
tcksample_4d
tcksample_fod
tcksift2_units
tcksift2_weight_options
3.0.5.beta.branch
3.0_RC3_latest
DICOM_support_number_of_slices_attribute
allow_additional_calls_in_signal_handler
app_bundles
backtrack_recursive
blezek-tckconvert_write_binary_vtk
build_record_mem_usage
canonical_direct_io
cmake_experimental
cmake_experimental_fftw3
cmake_experimental_shared
configure_remove_naked_except
connectome_output_config
coverage
cpp17
dcmedit_enhancements
degibbs_complex_dropout
detect_corrupt_fixel_index
dicom_cmdline_selector_abort_on_error
dicom_parse_pe_polarity
dirorder_output_indices
doc
docs_404
docs_msmt_singleshell
dwidenoise_bdc_svd
dwidenoise_report_extent
dwifslpreproc_save_bad_slspec
external_project_changes
fix_cli_bool_operators
fix_cpp20
fix_dicom_sorting_philips
fix_doxygen
fix_png_handling
fix_releases
fix_save_method
fix_unsupported_characters_in_fields_for_matlab
fix_unused_variables
fix_version_external_projects
fix_windows_release
fixel_output_enable_force
fixelfilter_cfe
fixelfilter_cfe_mask
glm_design_rank_deficiency
google_test
gpu_compute_api_draft
handle_siemens_mosaic_even_if_csa_information_missing
increase_bzerothreshold
inference_new_features_speedtest
iwyu_experimental
latest_gcc
maskclean_tweak
maskdistance
merge_shard
mesh2image_changes_to_check
mesh_act
meshalign
more_verbose_file_check_error_messages
mrdump_enhancements
mrfilter
mrreg
mrreg_lite
mrstats_iqr
mrview_add_two_new_command_line_option
mrview_annotation_tool
mrview_custom_colourmap
mrview_igtlink
mrview_odf_colour_by_other
mrview_rgbvalues
mrview_spherical_rois
mrview_sync_test
multithreading_class_inheritance
new_testing_structure
nonstationarity_clarification
paper_demos
patent_docs
philips_intensity_scaling
porcupine
pylint_2.11
reduce_lib_deps
registration_CC
registration_multi_contrast
revert-2113-increase_image_size_limit
rician_bias_correction
run_tests_check_location
shview_save_as_ply
sift2_modulated_connectivity
signal_handlers_disable_envvar
slice_timing_priority
stdfilesystem
stdfs
string_formattig
tckgen_ballsticks
tckgen_iFOD1_fix_max_angle_at_seed
tckgen_output_stats
tckgen_ptt
tckgen_sgm_truncation
tckmap_vectorfield
template_stride_check
tensor2metric_check_input
test_fftw
test_openGL_geometry_shader_on_M1_macbook
tmate_macos_workflow
tractography_tangent_function
transformcalc_fix
ukb
update_R_module
vendorscheme
weekly_releases
5ttgen_fsl_anat
mrreg_asym
scripts_parallel
colormap
runcommand_blocked
scripts_checkoutput
doxygen_create_graphs
connectome2metric
tractography_mesh
retina_display

For each branch name, I sent an API request asking for just force pushes:

mkdir events_by_branch
for branch in $(cat branches.txt); do \
    gh api \
        --method GET \
        --header "Accept: application/vnd.github+json" \
        --header "X-GitHub-Api-Version: 2022-11-28" \
        /repos/MRtrix3/mrtrix3/activity \
        -F activity_type=force_push \
        -F ref=${branch} \
        > events_by_branch/${branch}.json
done

For each branch, I parsed those force pushes that happened on the day of the issue, and tabulated which branches needed to be force-pushed from their current tip back to their original:

#!/usr/bin/env python3
import json
import os
import sys

with open('branches.txt', 'r') as f:
    branches = [line.strip() for line in f.readlines() if line]

sys.stdout.write('Branch\tCurrent\tRevertTo\n')
for branch in branches:
    with open(os.path.join('events_by_branch', f'{branch}.txt'), 'r') as f:
        data = json.load(f)
    data = [item for item in data if item['timestamp'].startswith('2025-08-26')]
    if not data:
        continue
    current = data[0]["after"]
    revert_to = data[-1]["before"]
    if current != revert_to:
        sys.stdout.write(f'{branch}\t{current}\t{revert_to}\n')
Full list of branches, previous tip due to erroneous force pushes, and new target for rectifying force push:
**Branch	Current	RevertTo
dev_terminal_fixes	d21d986c191342356dbcee3d0712740e803d704f	0d0ef7b4b8c3e8d3c9dea76ff32862c7273222dc
inference_refactor	e9ba5ca545eef49bef48ab60e1cc16a676632645	569fef52919ac5469618b40d51c87645942b0d2f
3.0.5.beta.branch	47ee093399a566942d0036f260cd0a5198f92764	b469de363b4e463fbf824fc695b68b742b44fb34
3.0_RC3_latest	7d07eea0c0d6ab960c93c430a4cc38ad352745a2	649dd3bca4916e4ecdfb31a2916bbe0c68f902f0
DICOM_support_number_of_slices_attribute	c0e82d7c6f10a9e167d7ea9f9422d74a31811883	3596ed4db4aff96334a55864dbdb2ab4176ef40a
allow_additional_calls_in_signal_handler	68a5e2e336c368532644c5452c69ff22853176c7	b4c5b74c947506ba400bf097c850a82e4c079062
app_bundles	4dea353751a470231be317446a7c6ced1a482e14	cf209169a3269cee99b7595b1aef00e73cab4fac
backtrack_recursive	405b5456e607508dc001e83c5a0b630c85cc97a2	755e054e828ba885e8baef87f2695a1f10036b5b
blezek-tckconvert_write_binary_vtk	43e1c4f344c150f889af7582d447cf925d8e0772	7f15b2629978a83bdc300403017705dda2b6da9b
build_record_mem_usage	73921b3320eb9a00d5ed3fd3edf2df4eed66a617	2701ec5c7c95db53abc9a6cdb58aa9af31964a60
canonical_direct_io	88cb9e536eada772309d2ace7cb1f5f5afaf2b3f	63e03429da356dce20ea740f416534397bda4e96
cmake_experimental	7ad2705ec4ee3df28b9d2effa919795201d3e4e8	4146b3e3c812695fc7cba608c13c058a730e0691
cmake_experimental_fftw3	0599c563eb1ca9733762a959306aef1a8f6ded3d	7b812778449d885290dc4bbf41d40c09835ab7e2
cmake_experimental_shared	516aaeda76143addd32e51b4919e9a17fab7d661	d207e6d9dc04b271b7a03d8c095049ec87f1e572
configure_remove_naked_except	a6407016290b1672ba2c956ed98b5c5dc697fe61	62d37ad0bbeafb96baaa0030212c854ac584689a
connectome_output_config	da9d8fb25f8b90b30b66ba2c65851a8b04a38cf8	fa3eae3b0a8e421cbaa86b1e65ede149c16d09a2
coverage	8e844d124693c7b60c4ce2a58fe59e6f9249aa87	4a0e77d3fc781ae7b29cb4c5c7c458d9139c82a8
cpp17	7280e06f591b8804203cbb7d039afca49ba24c7a	e8ea94c6b45c4a89df003c718ab8cb76c4b477c3
dcmedit_enhancements	063a37fd3d61f2e44366c75000d42a53b7f220c7	3c46785007bffcdff65cd7f1a7662060d833ea5d
degibbs_complex_dropout	1bc83ec0c81f2e50241483ce0fbdcdcee7501d04	830df3e3db4e3d1c5b2e2b51827c264d41650ab6
detect_corrupt_fixel_index	9f46700a61ed6f03385eec7f5280f6f668fa4fed	039bef910eb0acd9e2b2de38cb9191740932b572
dicom_cmdline_selector_abort_on_error	7dae13072ef24d1379d7e8a31bc002dcb204f106	942ccf3170e676b0e7cd76d326b40421ca35b581
dicom_parse_pe_polarity	7cb1ce1f144436c742ecc3cd9b12fbb8cf0c0f24	26676cf3277965e7704765cc93a56804734f6c26
dirorder_output_indices	1c63f3bf8b1c26386baa7fb8c01fa5f326542ad8	8fe43d35434cb5610dc438b88907887cd2bde388
doc	c1ab6880a2dcfcb277bf0c8194609e708730e892	047e21f3474237fe2bdabcc07d949ac236505087
docs_404	f606a459f672d45b14fc949125065391192a84bf	60acb3ba6e98128eed60380a21617518616b7068
docs_msmt_singleshell	de7d8051e335785b3fc9101da812a75062df13e3	85410a1634c4ff341082e4318a3d9a8f8961dc7f
dwidenoise_bdc_svd	0cdbc6d2b6f1a29152d488b032dbb20b7f237a1e	eb34f3c57dd460d2b3bd86b9653066be15e916c6
dwidenoise_report_extent	50d19f133aca5fbba48eaceb6a1d6d0af6f13012	0afd48f32d74bcb4ca59ae00435bfa21e21213d8
dwifslpreproc_save_bad_slspec	c744d29fd70f06ceee4e3839ce6068e1c362c9a2	0febc5f288ef62a8664ed86a17e5f640aad25697
external_project_changes	c988a4d5fa235e15e70c298af4d60ced76b85d2a	62bd3411c94413ff5e6e377470238de4a88353e2
fix_cli_bool_operators	e412ed4546caa742ed68fa5cf5c81591d2615784	0d18a2a129dd5d10a350c1e6e73eaab436f9ff44
fix_cpp20	9b2c4ddefc2674d62c9b76de3cfc544283141acf	46ea98898f9038d2fc8829c469361a2ab07ce71f
fix_dicom_sorting_philips	8796b6cd9c6dd9fad7d324d9fe7856a9fef0143b	9c94f373515b97e88a77ee6037bb2da35280d83e
fix_doxygen	04e5107c8f021846763be7a021a5832680bb5236	70e8134ba5351d7ef545522adcd2f8e127eb73cb
fix_png_handling	af8ee54cdae8329cb0ceab23195bcea9eb2ed87c	483fb4faddb86bbcd6c6b78eeb026d946c3fa68a
fix_releases	3eb60b9f4c78c7e94c7a3cfc02742704299b3704	467ce47a95a73bab99e7c4d2c0d7f9f93c44ba71
fix_save_method	2ab0bcad15676547a03c4856170e98b7fb2ecb94	80aeffd6ec53300776a5969094cd992faa42d1a9
fix_unsupported_characters_in_fields_for_matlab	3e1eae5440892734baccc3c989ef87052ad495e5	d478e3dd63b933f28f507328d1fefcee10ba2c78
fix_unused_variables	9b44bedb5ce254886ae992e5f7cfe1e824bca436	d810c1ffe0f8aee13549ad40a7c61f1442a7e407
fix_version_external_projects	1c011a4ec0a101c2c3f74027003bb624578da985	53b38ec38e79180f82e36fca9e525eafdfc5ea79
fix_windows_release	49dfeb8bb6db2e79049e8a9cf0c28234908b4b2e	7cbfa453913b28b4371dc9f85110d9b3abb377ce
fixel_output_enable_force	aebab81eb561fb8f407e9867c0d6429cbac5040b	28f14fc91c2647e5e7a1f1bcdd57754ef720ae81
fixelfilter_cfe	7a1e8c7e25ef034f7e65683a64ebe8235d8bb2a4	ff039a5d542471a7da67e28a66e4ccefb5cf7035
fixelfilter_cfe_mask	aef4d5314040f6ef9e3baf2353668f97536dd365	74294d5669d49a9198aad2b76e3af7a7a15cfce8
glm_design_rank_deficiency	d56c8530a84e9cd995d5effaf3917b19517c5a97	75d2441881a005a180eb9a8beb0a1453de5694be
google_test	e8c2669a8a59a912bdb6632ec495b8aa08704e1b	2916ca46df1a4ad90c9317039d703dc3246841f8
handle_siemens_mosaic_even_if_csa_information_missing	83a4dd50669e42efbb4ba9881fe3dff3fbf06c61	a3ab965481c5234afe1a547d7d7b0e5b47210f44
increase_bzerothreshold	f4e46699880ea29509de6763f801585c30c00792	b80b7ad008dd5fa9735b6499f9f497b877ac1cab
inference_new_features_speedtest	a15e184e75e75064b028dcd0842ca4cf766b9f28	cc70f0f228501c3b0132fa02b606b7af76766f18
iwyu_experimental	b3a2050d7a0f7e49ad41e827f39865f03c4f4292	0feaa46b03f524a017a7bf95efc666dac221a2f7
latest_gcc	a0a67f4cade42ff7f54d7fdb67de8fbea8884ae6	c153321a165f80f620acf6b21ff8dc18d031d4b1
maskclean_tweak	cf1399149457895fc16b4a9f6497f5fb40ee6d58	80c3fe949f869e2f22c790c9ab040d1e86f6fc50
maskdistance	24e03d788f2c8d4f93a08d1ba2284d54f845f927	9ee350caa762048549a2d6a316f750ceaa081e94
merge_shard	9b68eafcf35b34a169810544e1c14fd6a31545d9	2172535be6c543bb9ff581416be84505140aec4b
mesh2image_changes_to_check	015a82af6b2f0c00fb453ca785c42947724153ff	e15feab60d15881b5f412ad5e10ab5741bc37afe
mesh_act	9dc5ad25f4c50583c03e558f3673113bd7bdcce8	b11d4fef4da3546ac5a6ee3b5e44b9d3ba031d5c
meshalign	cdc11cc9f68227d04f1e92dc8e2fd32ffb53b390	9c8ada317220d09e4bcd44bc370c411d077c5af8
more_verbose_file_check_error_messages	a374d6125d9f5d9b113407f4d58d3e104d12e529	88d5b014bc2ac8b23841ef43c89221c2a340e28e
mrdump_enhancements	1fd4ac0e4df999ffa92b74e17601187d95b58046	58e94de2b21c8057c89b1a6bda0432a259234fe2
mrfilter	4c9c4d9dc6acf475bf29d83860127bf9287d2c9f	baddb65b9fba3ffeeb2722670e4c24debca0882a
mrreg	cb781d361168cc38f4cf32dd78cf95076aef5be3	8d7e3bae6273a57d7c384a0e0757d4ac9370a7aa
mrreg_lite	3cbc15c7f78a4f2b079389d493d556f10b3c0f1a	5b3ad032c9d731e4645640b795937b1c62dcfb96
mrstats_iqr	d6e60b89ec709547bd4168d7d5425db9a2ccec37	d47dab05220ed9eb2e6c425e80c02ba9709b236f
mrview_add_two_new_command_line_option	2a7fe8d7fcbaf63e44bc044f332924f80aa0978a	1d4af2101d22d128cda06d8b2aca098cf8cb7810
mrview_annotation_tool	732524abd75006e5e0033c64ab6afee672020864	b4be5373ddc0388e6a169f29b56e416b4437695d
mrview_custom_colourmap	cf2042d997547fc5144be301a10e5866ef296b0d	f2eeebb3653df95da14019f712644f4fc34323a9
mrview_igtlink	06a05d5f5ec424584ac9ace8420fa7cbf4c04c5f	7430a44af0d528efa8c78d5fdb4e56f66a20162f
mrview_odf_colour_by_other	aab693a066abe572311f04b4964092af48773df7	8ae7556d324a0296a3a71489251f7a6b4d9848dc
mrview_rgbvalues	3ffadf452aab796ef809b74e8d57f396a1dd8e93	26ae247aafadebb3de1de07add99cb168a4308f9
mrview_spherical_rois	e2348865d72c1a8831e11944afbfb6e54474b7f4	88be6599c5de99c57f5e37a5f8eb98a5e0cf851e
mrview_sync_test	856015de2b9222d8432e0fad6353518007ad4844	0dc800a22d19d1151917761a5e0746b9ec344a8e
multithreading_class_inheritance	25ece343c0afe1044a77402faa10fb6bff315cc5	88ecf4ce00d2847882f81804aa2759ac7407ac38
new_testing_structure	d455cdfa51276b6b3bafcc5bf5eff44054c495e6	ba9f72ffdeec823ddaaa13dd3c53a05ecd2dc729
paper_demos	383d0a2a32193dbf777f70d01b4efade440c20b6	629f36953dc6e0547975fc7c9501918fa97f523d
patent_docs	8b0f39c9b7f2c86863b9e3af79dc579193e482a2	f3d74fb544a05feb9d1010279beae45c7ed0c30b
philips_intensity_scaling	499e9ae91ed08b6a89861455d9cab313542490ee	bfa7c82a63be3afcf2604b844e8161afa2a8ef07
porcupine	fd32fc92b2a7ddc12cf3ece754b15caabe29e8d8	bff2685309964cc0b2f83609cbcafcfa08ecea7b
pylint_2.11	23579303db43b5d6792d81a901bb1d571cd4a1b7	27bda772cd57bafa7cd5010f52e4fb97ab82cd2b
reduce_lib_deps	415fad28af37f64f7505eb9f821a225d181fc48d	d9d8e0ced6837927e4fd3e311f4ffac40be7b3eb
registration_CC	5ee709727f842435357cf2af13961386f13e17c2	d767fb7662694f8d7e701fab804f8856761dcae0
registration_multi_contrast	cc1930dd8c04ced0b97d40d1adc1bd4968baa8e5	8d9ba76bcecb85d072f9c1ef4112336c9a5bf409
revert-2113-increase_image_size_limit	16a60014f2e2987ee6379de32d328457df49ac92	077031f714aeed072468a42bfc8146cb26ffe3cf
rician_bias_correction	1b42da0803c0e9042ce413164689d6c9c371423f	f4d60537dc95c86bb0d2fd01959242403d3a86c6
run_tests_check_location	1dbac08135f0ea96b3a3ecaa9a0467ca8d10a31e	8515affcd6827bc7a12a8168371fc9b6797ffc56
shview_save_as_ply	402fd7ee0105afa979368ce7e47e3fcde7dc0a07	ede3bfb022964ab99688d9cdef51c556122eadd8
sift2_modulated_connectivity	df2a0e10e39dca873a8c07f4badf0d5338be59e1	040fff939e1b4b4569665893f3253c42fd0b3793
signal_handlers_disable_envvar	5585cfd7ab1504870f2b45cc80c64a8457d466ea	1c975de35025f03c5cdd0a8935a608de1cbcabf7
slice_timing_priority	be9db44be29b6a5c8e7e6ab479b6b2228a87c3f5	3301d59e1cee098e20acafe9eb46dfec9e385aa6
stdfilesystem	3e6586f98722776a534daf327ddf1d0548c4bb06	3ff26d671ed13ac235a931d33f2f7e277aba8601
stdfs	e1b55b8284e24c3544129556e10719d76ec28702	c0a2c580d5be2792dc3e178724eeb62bb456d1bd
string_formattig	50587ca9eacc4f00b9ce3403312a8e093a276b2f	d52c0aa8e0625c3f0bd72278b58a4f411233c4be
tckgen_ballsticks	eb40a33c95a94d15295d299e580b196fb7c94a85	6ad6c7621f971d48b90b387d9a3259d891ec381b
tckgen_iFOD1_fix_max_angle_at_seed	1162afe1d628da1ba1a14ca34359e6fe0cabef97	5237d466c411f2c2280815a7d3efe6488344debc
tckgen_output_stats	0c975a52bad11979e7939c3979e31fa07e26a1fc	2a33249ee430c983943915ba3e9a32f7402cc04d
tckgen_ptt	d7c5f28552639e50e125c9b2ca65dcba9cb71a30	e4a16aeebc2b3cd76d0b265f0a1d98f0c371f840
tckgen_sgm_truncation	dc64ff3d1d6ac241c021a6e4641105a89a4f9ed5	df8c33a5ccfd9062d1859eee0f0219bd7dcc6a46
tckmap_vectorfield	c4d7360df5929bf983aa0bbb21b1f1581c11a37d	cf71a8191f0fc3bd787a0de7786321999afa954f
tensor2metric_check_input	515c29d38d85795d6817ff43be4bfb0b008c59cc	4c60143b1df8ef6010265113da6c1de3eacfcbf2
test_fftw	b02de0951fbf33856f8af567c28eecded9c5396a	4cf0d20dfeb8d9c66a59aca7f3b736c610d78227
tmate_macos_workflow	fadf043a8ee7928fbca4b9466face15225c7f38e	6a8efd9877f9ed28cab57a67c2e8f7ea52c9e6a6
tractography_tangent_function	05f0f2f44e7c0c11b28d3f5d31a4b8a9cb3ed51c	096d4cb51a7c0f0d8a5473be69f42ff5ca978898
transformcalc_fix	f80219edb9a3a15244ed75923201d387aae75616	91ac6ac80b78a682b4742b59877923581b2539ba
ukb	64362f6058a5789533d932908b61dde2026123a3	eeab681d3e0cb004cf1d1d31579d3892197ef5b6
update_R_module	f33478c4e0d3653611f615b44bc8bed7335316ec	0416cf2783f71dae2dfbb43a12c9860432aecf20
vendorscheme	b774ebfa60efaa8fb4ff663942ffc1fd2e1f24b8	8e982b20877fd5c18c00f5bcd4ce4e3c1d3498e4
weekly_releases	c86558e30532804bf5fae1090a255bb42c9f1b14	2dfa76846cf30d8117d8d0b04aa3494471761e90**

I manually checked and then force-pushed each of these in turn.
Items left unchecked require manual review.
"Reverted": Has been force-pushed back to what the process above shows as being the tip prior to my erroneous force-pushes.
"Fixed": GitHub PR shows a sensible set of commits given the intended purpose.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions