这是我的git repo的当前状态(在GitX中可视化)。
'34e ...'和'c3d ...'提交('已实施全球......'评论的)是IDENTICAL。我用git diff证实了这一点,他们甚至有相同的提交时间!唯一的区别是他们的SHA。
我不知道我是如何让我的回购进入这种状态的。虽然我不是git pro,但我已经使用了一段时间了,并且对所有基础知识都非常熟悉。这是突然发生的,我没有尝试过以前没用过的任何git功能或工作流程,所以我很困惑。
没有其他人向遥控器提交任何内容,因此我可以在那里更改历史记录,但不涉及此问题的解决方案会更好。
我可以对master和origin / master进行正常的合并或重组,但我对此感到不舒服,因为历史将显示2个相同的提交。
是否可以签出origin / master,然后将从'a4a ...'开始的所有提交重新命名为origin / master,然后将master切换到这个新的HEAD? (基本上是将'c3d ......'单独挂起,这与它的欺骗无关)
1)那么解决这个问题的首选方法是什么? 2)有任何想法如何发生?其他人以前见过吗?
编辑:
git diff c3db784817 34e1ab666a :什么都没输。
git reflog master :
Bender:mt-d-styles tyson $ git reflog master
9579294 master @ {0}:commit:添加仅调试控制台打印到测试图像视图
1155228 master @ {1}:commit:添加了自定义单元格可以实现的新标记接口 a4ab788 master @ {2}:commit:添加了一个自动应用的新StyledRootElement c3db784 master @ {3}:commit:实现了样式化的全局技术 34e1ab6 master @ {4}:commit:实现了所有存在的样式的全局技术
8519fb1 master @ {5}:commit:扩展remove方法以使调用者能够访问
30aeee6 master @ {6}:commit:添加了一个基于Side Swipe View con的新工厂方法
git reflog origin / master :
Bender:mt-d-styles tyson $ git reflog origin / master
34e1ab6 refs / remotes / origin / master @ {0}:按推送更新 8519fb1 refs / remotes / origin / master @ {1}:按推送更新 495e0ef refs / remotes / origin / master @ {2}:按推送更新 c5fec81 refs / remotes / origin / master @ {3}:按推送更新 cba1e0f refs / remotes / origin / master @ {4}:按推送更新 9ee1ffb refs / remotes / origin / master @ {5}:按推送更新 68ee429 refs / remotes / origin / master @ {6}:按推送更新 0e2d199 refs / remotes / origin / master @ {7}:按推送更新 8a4de84 refs / remotes / origin / master @ {8}:按推送更新
编辑2:
git log --format = raw --decorate --graph --all :
* commit c3db7848171f396c5a595a35dd6b609c119f9e84
| tree 998e9749546d05178798c8a462d3eff02a111f4c
| parent 8519fb17e77b8ae865e071772ae652316df8822a
| author Tyson <tyson> 1364529327 +0800
| committer Tyson <tyson> 1364539365 +0800
|
| Implemented a global technique for styling all existing MT.D element backg
|
| * commit 34e1ab666a81dde7582ee9e31bfa961420d38f55 (origin/master)
|/ tree 38f9e0c3d936c702fdcd18d215a2f0a88280893b
| parent 8519fb17e77b8ae865e071772ae652316df8822a
| author Tyson <tyson> 1364529327 +0800
| committer Tyson <tyson> 1364529327 +0800
|
| Implemented a global technique for styling all existing MT.D element bac
|
答案 0 :(得分:6)
原因:
你可能做了一些历史改写。如果提交完全相同,则SHA将自动相同。您在UI中看到的内容不是提交日期,而是作者日期。运行git log --format=raw --decorate ̵-graph --all
以获取更多详细信息。我猜您会看到本地版本的提交日期是以后的日期。这是由历史重写引起的,通常是修改或重新定位。
解决方案:
如果您知道如何返回,您可以尝试使用rebase - 如果提交确实相同,git 应该实现这一点并且只添加一个提交。如果您不知道如何返回,只需将master
重新定位到origin/master
,切换到c3db784817:
git rebase --onto origin/master c3db784817 master
我如何从reflog中修改你:
c3db784 master@{3}: commit: Implemented a global technique for styling all exist
34e1ab6 master@{4}: commit: Implemented a global technique for styling all exist
创建提交后,您的主分支位于34e1ab6
。然后你推了这个提交。然后你的主分支移动到c3db784
- 一个提交相同的消息,你的git客户端说这个的原因是commit
。由于两者之间没有分支头部运动,这很像修改。命令行客户端会说commit (amend)
。
您的日志告诉我您在unix时间1364529327
(2013-03-28 20:55:27)进行了第一次提交,然后在unix时间进行了修改1364539365
(2013-03 -28 23:42:45) (你可能住在美国;)