我的同事一段时间做了改变 - 介绍了一个新功能 - 并且(成功)致力于git。但是现在,这个功能已经丢失了。
使用git log --reverse
我设法找到该函数仍在代码中的最后一次提交(48d60a03)。下一个(e6f28bfd)提交(有问题的函数消失了)是一个合并(14158e1),但git show
'任何这些都没有显示删除丢失的代码。
换句话说,代码在合并期间已消失,而未被合并的任何分支中删除。
搜索StackOverflow几个小时让我得出结论,在解决冲突期间一定是手动错误(我做对了吗?)。就这样吧,那就发生了。问题是 - 如何获取该代码 - 除了使用缺少的代码进行新的提交之外还有其他方法吗?
相关问题;我可以以某种方式找出,如果还有其他事情像这样再见吗?我有点担心;)
答案 0 :(得分:8)
在某些时候发生的变化很难完全丧失。尝试运行'git reflog',看看你是否能发现丢失的提交。然后,您可以通过运行“git merge [丢失提交的SHA1]”将其合并到当前分支中。
答案 1 :(得分:8)
因为您的历史记录已被推送,所以最好的方法是进行新的提交。否则,您将面临丢失其他代码并弄乱每个人的回购的风险。
由于您知道最后一次提交函数的位置,因此您可以git checkout 48d60a03 -- <name of file with function>
。然后,您可以使用该函数提交旧/新文件。
由于文件中可能存在其他更改,您可能希望git reset
取消暂存文件并使用git add -p
仅添加您要查找的函数的更改。
为了防止这种情况发生,我的建议是获得一个完整的测试套件,您可以在完成合并后运行。这有助于最大限度地减少代码丢失的可能性,因为测试将失败。
答案 2 :(得分:5)
显然(请参阅this question),git show
不是用于清楚了解合并提交所引入的更改的正确工具。
使用git diff
。合并提交有两个父母:
* 8ac6131 (M) Merge branch 'B'
|\
| * 5a53959 (B) two
|
* 7cb5a06 (A) one
使用git diff A M
和git diff B M
查看合并提交与其父级之间的差异。你应该在那里看到你失踪的功能。
答案 3 :(得分:5)
如果您知道代码的可识别部分已丢失,您可以使用git log -G regexToSearchFor -m --patch
-G <regex>
告诉Git&#34;查找差异,其补丁文字包含与<regex>
匹配的添加/删除行&#34; -m
告诉Git包含合并提交--patch
告诉Git显示其发现的差异答案 4 :(得分:4)
相关问题;如果还有其他情况,我可以以某种方式找出答案吗? 像这样再见的东西?我有点担心;)
试试git whatchanged。 例如,
git whatchanged --since="2 weeks ago" -- gitk
显示过去两周内对gitk文件的更改。
答案 5 :(得分:0)
我完全一样。我有一个新分支,该产品是第2版。然后,我想将当前的主版本(产品的版本1)合并到版本2中。在此合并过程中,产品版本1上的许多新代码都丢失了。这非常令人沮丧,因为数十个文件丢失了代码,我必须手动检查它:(
好吧,原来我正在看两个不同的文件夹(都在主文件夹上),却忘了将最新的更改放入其中一个。