从git pull之前获取文件的版本

时间:2014-08-14 08:18:00

标签: git github

我不确定这是否可行,但我想知道在我做git pull之前我的文件版本是什么。

例如

  1. 我有一组文件已经被git从github中部署到生产中,这些文件并没有像我预期的那样表现。
  2. 我从本地计算机添加了一些日志记录并将其提交给github。
  3. 我做了一个git pull来获取新的日志记录
  4. 我的代码莫名其妙地工作,这让我觉得在我拉之前部署的版本还没有更新到最新版本。
  5. 我想在步骤3中执行git pull之前检​​查部署了哪个版本。无论如何都要这样做吗?

1 个答案:

答案 0 :(得分:3)

与往常一样,我们从这开始:git pull基本上是git fetch,后跟git merge(或者,如果您已对其进行配置或以不同方式运行,git fetch git rebase)。

git fetch命令仅更新“远程分支”标签,而不更新本地标签,因此我们忽略该部分,因此问:“在git merge之后,如何判断哪个版本是branch-label 使用命名,或者之前命名的修订版HEAD?“答案 - 好吧,其中一个,但让我们使用这个 - 是:“它在你的reflogs中。”

Git为分支名称保留了“ref log”,并为HEAD本身保留了一个ref-log。当git merge成功并更新分支名称和HEAD时,相应的reflog将根据需要使用新旧提交ID进行更新。

如果您已经完成了其他一些git checkout等等,那么HEAD的reflog可能会更新。但是,分支只在分支标签本身更新时才会更新,因此历史记录中倒退的第一步很可能会告诉您在成功合并更新之前分支的位置。

你没有说你的分支的名称在这里,所以我只称它为sasquatch。前一步指出的地点sasquatch只是sasquatch@{1}

您可以使用以下命令查看原始提交ID:

git rev-parse sasquatch@{1}
例如,

或将该名称提供给git loggit show

第二步是sasquatch@{2},依此类推。

在少数情况下,您必须使用引号或反斜杠来保护大括号字符{}免受饥饿的贝壳的影响,因此您可能需要写:

git rev-parse 'sasquatch@{1}'

如果没有引号的版本出错。

您可以使用以下命令查看分支sasquatch的所有reflog条目:

git reflog sasquatch

如果没有参数,git reflog会显示HEAD的所有条目。


为了完整起见,我们还要注意git merge离开ORIG_HEAD指向合并之前的commit-ID。这个名称是好的,直到其他东西覆盖它,例如rebase或其他合并。但是,reflog名称在很长一段时间内都是好的(尽管当你累积更多的更改时,数字会增加)。


所有这些都会告诉您有关本地存储库的信息。您可能还有origin/远程分支的reflog;这些将告诉您(或您的git)在联系origin并获得更新时观察到的内容。他们不能告诉你在遥控器上不同时间实际存在的情况,除非你的git调用他们并获得更新的时间(快照及时,原样)。