我的git repo中有以下近期历史记录。
* 7661a06 (HEAD, origin/devConsolidate, devConsolidate) Fix seg fault; OCBA intermediary compares by value() now also
| * 0bbe038 (origin/master, master) Flawed work no seedShift
|/
* 62fe9db Turn on OCBA_DEBUG; nan/inf values in OCBA prior to crash
* 71298c8 Turn on OCBA (non-intermediary); seg fault occurs
* 3693904 No OpenMP, no OCBA; no memory leaks on valgrind
* 9d5686c Disable OpenMP threads
* 80bbc3b Debug (-O0) build now throws exception also
* e148013 Post convert simulation4_NEJMdisutilities [] to at()
* 66cfba9 Post convert OCBA [] to at()
* 32db3be Pre convert OCBA [] to at()
* 4a9f25b Prep for debugging
* 907e88b Found error (vector out of bounds); need to fix from here
* ca6c639 Implement elapsed, iteration, and max time in OCBA
* db68c15 Fix SEG FAULT; OCBA now working (with intermediary)
* f1c6f05 GA now uses OCBA; GA/OCBA params from config file; produces SEG FAULT
| * 3b16dcf (origin/genCRNgraph, genCRNgraph) Generate QALYs test and control independent-sampling
|/
* 001eff2 Merge branch 'OCBAdev'
f1c6f05
后代({1}}之后的所有提交都是为了调试问题。事后看来,我应该创建一个单独的分支来进行调试,但我在master
中完成了所有操作。现在,在提交7661a06
中,我修复了错误。
我想移动(倒回?)master
分支(或指针),使其位于提交f1c6f05
。执行此操作后,我可以从提交7661a06
和62fe9db
之间的差异生成补丁,并将其应用于f1c6f05
。因此,我的git日志的一部分应如下所示:
* 7661a06 (origin/devConsolidate, devConsolidate) Fix seg fault; OCBA intermediary compares by value() now also
| * 0bbe038 Flawed work no seedShift
|/
* 62fe9db Turn on OCBA_DEBUG; nan/inf values in OCBA prior to crash
.
.
.
* db68c15 Fix SEG FAULT; OCBA now working (with intermediary)
| * <HASH> (HEAD, origin/master, master) Fix problem and rewind master
|/
* f1c6f05 GA now uses OCBA; GA/OCBA params from config file; produces SEG FAULT
| * 3b16dcf (origin/genCRNgraph, genCRNgraph) Generate QALYs test and control independent-sampling
|/
* 001eff2 Merge branch 'OCBAdev'
我将使用哪些命令来实现所有这些目标?具体来说,我将如何:(1)移动主控,(2)生成补丁,(3)应用补丁?
答案 0 :(得分:7)
由于您已将master
推送至origin
(origin/master
位于0bbe038
),因此对于已从{{1}获取或取出的任何人都会造成问题因为你的推动。因此,您可能需要与其他人进行沟通和协调,以便他们根据需要进行调整。
考虑到这一点,不过,这是你要怎么做的:
1)将主人移回origin
:
f1c6f05
2 + 3)假设git checkout master
git reset --hard f1c6f05
git push -f origin master
是您修复的唯一相关提交,而不是生成和应用补丁,您可以简单地执行此操作:
7661a06
你可能会遇到一些小的冲突,具体取决于所有“调试”提交实际上做了什么,以及它们是否触及了git checkout -b bug-fix-branch master
git cherry-pick 7661a06
提交更改的附近任何内容,但这些应该很容易修复。完成后,执行此操作将该更改合并回master:
7661a06
此时,其他人都需要获取/拉取新的git checkout master
git merge bug-fix-branch
git branch -d bug-fix-branch # optional, maybe not desired
git push origin master
分支,并重新启动他们待处理的任何工作。
如果对他人的干扰是不可接受的,您可以选择这样做:
master
这将在master上创建新的提交,撤消所有这些“调试”提交的效果,但实际上不会从历史记录中删除它们。因此,工作目录的结束内容应该看起来一样,但历史记录看起来会有很大不同。在这种情况下,不应该对其他人造成干扰,因此根据您的环境/工作流程,这可能是更好的选择,但它确实为后代记录了所犯的错误,如果您需要,可能会引起混乱/问题。使用git checkout master
git revert f1c6f05..62fe9db
git push master
来追踪新的错误或其他内容......
答案 1 :(得分:0)
git checkout master
git reset --hard f1c6f05
git rebase --onto master 62fe9db devConsolidate
如果您对devConsolidate
之后的历史感到满意:
git checkout master
git merge devConsolidate