我在8月27日19:43:46 2014 +0800有个承诺,
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个文件。
git d --name-only a5f8bcb^..a5f8bcb
res/layout/layout_login.xml
base/BaseAct.java
ui/login/Login.java
(END)然后其他人就会做出修改。
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,只有一个文件被执行。
git d --name-only 833dee1^..833dee1
res/values/strings.xml
(END)然后检查Login.java的日志
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克隆。添加一些输出:
$ git log --oneline --graph --color=auto --decorate --all ui/login/Login.javac5a5ae9在2014年8月21日15:54:39,很多天前,9f88669和b77af0c是在我们发现问题后提交的,git在a5f8bcb丢失了日志。
git log --oneline --graph --color=auto --decorate 833dee16...bbdbbb72发布于 2014-08-28 06:58:01
即使进行了编辑,也很难确定,但我认为这里有足够的信息来猜测发生了什么:您完成了提交(因为这是您的唯一分支),但是您可能通过运行git reset --hard (几乎可以肯定是git reset的某个变体)将其从分支中抛出。
实际上,至少有两个提交不在您的分支上:您将显示:
bbdbbb7214de8611a787c92daf93dbc2719600d0
a5f8bcbf7fdfa995325a338a02ad8eef611ac9f8在顶部,但是您的主要git log输出都没有显示。事实上,该输出中也缺少833dee1...,b391737...也是如此。
关于git的好处是提交实际上仍然在您的存储库中。由于有了重飞,默认情况下至少要坚持30天。你所要做的就是复活或复制它们。
如果您想要恢复该提交(以及以前通过git reset丢弃的任何提交),请给提示--大多数提交都有一个名称(分支或标记,任何一个都可以)。假设bbdbbb7...是最提示的,并且您希望为它创建一个分支:
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 reflog或git log -g,以找到任何想要返回的“丢失”提交。)
如果您只是想复制以前的提交,可以使用git cherry-pick进行此操作。这将尝试在命名的提交中重复相同的更改,但将它们应用到当前的工作树中,然后根据结果进行新的提交(并复制此新提交的原始提交消息)。
发布于 2014-08-28 03:47:59
从所提供的信息中很难分辨出到底发生了什么。
您已经列出了几个提交,但是没有做任何事情来显示它们在哪个分支中,或者合并历史是什么。完全有可能,您似乎丢失的提交位于与您当前正在查看的分支不同的分支上。
另一种可能是,最近提交的时间戳可能比丢失的时间戳更早,这一事实误导了您。可以重基提交,在更新的提交的基础上应用旧的提交,所以当您查看历史记录时,首先看到的是旧的提交。
或者另一种可能是,您已经以某种方式放弃了您的提交,让它们在您的本地存储库中分离,而没有将它们推送并与其他历史记录合并。如果您曾经对上游分支执行git reset,则可能发生这种情况。
这是你怎么知道发生了什么事。这样做的最佳方式之一是可视化历史。如果安装了gitk这样的图形工具,您可以这样做,如果没有安装,只需在终端中使用git log --graph即可。
尝试运行以下命令来查看发生了什么。如果你不知道如何解释输出,编辑你的问题,包括它,我可以进一步解释。第一个应该在本地和远程的所有分支中显示该文件的所有历史记录。第二个应该显示包含在其中一个提交中的历史,而不是另一个提交。
$ git log --oneline --graph --color=auto --decorate --all ui/login/Login.java
$ git log --oneline --graph --color=auto --decorate 833dee16...bbdbbb72您还可以查看您在存储库中所做工作的历史。只需键入git reflog;这将显示您已经签出的特定版本的历史记录;因此,您将能够查看是否有一段时间将丢失的commit签出,然后切换到另一个不包含它的提交。
https://stackoverflow.com/questions/25540255
复制相似问题