Git变化丢失了 - 为什么?

Nat*_*ong 11 git github

我们的开发团队正在使用git,我们最近至少两次丢失了对文件的更改.我们正在使用私人Github回购.

在当前的情况下,我们可以返回Github上的日志并查看我对文件所做的一些更新.后来,另一个团队成员更改了文件的不同部分,似乎已经破坏了我的更改.我还在当地买它们.

还有其他人经历过这个吗?任何原因或解决方案?

我不认为有任何人做任何垫底或任何幻想-只需推拉.

小智 7

我想补充几句话.我最近注意到在git中非常奇怪的行为.因此,我的团队遇到了很大的问题.我不知道它是怎么发生的,但似乎我的回购中的历史是不一致的.

小插图:

提交XXXXXXXX:

行"bar"已添加到文件foo.

...工作正在进行中...

之后很多提交(让我们说大约100):

此文件中不再存在"bar"行!

调查:

我检查了档案的历史:

git log foo和gitk foo

我甚至将每次提交的连续blob与外部工具(gvimdiff)进行了比较.有趣的是我发现了两个提交(让我们称之为YYY和ZZZ).来自提交YYY的文件foo的blob包含"bar",但来自ZZZ的blob没有.
当我用gitk(和gitweb)检查那些提交的commitdiff时,我注意到在ZZZ中没有删除行"bar"的操作.是否可能存在介于两者之间并在空气中溶解的情况?
或者也许提交ZZZ只是删除了我的线和嵌入在git(或gitk)中的diff工具坏了?

2.我搜索了可以使用"git log -S"删除此行的提交,例如:

git log -S'bar' - foo

事实证明,这条线从未删除过.事实上它增加了两次.第一次将其引入项目时,第二次将其作为紧急修复程序再次添加.

我真的很喜欢使用git甚至说服几个朋友使用它,但如果这种魔法继续发生,我将不得不开始寻找替代方案.

  • 这是我最近遇到的一个很好的例子,但这不是答案。如果这是一个问题,那就好了。 (3认同)

小智 5

类似的事情也发生在我的团队中。

经验教训:当你拉的时候,你应该小心合并冲突。如果 pull 出现冲突,git 不会将合并的更改提交到您的本地存储库中,您必须在解决冲突后执行此操作。否则,在推送时,您将使用本地副本覆盖远程仓库,其中不包含您在拉取之前在远程所做的更改。这解释了您可能会看到未提交的一些“奇怪文件”,但您确定这不是您的更改 - 这表明“拉”时发生合并冲突,并且 - 再次 -您必须在解决冲突后将这些更改提交到本地,然后推到远程

如果在合并时没有冲突,则不会出现丢失更改的问题。因为 git 获取、合并并提交到您的本地副本,然后“推送”将这些合并的更改传播到远程。


jer*_*jer 2

虽然我不能谈论你的具体问题,但我可以说的是,昨天我经历了非常相似的事情。我让一位设计师在代码中修改了一些 URL,并更新了我正在完成的 iPhone 应用程序中的一些图像,但没有告诉我这件事。我推送了我所做的更改,其中也触及了其中一些文件(但是不同的位置),并且它被拒绝为非本地快进。所以我拉扯,遇到冲突,解决它们,然后推动。问题解决了。不过,我确实在此过程中撤消了他的代码更改。

由于与我昨天在 github 私人存储库上遇到的问题非常相似,我最近在我的工作流程中添加了一件事;是存储我即将提交的更改,从存储库中提取并应用我的存储。如果存在冲突,解决这些冲突,然后推动。