我不确定这是否可行,但我想知道在我做git pull之前我的文件版本是什么。
例如
我想在步骤3中执行git pull之前检查部署了哪个版本。无论如何都要这样做吗?
答案 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 log
或git 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调用他们并获得更新的时间(快照及时,原样)。