问题标签 [git-reflog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
12 回答
155032 浏览

git - 如何从 git 存储库中删除旧历史记录?

恐怕我找不到像这种特殊情况的任何东西。

我有一个历史悠久的 git 存储库:500 多个分支,500 多个标签,可以追溯到 2007 年年中。它包含约 19,500 次提交。我们希望删除 2010 年 1 月 1 日之前的所有历史记录,以使其更小更易于处理(我们会将历史记录的完整副本保存在存档存储库中)。

我知道我想要成为新存储库根的提交。但是,我无法找出正确的 git mojo 来截断 repo 以从该提交开始。我猜一些变种

涉及移植物是必要的;可能还需要处理我们要单独保留的 200 多个分支中的每一个,然后将 repo 重新修补在一起(我确实知道该怎么做)。

有没有人做过这样的事情?如果重要的话,我有 git 1.7.2.3 。

0 投票
2 回答
3478 浏览

git - 搞砸了主 git 分支......无法弄清楚我需要恢复什么

我正在开发一个 git 存储库,它有一个 master 分支,我们称之为ab分支。我的团队正在ab分支上工作,并且有一个使用 github 的拉取请求工作流。我的一个队友从他的分支jeremy_ab_deletionsab分支提出了拉取请求。我正在审查/测试他的更改,但是当我将它们合并到ab分支中时,我不小心将它们合并到了 master 中,并在我发现错误之前将 master 推送到了 github。以为我可以 git-revert 我所做的更改git revert SHA并且它似乎有效......

我认为这已经足够了,我很高兴地切换回我的 ab 分支并继续工作。然而,现在,我意识到以前从ab分支中提交的永远不应该在 master 中结束的提交都在 master 中。这……真是一团糟。由于他的分支最初是从 中分离出来的ab,然后我将它合并到 master 中,我应该使用git revert -m 1 SHA.

今天我试图弄清楚我到底哪里出错了,我对 git 历史和我的 reflog 感到很困惑。首先,我尝试还原还原,然后执行git revert -m 1 SHA但 git 告诉我:

所以我认为好吧......也许那不是合并提交,我需要针对不同的 SHA。但是看看历史,我一生都无法弄清楚其中哪一个是合并提交......

说“这应该在 AB 上”的两个提交是还原提交以还原“已删除的不必要测试”和“删除未使用的视图和页面”提交。对 master 的下一次提交是今天,之前的提交是在 16 日,两者都不相关。我没有看到实际合并发生在哪里。

我浏览了我的 reflog,看看到底哪里出了问题。git reset --hard HEAD@{NUM}我使用然后检查关键文件以查看错误更改是否存在于那个位置,然后使用并检查reflog 版本。最后,我将范围缩小到这些 reflog:

特别是 HEAD@{88} 这里没有错误的提交,而 HEAD@{87} 有。因此有理由假设我在提交上搞砸了merge jeremy_ab_deletions: Fast-forward......但我无法弄清楚那将是哪个“合并提交”。我试过这个:

我......似乎找不到实际的合并提交?有谁知道我做错了什么:/我现在很迷茫。

0 投票
1 回答
1110 浏览

git - 无限期地保持 Git Reflog?

我倾向于对我的数据有点偏执,包括恢复它的能力。

Git reflog 数据在 30 天后被修剪。有没有办法设置它,以便无限期地维护和保留 reflog 数据?

这样做有什么主要的优势或劣势(除了空间或速度方面的考虑)吗?

0 投票
2 回答
7377 浏览

git - 恢复添加到索引但随后被 git reset 删除的文件

我在索引中添加了一些文件,但后来我错误地用git reset --hard. 我该如何恢复它们?这是发生的事情:

  1. 我使用添加了所有文件git add .
  2. 然后我承诺
  3. 当我检查状态时,仍然有文件未包含在 add 的提交中,这很奇怪
  4. 我再次添加了未跟踪的文件,这次成功了
  5. 但我希望所有内容都在 1 次提交中,所以我查找了如何取消我刚刚提交的内容
  6. 我用过git reset --hard HEAD^——显然是个坏主意,所有文件都被删除了
  7. 所以我过去常常git reflog找到我离开的地方
  8. 然后我过去常常git reflog ______回到我的最后一次提交。
  9. 然后我曾经git reset HEAD取消提交提交(我最初应该做的)但是我在提交之后添加的文件(见上文)仍然消失了。

我如何取回这些文件?

0 投票
3 回答
1588 浏览

git - 没有出现在任何分支中但在“git show”中可用的提交发生了什么

我在裸仓库中有一个可用的提交 ID。
git show commit id, 显示带有更改的提交。

但是使用以下命令时不会显示相同的提交

或者

提交 ID 可能发生了什么?

0 投票
2 回答
195 浏览

git - 为什么新头和旧头使用 git reflog 具有相同的 sha id?

我认为这应该是两个不同的 HEADS,所以为什么它们对应相同的 sha 值,即 2aad8cb ...

0 投票
1 回答
2157 浏览

git - 如何增加 git reflog 输出的条目数?

我有一个我删除的分支(使用-D),但我需要它回来。我认为 git reflog 命令将是一个很好的查看位置。当我运行它时,我只看到显示了 50 个操作,并且我找不到该分支的任何提交。分支在一天前被删除,我的印象是它不会从 reflog 中删除 30 天。

有没有办法在 reflog 中查看更多条目?

0 投票
1 回答
6646 浏览

git - 恢复被 git pull 覆盖的更改

我遇到了 git 问题,我无法检索被git pull.

我开始了一个没有 GitHub 存储库的项目,后来我做了这个项目。我在创建存储库时分叉了存储库,其中包含一个README文件。

我在本地添加了我想使用 推送存储库的文件git add,但后来意识到我应该README从 GitHub 存储库中提取第一个文件。

拉动后,我尝试推送我的更改,但收到了消息Everything up-to-date

我使用ls命令发现添加的文件git add被删除并替换为README.md.

这些是我执行的命令:
命令

使用git log只是显示了其他人在README. 考虑到我没有做出任何承诺,我想这是意料之中的。

Usinggit reflog表明我做了一次拉动,(HEAD@{0})但 usinggit reset --hard HEAD@{0}似乎没有做任何事情。我也尝试git reset --hard HEAD@{"20 minutes ago"}过,但只收到警告说日志只回到了我的第一次拉取。

有没有办法恢复被拉取覆盖的未提交更改?

编辑

我很抱歉没有做功课,我注意到侧边栏上有一个问题,这个问题是重复的:Git pull deleted uncommitted changes

我将使用失物招领 ( cd .git/lost-found/other) 来尝试恢复我的更改。

有没有比 lost-found 更简单的方法来恢复更改,我想这是新问题。如果没有,我会用我正在使用的方法来回答自己。

0 投票
2 回答
88 浏览

git - git checkout 上一页

有没有一种简单的方法可以切换回您最近在当前分支之前所在的分支?与命令行中的“cd -”相同的概念。

在多个分支上工作时,这可能很有用。

0 投票
1 回答
211 浏览

git - 在 Windows 上签出 HEAD(和变体)时出现奇怪的 Git 行为

设置

让我们想象一个简单的存储库,如下所示。可以看到HEAD指向master

行为

现在,让我们执行一些结帐操作

reflog 表明

  • 签出HEAD不会在 reflog 中产生任何条目
  • 签出master会在 reflog 中插入一个新条目(说明HEAD从 移动mastermaster

让我们试试别的

reflog 现在显示

  • head已解析为相同的 SHA 99d2060
  • HEAD现在已分离
  • 一个新条目已插入到 reflog 中(说明HEAD从 移动masterhead

问题

我很难理解这些行为。

  • 为什么签出HEAD不会在 reflog 中产生任何内容,而签出master(指向 by 的分支HEAD)会产生?
  • 为什么签出head(小写)会分离,HEAD而 git 可以成功地将其剥离到同一个提交?

注意:这些测试是在 Windows/msysgit 上进行的