出于某种原因,我有git repo,其代码提交被重写为之前的状态。 像这样:
我需要以某种方式找到这样的提交。它可以不是顺序提交,而是将代码“重写”到其先前状态的提交。
我该怎么做?
答案 0 :(得分:0)
您可以使用 git bisect
。
<强> GIT-平分强>
通过二进制搜索查找引入错误的更改
gitbisect
是一个搜索和资助代码更改的工具。使用起来非常简单,而且非常强大。
Bisect只需查看历史记录日志并执行二分查找。
的更多信息二进制搜索或半间隔搜索算法在按键值排序的数组中查找指定输入值(搜索&#34;键&#34;)的位置。
// Start the bisect operation
git bisect start
// mark the current as bad or good depends on the content of your given
// file. In your case since you want to find the commit who modified your
// code to "Hello world!" lets assume the current file is the bad state
git bisect bad
// Assume 100 commits ago it was before your change (or give a sha if you
// know where its was ok last time
git bisect good HEAD~100
// Now git will split the history and start looping over it.
... do your tests and decide if its good or bad (check the file content)
bisect
?添加允许您自动搜索的run
标记
运行获取一个正在每次结账提交时执行的脚本。
git bisect run my_script arguments
请注意,如果当前源代码良好,并以1到127(含)之间的代码退出,脚本(上例中的my_script)应该以代码0退出,除非125,如果是当前源代码代码很糟糕。
任何其他退出代码都会中止bisect进程。
应该注意的是,一个程序终止于&#34;退出(-1)&#34;离开$? = 255,(参见exit(3)手册页),因为该值被&#34;&amp; 0377&#34;
当无法测试当前源代码时,应使用特殊退出代码125. 如果脚本以此代码退出,则将跳过当前修订