愚蠢的 GIT GUI 问题

Stupid GIT GUI questions

我现在觉得自己很傻。我使用过许多版本控制应用程序,但 git 没那么多。我已经阅读了很多帖子,但比以往任何时候都更加困惑,因为许多(显然是正确的)答案使用命令提示符和我理解的假设 GIT 比我理解的要好得多。

我在 windows 从事一个多人签入代码的项目。我们使用 Git Gui,但我也安装了 Git Bash。到目前为止,我所需要做的就是提交、推送、拉取和合并,生活很美好。

我希望能够通过提交会话回滚我的代码提交会话,直到我可以返回到一个版本,该版本是经过测试且完整的模块正在运行。我不知道密码是什么时候被破解的。

我不想修改主存储库,而是我的本地版本。找到更改后,我想复制文件,恢复到当前版本,然后将复制文件的差异应用到当前版本并签入。

我尝试了多种选择,但 none 似乎允许我这样做。而且我也不想搞砸主存储库。

我不得不相信这很简单,只是不确定如何去做。是的,我可以花几天时间学习 Git 的复杂性,但现在,我必须让代码正常工作,不能破坏主存储库,不能浪费几天时间弄清楚 git./git gui/etc. (这确实是正确的方法 - 但人们现在需要这段代码(再次)工作。

谢谢!

Crashmstr 的评论是最好的方法: http://git-scm.com/docs/git-bisect

基本上你开始平分

$ git bisect start

然后声明你的"bad version"

$ git bisect bad                 # Current version is bad

然后声明你最后一个已知的 "good version"

$ git bisect good v2.6.13-rc2    # v2.6.13-rc2 was the last version
                                 # tested that was good

然后你可以通过二分法测试每个版本,直到找到中断提交。

如果您不熟悉二分法,基本上它是将 space 分成两半,直到您获得所需的值,例如

[               bad commit in here                       ]
[[        good            ][          bad               ]]
[[        good            ][[   bad      ][    good     ]]

直到你得到你想要的实际提交。

更简单的方法是

git log

然后一次检查每个提交,直到找到损坏的那个。

例如

$ git log
commit 63cd158599d77ac73abcefd087a2f7bdfdb171cb
Author: Jordan 
Date:   Fri May 1 02:12:46 2015 -0700

    Start look at query builder

commit d0ca01f7c7c2e7a2153fbe3c980f79022f096aad
Author: Jordan
Date:   Thu Apr 30 23:48:38 2015 -0700

    TODO: add cloudsearch filtering for inactive

然后你可以检出一个旧的提交而不用改变任何东西

git checkout 63cd15

直到你找到坏掉的那个。