所以我对一个文件进行了更改,将其推送到我们的主仓库,在那里看到它。大卫从那个回购中撤出并做了 - 好吧,有些事 - 并且看不到我的变化。由于大卫是典型的微软受害者,我让他把他所拥有的东西推回回购,我会在那里看看。
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提交更改了。我该如何追踪发生的事情?
答案 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
只有这样X
和Y
才会出现。我猜Git默认情况下没有显示Y
,因为它对提交树的最终状态进行了相同的更改,因为它是从X
中挑选出来的。
答案 2 :(得分:1)
看起来他可能有合并冲突并通过接受他的版本(可能是一个不存在的文件)而不是你的版本来解决它。您可以将文件带回来。见how to resurrect a file or folder