我们的三个开发人员正在使用一个远程分支(具有相同名称的本地跟踪分支),并且在两次提交之间以某种方式〜还原了40个文件 - 但是没有这些文件被恢复的历史记录。我们根本无法理解这是怎么发生的。
以下是发生的事情的简化示例:
开发人员Joe将“System.out.println(”Hello“)添加到HelloWorld.java,在本地提交并将其更改推送到此远程分支。
远程分支上发生了几次其他提交(未触及HelloWorld.java)
开发人员Jane将“System.out.println(”World“)添加到HelloWorld.java,在本地提交并将其更改推送到此远程分支
远程分支上发生了几次其他提交(未触及HelloWorld.java)
如果您查看此文件的完整日志,您将看到:
所以你希望这个文件的当前状态是:
System.out.println("Hello")
System.out.println("World")
当然,你可以在提交之间进行差异并看到:
System.out.println("Hello")
+ System.out.println("World")
没有进一步的变化。但实际上,目前的状态是:
System.out.println("Hello")
我们的情况更复杂。除了修改之外,我们还添加了文件,重命名文件等。所有这些更改都被还原:添加的文件被删除,重命名的文件被重命名为原始名称等。但是,没有任何开发人员推送任何恢复这些更改的提交文件。
我们也只使用基本的pull + push命令,因为我们的更改都是相互隔离的,所有automerged完全没问题。我们没有像rebase,cherry pick等那样做任何想法。
Github有一个功能“查看这两个提交之间的比较”,这实际上是恢复这些更改的唯一证据。
我正在寻找可以运行的任何git命令,这将有助于进一步调试。我们真的不确定如何继续。
谢谢
答案 0 :(得分:0)
确保更改发生在同一分支上。提交差异可以显示差异,但它们可能位于不同的分支上。
在Joe的提交和最新提交之间使用git bisect
并检查HelloWorld.java以查看每个二等分点是否存在该行。
答案 1 :(得分:0)
我们挑选了三个丢失的提交,然后将它们重新应用到当前的头部。我们仍无法解释这是怎么发生的。有点可怕。但它不再是一个问题。