Git远程跟踪分支与本地分支不同,具有相同的提交和不同的SHA
这是我的git回购的当前状态(如GitX所示) “34e…”和“c3d…”提交(已实现全局…”注释的提交)是相同的。我用git diff确认了这一点,它们甚至有相同的提交时间!唯一的区别是他们的SHA 我不知道我的回购协议是如何进入这种状态的。虽然我不是git专业人士,但我已经使用它一段时间了,对所有的基础知识都非常熟悉。这是突然发生的,我没有尝试任何我以前没有使用过的git特性或工作流,所以我相当困惑 没有其他人向远程提交过任何东西,因此我可以在那里更改历史,但是一个不涉及这一点的解决方案会更好 我可以对master和origin/master进行正常的合并或重定基址,但我对此感到不舒服,因为历史记录将显示两个相同的提交 是否可以签出origin/master,然后将从'a4a…'开始的所有提交重新定基到origin/master,然后将master切换到这个新头?(基本上是让‘c3d…’自行挂起,这与被骗者无关) 1) 那么,解决这个问题的首选方法是什么?Git远程跟踪分支与本地分支不同,具有相同的提交和不同的SHA,git,Git,这是我的git回购的当前状态(如GitX所示) “34e…”和“c3d…”提交(已实现全局…”注释的提交)是相同的。我用git diff确认了这一点,它们甚至有相同的提交时间!唯一的区别是他们的SHA 我不知道我的回购协议是如何进入这种状态的。虽然我不是git专业人士,但我已经使用它一段时间了,对所有的基础知识都非常熟悉。这是突然发生的,我没有尝试任何我以前没有使用过的git特性或工作流,所以我相当困惑 没有其他人向远程提交过任何东西,因此我可以在那里更改历史,但是一个不涉及这一点的解决方案会
2) 你知道这是怎么发生的吗?以前有人见过吗 编辑:
git diff c3db784817 34e1ab666a未输出任何内容 git reflog master: 折弯机:mt-d-styles泰森$git reflog主机
9579294 master@{0}:commit:将仅调试控制台打印添加到测试图像视图
1155228 master@{1}:commit:添加了自定义单元格可以导入的新标记接口
a4ab788 master@{2}:commit:添加了一个新的StyledRootElement,可自动应用程序
c3db784 master@{3}:commit:实现了一种全局技术,用于设置所有exist的样式
34e1ab6 master@{4}:commit:实现了一种全局技术,用于设置所有存在的样式
8519fb1 master@{5}:commit:扩展了remove方法,使调用方能够访问
30aeee6 master@{6}:commit:添加了一个新的基于工厂方法的侧扫视图con git reflog origin/master: 折弯机:mt-d-styles泰森$git reflog origin/master
34e1ab6参考/远程/源/主@{0}:按推更新
8519fb1参考/遥控/原点/主控@{1}:按推更新
495e0ef refs/remotes/origin/master@{2}:通过推送更新
c5fec81参考文件/遥控器/原点/主控器@{3}:通过推送更新
cba1e0f refs/remotes/origin/master@{4}:通过推送更新
9EE1FB refs/remotes/origin/master@{5}:按推更新
68ee429参考文件/遥控器/原点/主控器{6}:按推更新
0e2d199参考/遥控/原点/主控@{7}:按推更新
8a4de84 refs/remotes/origin/master@{8}:通过推送更新 编辑2:
git log--format=raw--decoration--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
|
*提交c3db7848171f396c5a595a35dd6b609c119f9e84
|树998e9749546d05178798c8a462d3eff02a111f4c
|母公司8519fb17e77b8ae865e071772ae652316df8822a
|作者泰森1364529327+0800
|提交人泰森1364539365+0800
|
|实现了一种全局技术,用于设置所有现有MT.D元素backg的样式
|
|*提交34e1ab666a81dde7582ee9e31bfa961420d38f55(源/主)
|/树38f9e0c3d936c702fdcd18d215a2f0a88280893b
|母公司8519fb17e77b8ae865e071772ae652316df8822a
|作者泰森1364529327+0800
|提交人泰森1364529327+0800
|
|为所有现有MT.D元素bac的样式设计实施了一项全局技术
|
原因:
你可能改写了历史。如果提交的内容完全相同,则SHA将自动相同。您在UI中看到的不是提交日期,而是作者日期。运行git log--format=raw--decoration--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)对其进行了修改。(而且你可能住在美国;)git diff c3d784 34e1ab显示了什么?还有,git reflog master
git reflog origin/master
请输出。@kan查看相关编辑。这看起来确实像是你修改了提交。但是命令行客户机不支持。@是的,我经常在GitX中使用amend。仍然没有解释为什么git diff
显示两者之间没有差异。出于好奇,是什么让reflog输出看起来像是我修改的呢?你说得对!请参阅上面我的第二次编辑,带有git日志
输出-不同的“提交者”时间。我经常使用修正功能。但这是否意味着我做了一个提交,推送它,然后修改,从而只修改本地提交?是的,您将始终只修改本地提交。任何你都不应该重写(修改)出版的历史。修正案将始终重写,ev