首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git在没有合并和冲突的情况下丢失了我的编辑历史。

git在没有合并和冲突的情况下丢失了我的编辑历史。
EN

Stack Overflow用户
提问于 2014-08-28 03:28:25
回答 2查看 53关注 0票数 1

我在8月27日19:43:46 2014 +0800有个承诺,

代码语言:javascript
复制
commit bbdbbb7214de8611a787c92daf93dbc2719600d0
Author: malloc (malloc@slowcast.com)
Date:   Wed Aug 27 19:51:17 2014 +0800


commit a5f8bcbf7fdfa995325a338a02ad8eef611ac9f8
Author: malloc (malloc@slowcast.com)
Date:   Wed Aug 27 19:43:46 2014 +0800

提交的编辑显示已经修改了3个文件。

代码语言:javascript
复制
git d --name-only a5f8bcb^..a5f8bcb

res/layout/layout_login.xml
base/BaseAct.java
ui/login/Login.java
(END)

然后其他人就会做出修改。

代码语言:javascript
复制
commit 833dee16869ceb834cb1b8d8ac38bf3d0f147e66
Author: simon (simon@slowcast.com)
Date:   Wed Aug 27 20:13:42 2014 +0800


commit b391737ac94d5d779c1cb00b05a7c3bccee98915
Author: muham (muham@slowcast.com)
Date:   Wed Aug 27 20:00:35 2014 +0800

在版本b391737中,Login.java是新版本,而在版本833de1中,Login.java的内容是旧版本。(也修改了其他文件)

检查提交833de1,只有一个文件被执行。

代码语言:javascript
复制
git d --name-only 833dee1^..833dee1

res/values/strings.xml
(END)

然后检查Login.java的日志

代码语言:javascript
复制
git log ui/login/Login.java

commit c5a5ae9a48c2f1d44b6cd3654c20834ed49b3991
Author: simon (simon@slowcast.com)
Date:   Thu Aug 21 15:54:39 2014 +0800


commit 7e65405d19a946349ee4ac07176a37098f52867b
Author: shubin (nick@slowcast.com)
Date:   Fri Aug 15 15:22:01 2014 +0800

最近一次提交是在清华8月21日15:54:39 2014 +0800,没有我的编辑日志。

怎么会发生这种事?提交833de1没有我编辑的文件,Login.java的历史记录也丢失了我的编辑。

有什么命令可以让我找到Login.java的整个历史吗?

编辑

=========================================

我们只使用一个分支母版,并且日志不仅在本地,从远程获得相同日志历史的git克隆。添加一些输出:

代码语言:javascript
复制
$ git log --oneline --graph --color=auto --decorate --all ui/login/Login.java
  • b77af0c (头、源/主、源/头、主)恢复登录
  • 9f88669临时修复
  • c5a5ae9添加了一些评论
  • 7e65405配置编辑..。

c5a5ae9在2014年8月21日15:54:39,很多天前,9f88669和b77af0c是在我们发现问题后提交的,git在a5f8bcb丢失了日志。

代码语言:javascript
复制
git log --oneline --graph --color=auto --decorate 833dee16...bbdbbb72
  • 833 de1变更var
  • bbdbbb7修改默认的化身样式
  • a5f8bcb登录页面样式
  • 添加一些字符串
  • ab1e53c添加了一些字符串
  • 9ab6bea编辑rec用户页面样式
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-28 06:58:01

即使进行了编辑,也很难确定,但我认为这里有足够的信息来猜测发生了什么:您完成了提交(因为这是您的唯一分支),但是您可能通过运行git reset --hard (几乎可以肯定是git reset的某个变体)将其从分支中抛出。

实际上,至少有两个提交不在您的分支上:您将显示:

代码语言:javascript
复制
bbdbbb7214de8611a787c92daf93dbc2719600d0
a5f8bcbf7fdfa995325a338a02ad8eef611ac9f8

在顶部,但是您的主要git log输出都没有显示。事实上,该输出中也缺少833dee1...b391737...也是如此。

关于git的好处是提交实际上仍然在您的存储库中。由于有了重飞,默认情况下至少要坚持30天。你所要做的就是复活或复制它们。

如果您想要恢复该提交(以及以前通过git reset丢弃的任何提交),请给提示--大多数提交都有一个名称(分支或标记,任何一个都可以)。假设bbdbbb7...是最提示的,并且您希望为它创建一个分支:

代码语言:javascript
复制
git branch somework bbdbbb7 # you can use the full 40-char SHA1
                            # or an abbreviation, either does thes
                            # same job here

现在,git log --graph --decorate --oneline --all应该在新的分支名称somework下显示这两个提交。(如果bbdbbb7...不是小费最多的提交,而a5f8bcb...不是,则可以将新分支指向那里。查看一下reflogs,git refloggit log -g,以找到任何想要返回的“丢失”提交。)

如果您只是想复制以前的提交,可以使用git cherry-pick进行此操作。这将尝试在命名的提交中重复相同的更改,但将它们应用到当前的工作树中,然后根据结果进行新的提交(并复制此新提交的原始提交消息)。

票数 1
EN

Stack Overflow用户

发布于 2014-08-28 03:47:59

从所提供的信息中很难分辨出到底发生了什么。

您已经列出了几个提交,但是没有做任何事情来显示它们在哪个分支中,或者合并历史是什么。完全有可能,您似乎丢失的提交位于与您当前正在查看的分支不同的分支上。

另一种可能是,最近提交的时间戳可能比丢失的时间戳更早,这一事实误导了您。可以重基提交,在更新的提交的基础上应用旧的提交,所以当您查看历史记录时,首先看到的是旧的提交。

或者另一种可能是,您已经以某种方式放弃了您的提交,让它们在您的本地存储库中分离,而没有将它们推送并与其他历史记录合并。如果您曾经对上游分支执行git reset,则可能发生这种情况。

这是你怎么知道发生了什么事。这样做的最佳方式之一是可视化历史。如果安装了gitk这样的图形工具,您可以这样做,如果没有安装,只需在终端中使用git log --graph即可。

尝试运行以下命令来查看发生了什么。如果你不知道如何解释输出,编辑你的问题,包括它,我可以进一步解释。第一个应该在本地和远程的所有分支中显示该文件的所有历史记录。第二个应该显示包含在其中一个提交中的历史,而不是另一个提交。

代码语言:javascript
复制
$ git log --oneline --graph --color=auto --decorate --all ui/login/Login.java
$ git log --oneline --graph --color=auto --decorate 833dee16...bbdbbb72

您还可以查看您在存储库中所做工作的历史。只需键入git reflog;这将显示您已经签出的特定版本的历史记录;因此,您将能够查看是否有一段时间将丢失的commit签出,然后切换到另一个不包含它的提交。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25540255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档