提交如何从一个文件的日志中消失?

时间:2011-09-24 19:22:26

标签: git

所以我对一个文件进行了更改,将其推送到我们的主仓库,在那里看到它。大卫从那个回购中撤出并做了 - 好吧,有些事 - 并且看不到我的变化。由于大卫是典型的微软受害者,我让他把他所拥有的东西推回回购,我会在那里看看。

git log --name-only生成

commit 194b7f5dbb59d29ace340a376f10906752978db5
Merge: 484df79 afc2dec
Author: David Good <david@company.com>
Date:   Sat Sep 24 11:47:14 2011 -0700

[ David's merge ]

commit afc2dec4a828de05350c39526eeecf9d3a15e465
Author: Michael <info@company.com>
Date:   Sat Sep 24 10:58:54 2011 -0700

[ my changes ]

backend/theimportantfile.js

commit e4e2f9ce9df3adf5ed0547ed16521eb742cc2ac1
Author: Michael <info@company.com>
Date:   Sat Sep 24 10:47:09 2011 -0700

[ some other thing ]

git log backend/theimportantfile.js生成

commit eb470fe1792220779b14e90337f74fb216fc9f7f
Author: David Good <david@company.com>
Date:   Mon Sep 12 17:20:25 2011 -0700

[ comment ]

commit 63ddd2be020092a4bf65d1eac106ece5fd7fbbd3
Author: David Good <david@company.com>
Date:   Fri Sep 9 16:23:53 2011 -0700

[ comment ]

所以根据git,backend/theimportantfile.js在几周内没有被触及,但是两小时前它也被afc2dec提交更改了。我该如何追踪发生的事情?

3 个答案:

答案 0 :(得分:2)

看来大卫的合并就是你所做的。我说这是因为合并似乎已经“恢复”了你的改变。

#this command will show you if anything 'strange' happened during the merge"

git show 194b7f

如果该命令没有给出有趣的输出,那么大卫可能会与“我们的”策略合并,或者将聪明的'cp my files放到临时位置; git merge;覆盖冲突的文件; git commit' workflow。

无论这种状态如何到达,合并都需要被丢弃和重做,因为它显然是错误的。您也可以考虑更改您的工作流程,以便David不再需要合并,而是提交非正式(或正式)“拉取请求”,并且您负责合并。

答案 1 :(得分:2)

我不确定这是否是您问题的本质,但默认情况下,git log有时会过滤掉它认为不“有用”或“有趣”的提交,以便了解最终结果提交树的状态。来自the git log docs

  

有时您只对历史记录的某些部分感兴趣,例如修改特定&lt;路径&gt;的提交。但是历史简化有两部分,一部分是选择提交,另一部分是如何做,因为有各种简化历史的策略。

     

以下选项会影响简化的执行方式:

     

<强> Default mode
  将历史简化为最简单的历史,解释树的最终状态。最简单的,因为如果最终结果相同(即合并具有相同内容的分支),它会修剪一些侧枝。

您可以传入文件中的--full-history标记,而不是使用默认模式,看看“丢失”提交是否以这种方式显示:

git log --full-history -- backend/theimportantfile.js

来自git log文档:

  

<强> --full-history
  与默认模式相同,但不会删除某些历史记录。

修改

我知道这有时会有效,因为我遇到的情况是X中有master提交,其中包含对文件theFile的更改。然后由同事将X提交到anotherBranch,所以让我们调用新提交Y。然后anotherBranch合并到master

当我们做的时候

git log -- theFile

我们不会在提交列表中看到Y,只是X,但是当我们使用时

git log --full-history -- theFile

只有这样XY才会出现。我猜Git默认情况下没有显示Y,因为它对提交树的最终状态进行了相同的更改,因为它是从X中挑选出来的。

答案 2 :(得分:1)

看起来他可能有合并冲突并通过接受他的版本(可能是一个不存在的文件)而不是你的版本来解决它。您可以将文件带回来。见how to resurrect a file or folder